(57)【特許請求の範囲】
【請求項１】
Ｎ×Ｎ要素のデータブロックにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第１の行開始点データとして記憶するとともに、処理方向の最も後方に存在する非零要素の位置を第１の行終了点データとして記憶し、かつ、各列ごとに、処理方向の最も手前に存在する非零要素の位置を第１の列開始点データとして記憶するともに、処理方向の最も後方に存在する非零要素の位置を第１の列終了点データとして記憶し、
前記第１の行開始点データと前記第１の行終了点データ間のみのデータ及び前記第１の列開始点データと前記第１の列終了点データ間のみのデータを用いて、行方向または列方向のいずれかの方向の積和演算を行う第１の処理と、
前記第１の処理後に、前記第１の処理で行われていない方向の積和演算を行う第２の処理とを行う２次元直交換処理方法であって、
前記第１の処理は、
前記Ｎ×Ｎ要素のデータブロックにおける全ての要素が零である行または列の数を比較し、当該比較の結果、数の多い方向の積和演算を行い、
前記全ての要素が零である行または列の数が同数である場合には、前記Ｎ×Ｎ要素のデータブロックにおける前記行開始点データと当該行開始点データに対応する行終了点データとの差の総和と、前記列開始点データと当該列開始点データに対応する列終了点データとの差の総和とを比較し、当該比較の結果、総和の少ない方向の積和演算を行うことを特徴とする２次元直交換処理方法。
【請求項２】
前記第１の処理後に、前記第１の処理後のデータにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第２の行開始点データとして記憶するとともに、処理方向の最も後方に存在する非零要素の位置を第２の行終了点データとして記憶し、かつ、各列ごとに、処理方向の最も手前に存在する非零要素の位置を第２の列開始点データとして記憶するともに、処理方向の最も後方に存在する非零要素の位置を第２の列終了点データとして記憶し、
前記第２の行開始点データと前記第２の行終了点データ間のみのデータ及び前記第２の列開始点データと前記第２の列終了点データ間のみのデータを用いて、前記第２の処理を行うことを特徴とする２次元直交換処理方法。
【請求項３】
Ｎ×Ｎ要素のデータブロックごとにデータ変換処理を行う２次元直交変換処理２次元直交変換処理装置であって、
処理対象となるＮ×Ｎのデータブロックを記憶するデータ記憶手段と、
前記データ記憶手段に記憶されたＮ×Ｎのデータブロックにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第１の行開始点データとして記憶する行開始点データ記憶手段と、
処理方向の最も後方に存在する非零要素の位置を第１の行終了点データとして記憶する行終了点データ記憶手段と、
前記Ｎ×Ｎのデータブロックにおける各列ごとに、処理方向の最も手前に存在する非零要素の位置を第１の列開始点データとして記憶する列開始点データ記憶手段と、
当該列における処理方向の最も後方に存在する非零要素の位置を第１の列終了点データとして記憶する列終了点データ記憶手段と、
前記第１の行開始点データと前記第１の行終了点データとの間のみのデータ及び前記列開始点データと前記列終了点データ記憶手段との間のみのデータを用いて、行方向または列方向のいずれかの積和演算を行う第１の積和演算手段と、
前記第１の積和演算手段による積和演算の後、前記第１の積和演算手段による積和演算で行われていない方向の積和演算を行う第２の積和演算手段と、
を有し、
前記第１の積和演算手段は、
前記Ｎ×Ｎ要素のデータブロックにおける全ての要素が零である行または列のうち、数の多い方向の積和演算を行い、
前記全ての要素が零である行または列の数が同数である場合には、前記Ｎ×Ｎ要素のデータブロックにおける前記行開始点データと当該行開始点データに対応する行終了点データとの差の総和と、前記列開始点データと当該列開始点データに対応する列終了点データとの差の総和のうち、少ない方向の積和演算を行うことを特徴とする２次元直交換処理装置。
【請求項４】
前記第１の積和演算手段の積和演算後のデータにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第２の行開始点データとして記憶する行開始点データ記憶手段と、処理方向の最も後方に存在する非零要素の位置を第２の行終了点データとして記憶する行終了点データ記憶手段と、
前記第１の積和演算手段の積和演算後のデータにおける各列ごとに、処理方向の最も手前に存在する非零要素の位置を第２の列開始点データとして記憶する列開始点データ記憶手段と、処理方向の最も後方に存在する非零要素の位置を第２の列終了点データとして記憶する列終了点記憶手段と、
を有し、
前記第２の積和演算手段は、前記第２の行開始点データと前記第２の行終了点データ間のみのデータ及び前記第２の列開始点データと前記第２の列終了点データ間のみのデータを用いて、前記第１の積和演算手段による積和演算で行われていない方向の積和演算を行うことを特徴とする２次元直交換処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、音情報、画像情報、映像情報などの情報圧縮、また符号化などの信号処理に用いられる２次元直交変換処理方法および２次元直交変換処理装置に関する。
【０００２】
【従来の技術】
情報機器の高機能化により、情報の符号化、圧縮に欠かせない直交変換処理は、より重要度を増している。また、情報機器の汎用性の面から、また技術革新の速さへの対応のために、より汎用的なハードウェア、また、より一般的なデータ構造に対応できる直交変換処理方法が求められている。
【０００３】
以下は具体的な説明のために、広く用いられている静止画符号化技術であるＪＰＥＧ処理を例にとる。ＪＰＥＧは、離散コサイン変換（ＤＣＴ）、量子化、ランレングス符号化、ハフマン符号化などを技術要素として含む画像圧縮、符号化方法である。図１７から図１９はこれらを簡単に説明するためのものである。
【０００４】
図１７は、画像データＤ１からＪＰＥＧ処理の単位となるデータブロックＡ１，Ａ２，Ａ３，…の切り出しを模式的に示すものである。ＪＰＥＧ処理は、ＮとＭを自然数とし、８Ｎ×８Ｍのサイズのデータブロックに対して行われる。８Ｎ×８Ｍのデータブロックは、データを間引かれて、最終的に８×８のサイズとなり、ＪＰＥＧ処理そのものは、全て８×８のデータブロックに対して行われる。そのため、以降は８×８のデータブロックを例にして説明する。
【０００５】
具体的な例として、あるデータブロックのデータが図１８（ａ）のようなものであるとする。ＪＰＥＧ処理の第１ステップは、これにＤＣＴ処理を行うものである。ＤＣＴ処理は直交変換の一種であり、画像データを周波数領域に変換するものである。ＤＣＴ処理は数式で表現すると、
【０００６】
【数１】
0003733883.tif 000002
【０００７】
のように表される。この（１）式において、Ｐは画像データであり、Ｃは変換係数、ｉ、ｊはそれぞれ横方向、縦方向の画素の位置を示す。また、ｍ，ｎはそれぞれ横方向、縦方向の周波数成分を示す。また、Ｂは本来、符号無しデータである画素データを計算の都合上、符号有りデータへ変換するためのバイアス値である。上記の演算によって得られるＳが、元画像を周波数領域へ変換したものである。
【０００８】
この処理により、図１８（ａ）のデータは、図１８（ｂ）のデータへ変換される。画像の復号時には、このデータに対し、以下に示す（２）式のような逆ＤＣＴ処理を行うことにより、元のデータが復元される。
【０００９】
【数２】
0003733883.tif 000003
【００１０】
ＪＰＥＧ処理における次のステップは、量子化である。人間の視覚特性は周波数の低いデータに対して敏感であり、逆に周波数の高いデータに対して鈍感である。この特性を利用し、周波数の低い領域のデータをより細かなスケールで表現し、逆に周波数の高い領域のデータをより粗いスケールで表現することにより、全体としてのデータ量を削減することができる。このような操作をスカラー量子化と呼ぶ。
【００１１】
仮に図１８（ｄ）のような量子化スケールを用いた場合、図１８（ｂ）のデータは、図１８（ｃ）のデータに量子化される。この図１８（ｃ）より明らかなように、零となる要素の数が増えている。
【００１２】
ＪＰＥＧ処理における次のステップは、ランレングス符号化である。図１９および図２０はこれを説明するためのものである。まず最初に８×８の６４個の要素は、図１９（ａ）に示すようなジグザグスキャン順序で、図１９（ｂ）に示すような１列のデータへ並べ替えられる。これは、より最初の方に２次元的な意味での低周波側のデータがあり、後に行くほど高周波側のデータが並べられることになる。
【００１３】
図２０は、図１８（ｃ）のデータを並べ替えた例であり、図２０（ａ）のデータは、図２０（ｂ）のように並べ替えられる。実際のランレングス符号化では、この並びの中の零の連鎖をさらに符号化する。たとえば、図２０（ｃ）に示すように、ある位置以降のデータが全て零である場合、その零の連鎖の全てを、一つのデータ終端記号（Ｅｎｄ  Ｏｆ  Ｂｌｏｃｋ、略してＥＯＢ）で置き換える。さらに、それ以外の零もそれぞれ記号に置き換えられるのであるが、本発明の要点からは離れるので省略する。
【００１４】
ＪＰＥＧにおける次のステップはハフマン符号化であるが、これも本発明の要点から離れるので省略する。
【００１５】
ところで、ＪＰＥＧ全体の処理の中で、特にＤＣＴ処理は非常に大量の演算を必要とする。つまり、この部分を高速化することが、ＪＰＥＧ処理全体の高速化につながる。以下、ＤＣＴ演算を例にとり、その高速化について説明する。
【００１６】
ＤＣＴ演算は前述の（１）式に示したようなものであるが、これは以下に示すような２段階の１次元処理として実行される。
【００１７】
【数３】
0003733883.tif 000004
【００１８】
【数４】
0003733883.tif 000005
【００１９】
この計算を、より分かりやすくするために、変換係数を
【００２０】
【数５】
0003733883.tif 000006
【００２１】
とし、行列演算の形で書くと以下のような形となる。
【００２２】
【数６】
0003733883.tif 000007
【００２３】
【数７】
0003733883.tif 000008
【００２４】
これは模式的に書くと、図２１（ａ），（ｂ）のように、行方向の演算処理と列方向の演算処理（処理方向それぞれ矢印で示す）を、行または列のいずれかから順次実行すると言うことである。ここで重要であるのは、（３）式と（４）式の実行順序についての自由度があると言うことである。原理的に言えば、演算が有限精度で行われることによる誤差を除き、最終的な結果は、この実行順序に依存しない。
【００２５】
ＤＣＴ演算の高速化は、このような行列演算を高速化することと同等になる。このような高速化において、従来例において用いられる方法は以下のようなものがある。
【００２６】
特開平４−７００６０において用いられている手法は、データブロック内の全てのデータが零の時、そのＤＣＴ演算をスキップするというものである。
【００２７】
上の式から明らかであるように、このような条件では、演算結果は全て零になるので、演算を省略することが可能である。このような条件は、特にプログレッシブ型と呼ばれる時に成立する可能性が高い。
【００２８】
特開平４−１３７９７５において用いられている手法は、４並列演算が可能なハードウェアにおいて、その４要素が零の時に演算をスキップすると言うようなものである。
【００２９】
ＤＣＴ演算で用いられるデータの精度は１６ビットであることが多く、６４ビットの演算レジスタをもつハードウェアにおいては、４つのデータを同時に処理することができる。この並列演算により処理を高速化し、さらに、結果が自明であるデータが全て零の時に演算を省略することにより、より高速化を行うものである。この手法は特開平４−２０００７９においても述べられている。
【００３０】
また、特開平４−２２００８１において用いられている手法は、上述の特開平４−７００６０と類似した手法であるが、データブロック内のデータが直流成分、つまり、（０、０）要素のみの場合に対応したものである。このとき、ＤＣＴ演算結果は、全てのデータが同じ値となり、１つのデータの演算を行うだけで、演算結果を得ることができる。
【００３１】
また、特開平１０−６３６４６で用いられている手法は、データの状態に対応した複数の演算手段を持ち、ＥＯＢの位置により、それらの演算手段の内から最適なものを選択することにより演算を高速化するものである。
【００３２】
図２２はこれを簡単に説明するものである。図２２（ａ）に示す位置にＥＯＢが現れたと仮定すると、先に説明したように、それ以降のデータは全て零である。逆に、それ以前のデータは零ではない可能性が高い。つまり、零ではないデータの位置を塗りつぶし、零であるデータの位置を塗りつぶさないで表示すると、ある点にＥＯＢが現れた場合の零、非零のデータの分布は、図２２（ｂ）のようなものである可能性が高い。このデータの偏りに対応する演算手段を複数用意し、最も適切な演算手段を選択することにより、ＤＣＴ演算を高速化することができる。
【００３３】
特開平１０−３２２６９９は、上述の例と類似した考え方であるが、予めデータ領域を２つの領域に分割し、データが零ではない可能性が高い低周波領域においては常に高速ＤＣＴアルゴリズムを用いた演算を行い、それ以外の領域では通常のＤＣＴを行うものである。これは図２３（ａ）に示すように、たとえば、データ領域を４つに分割し、左上の領域Ｚ１は常にデータがあると仮定し、それ以外の領域は、個別に零、非零の判断と処理を行うものである。
【００３４】
これは、処理をある程度固定することにより、先の従来例で必要であった条件判断のための負荷を軽減するものである。
【００３５】
特開平１１−４１６０１は、以上で説明した４並列演算、複数の演算手段、またＥＯＢの位置による条件判断の全てを用いるものである。
【００３６】
【発明が解決しようとする課題】
先に述べたような従来例は、それぞれ有効なものであるが、以下に述べるような課題は残る。
【００３７】
特開平４−７００６０および特開平４−２２００８１に述べられているのは、データが特殊な状態である場合のみの高速化であり、より一般的な条件での有効性は劣る。
【００３８】
特開平４−１３７９７５および特開平４−２０００７９に述べられているような４並列演算ハードウェアを基本とするものは、４個のデータの整列、分解の負荷、また、４個のデータが零か非零かの判断の負荷が大きい。また、４並列演算処理の効果は非常に大きなものであるが、このような機能を持つハードウェア以外においては有効なものではない。
【００３９】
具体的な例として、図２４（ａ）のようなデータを仮定する。図中の塗りつぶした部分が非零要素であるとする。この場合、４並列演算を用いると、図２４（ｂ）の塗りつぶした位置の要素につき演算を行う必要がある。勿論、並列演算の効果により、演算処理時間の増大は少ないと考えられるが、同時に、単純な処理に比較した処理の高速化の効果もない。また、データの零、非零の判断、及び、データの整列、分解の処理が付加的に必要となる。
【００４０】
特開平１０−６３６４６、および、特開平１０−３２２６９９は複数の演算手段を持つものであり、処理の複雑さが増す。またＥＯＢによる条件判断は、必ずしも有効なものではない。たとえば、上と同じ図２５（ａ）のようなデータを仮定する。そうすると、ＥＯＢによる判断は、図２５（ｂ）のようなデータを仮定することになり、非常に冗長な演算を行う必要がでてくる。特開平１１−４１６０１も以上と同様である。
【００４１】
以上のように従来例における直交変換処理の高速化手法は、特殊なデータの場合のみへ対応したものであり、また、特定のハードウェア構造を仮定したものである。また、一部は非常に複雑な構造を必要とするものである。
【００４２】
本発明は、以上の課題を解決し、特殊なハードウェアを仮定せず、また、一般のデータへも適用可能なものとする２次元直交変換処理方法および２次元直交変換処理装置を提供することを目的としている。
【００４３】
【課題を解決するための手段】
上述した目的を達成するため、本発明の２次元直交変換方法は、Ｎ×Ｎ要素のデータブロックにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第１の行開始点データとして記憶するとともに、処理方向の最も後方に存在する非零要素の位置を第１の行終了点データとして記憶し、かつ、各列ごとに、処理方向の最も手前に存在する非零要素の位置を第１の列開始点データとして記憶するともに、処理方向の最も後方に存在する非零要素の位置を第１の列終了点データとして記憶し、  前記第１の行開始点データと前記第１の行終了点データ間のみのデータ及び前記第１の列開始点データと前記第１の列終了点データ間のみのデータを用いて、行方向または列方向のいずれかの方向の積和演算を行う第１の処理と、前記第１の処理後に、前記第１の処理で行われていない方向の積和演算を行う第２の処理とを行う２次元直交換処理方法であって、前記第１の処理は、前記Ｎ×Ｎ要素のデータブロックにおける全ての要素が零である行または列の数を比較し、当該比較の結果、数の多い方向の積和演算を行い、前記全ての要素が零である行または列の数が同数である場合には、前記Ｎ×Ｎ要素のデータブロックにおける前記行開始点データと当該行開始点データに対応する行終了点データとの差の総和と、前記列開始点データと当該列開始点データに対応する列終了点データとの差の総和とを比較し、当該比較の結果、総和の少ない方向の積和演算を行うようにしている。
【００４４】
この２次元直交変換方法において、前記第１の処理後に、前記第１の処理後のデータにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第２の行開始点データとして記憶するとともに、処理方向の最も後方に存在する非零要素の位置を第２の行終了点データとして記憶し、かつ、各列ごとに、処理方向の最も手前に存在する非零要素の位置を第２の列開始点データとして記憶するともに、処理方向の最も後方に存在する非零要素の位置を第２の列終了点データとして記憶し、前記第２の行開始点データと前記第２の行終了点データ間のみのデータ及び前記第２の列開始点データと前記第２の列終了点データ間のみのデータを用いて、前記第２の処理を行うようにしている。
【００４７】
また、本発明の２次元直交変換処理装置は、Ｎ×Ｎ要素のデータブロックごとにデータ変換処理を行う２次元直交変換処理２次元直交変換処理装置であって、処理対象となるＮ×Ｎのデータブロックを記憶するデータ記憶手段と、前記データ記憶手段に記憶されたＮ×Ｎのデータブロックにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第１の行開始点データとして記憶する行開始点データ記憶手段と、処理方向の最も後方に存在する非零要素の位置を第１の行終了点データとして記憶する行終了点データ記憶手段と、前記Ｎ×Ｎのデータブロックにおける各列ごとに、処理方向の最も手前に存在する非零要素の位置を第１の列開始点データとして記憶する列開始点データ記憶手段と、当該列における処理方向の最も後方に存在する非零要素の位置を第１の列終了点データとして記憶する列終了点データ記憶手段と、前記第１の行開始点データと前記第１の行終了点データとの間のみのデータ及び前記列開始点データと前記列終了点データ記憶手段との間のみのデータを用いて、行方向または列方向のいずれかの積和演算を行う第１の積和演算手段と、前記第１の積和演算手段による積和演算の後、前記第１の積和演算手段による積和演算で行われていない方向の積和演算を行う第２の積和演算手段と、
を有し、前記第１の積和演算手段は、前記Ｎ×Ｎ要素のデータブロックにおける全ての要素が零である行または列のうち、数の多い方向の積和演算を行い、前記全ての要素が零である行または列の数が同数である場合には、前記Ｎ×Ｎ要素のデータブロックにおける前記行開始点データと当該行開始点データに対応する行終了点データとの差の総和と、前記列開始点データと当該列開始点データに対応する列終了点データとの差の総和のうち、少ない方向の積和演算を行うようにしている。
【００４８】
この２次元直交変換処理装置において、前記第１の積和演算手段の積和演算後のデータにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第２の行開始点データとして記憶する行開始点データ記憶手段と、処理方向の最も後方に存在する非零要素の位置を第２の行終了点データとして記憶する行終了点データ記憶手段と、  前記第１の積和演算手段の積和演算後のデータにおける各列ごとに、処理方向の最も手前に存在する非零要素の位置を第２の列開始点データとして記憶する列開始点データ記憶手段と、処理方向の最も後方に存在する非零要素の位置を第２の列終了点データとして記憶する列終了点記憶手段と、を有し、前記第２の積和演算手段は、前記第２の行開始点データと前記第２の行終了点データ間のみのデータ及び前記第２の列開始点データと前記第２の列終了点データ間のみのデータを用いて、前記第１の積和演算手段による積和演算で行われていない方向の積和演算を行うようにしている。
【００５１】
このように本発明は、行開始点データと行終了点データ間のみのデータ及び列開始点データと列終了点データ間のみのデータを用いて積和演算を行うようにしているので、非常に簡単な処理で積和演算を簡略化することができ、高速な直交変換処理が可能となる。また、積和演算を行うべき範囲を適正に設定することできることから、高精度な直交変換処理が可能となる。
【００５３】
また、Ｎ×Ｎ要素のデータブロックにおける全ての要素が零である行または列の数を判断するだけで第１の処理の積和演算を行う方向を決定できる場合もある。この場合、行側の方が多ければ行方向から演算実行を行い、列側の方が多ければ列方向から演算実行を行うといった簡単な処理で演算実行順序を決定することができ、それによって、最小回数で効率よく演算を行うことができる。
【００５４】
なお、この処理において、全ての要素が零である行または列の数が同数である場合には、Ｎ×Ｎ要素のデータブロックにおける行開始点データと当該行開始点データに対応する行終了点データとの差の総和と、列開始点データと当該列開始点データに対応する列終了点データとの差の総和を求めることで決定できるので、これによっても、比較的簡単な処理で演算実行順序を決定することができる。
【００５５】
また、第１の処理後に、第１の処理後のデータにおける各行ごとに、処理方向の最も手前に存在する非零要素の位置を第２の行開始点データとして記憶するとともに、処理方向の最も後方に存在する非零要素の位置を第２の行終了点データとして記憶し、かつ、各列ごとに、処理方向の最も手前に存在する非零要素の位置を第２の列開始点データとして記憶するともに、処理方向の最も後方に存在する非零要素の位置を第２の列終了点データとして記憶し、前記第２の行開始点データと前記第２の行終了点データ間のみのデータ及び前記第２の列開始点データと前記第２の列終了点データ間のみのデータを用いて、前記第２の処理を行うようにしているので、行方向および列方向のそれぞれについての積和演算処理を簡略化することができ、それによって、直交変換処理全体をより一層高速化することが可能となる。
【００５６】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。なお、この実施の形態で説明する内容は、本発明の２次元直交変換処理方法および２次元直交変換装置についての説明である。
【００５７】
また、本発明は特定の直交変換に依存するものではないが、この実施の形態では具体的な説明のために、広く用いられている静止画符号化技術であるＪＰＥＧ処理を例にとる。
【００５８】
図１は本発明の基本的な２次元直交変換処理装置の概略的な構成を示すもので、処理対象となるＮ×Ｎ（８×８）のデータブロックを記録するデータ記録手段１、このデータ記憶手段１に記憶されている８×８のデータブロックの各行ごとに、その行における処理方向の最も手前（図１においては最も左側）に存在する非零要素の位置を行開始点データとして記憶する行開始点データ記憶手段Ｃｓ、当該行における処理方向の最も後方（図１においては最も右側）に存在する非零要素の位置を行終了点データとして記憶する行終了点データ記憶手段Ｃｅ、同じく、各列ごとに、その列における処理方向の最も手前（図１においては最も上側）に存在する非零要素の位置を列開始点データとして記憶する列開始点データ記憶手段Ｒｓ、当該列における処理方向の最も後方（図１においては最も下側）に存在する非零要素の位置を列終了点データとして記憶する列終了点データ記憶手段Ｒｅ、これらデータ記録手段１、行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅに存在するデータを選択して取得するデータ選択手段２、積和演算を行うための変数や係数を記憶する変換係数記憶手段３、データ選択手段２で選択されたデータに基づき、変数係数記憶手段３の変数や係数を用いて本発明の規則に基く積和演算を行う積和演算手段４を有した構成となっている。
【００５９】
また、図2は図1の構成において、行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅをそれぞれ2組持つ例であり、この場合、行開始点データ記憶手段Ｃｓは行開始点データ記憶手段Ｃｓ１，Ｃｓ２と表し、行終了点データを記憶する行終了点データ記憶手段Ｃｅは行終了点データ記憶手段Ｃｅ１，Ｃｅ２と表し、列開始点データ記憶手段Ｒｓは列開始点データ記憶手段Ｒｓ１，Ｒｓ２と表し、列終了点データ記憶手段Ｒは列終了点データ記憶手段Ｒｅ１，Ｒｅ２と表している。
【００６０】
また、図３は本発明による２次元直交変換処理の全体的な流れを示したものであり、その処理の流れを大まかに説明すれば、データ端点処理を含む復号処理を行い（ステップｓ１）、そのあと、行と列のいずれかから演算を実行するかの実行順序の優先度の判定を行う（ステップｓ２）。そして、端点処理を含む行または列の直交変換処理を行って（ステップｓ３）、残る行または列の直交変換処理を行う（ステップｓ４）。
【００６１】
このステップｓ１からｓ４の処理について、以下、適宜補足しながら、本発明を詳細に説明する。まず、ステップｓ１におけるデータ端点処理を含む復号処理について説明する。ＪＰＥＧ復号処理の最初の処理は、ハフマン復号と、ランレングス復号によるゼロの復元と、ジグザグスキャンの並び変えである。本発明によるこの処理は、図４および図５に示すように行われる。
【００６２】
図４はこのデータ端点処理を含む復号処理の処理手順を説明する図であり、まず、図１に示した行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅのそれぞれの開始点データと終了点データが初期化される（ステップｓ１１）。
【００６３】
この初期化というのは、図１におけるデータ記憶手段１に記憶された８×８のデータブロックにおける最も左上のデータ位置を１と考えるのであれば、行および列の開始点データと終了点データの初期データとしては、例えば、０を書き込むことであり、また、最も左上のデータ位置を０と考えるのであれば、行および列の開始点データと終了点データの初期データとしては、例えば、−１を書き込むことである。
【００６４】
なお、この実施の形態では、８×８のデータブロックにおける最も左上のデータ位置を１とするものとし、したがって、初期化によって、行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅのそれぞれの開始点データと終了点データにはそれぞれ０が書き込まれるものとする。
【００６５】
図５（ａ）は行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅのそれぞれに、初期データとして０が書き込まれた状態が示されている。なお、図５において、８×８のデータブロックの行方向の辺と列方向の辺にそれぞれ付された１，２，３，…，８の符号は行および列方向における位置を示している。
【００６６】
その後、復号処理が進行し、図５（ｂ）のような状態になったとする。ここで、塗りつぶされた要素は非零要素であり、塗りつぶされていない要素は零要素であるとする。このような状況になると、非零要素の存在する行や列において、行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅのそれぞれに開始点データと終了点データが書き込まれる。
【００６７】
たとえば、幾つか例を取って説明すれば、この時点での１行目の行開始点データは１、行終了点データは８であり、２行目の行開始点データは１、行終了点データは６である。また、列方向についてみれば、１列目の列開始点データは１、列終了点データは３であり、５列目の列開始点データは１、列終了点データは４である。
【００６８】
さらに復号が進み、図５（ｃ）の黒丸で示した要素が非零となったと仮定する。そうすると、図４に示した処理手順にしたがって、行および列それぞれの開始点データと終了点データが図５（ｃ）のように更新される。
【００６９】
以上の処理を図４により説明すると、図４の処理手順において、まず最初に、行および列のそれぞれの開始点データと終了点データの初期化（ステップｓ１１）が終わったあと、処理対象となるデータブロックについての処理が終了したか否かを判断し（ステップｓ１２）、そのデータブロックについての処理が終了していなければ、次のデータを読み込んで復号する処理を行い（ステップｓ１３）、その復号されたデータが零であるか否かを判断する処理を行う（ステップｓ１４）。
【００７０】
そして、復号されたデータが零でなければ、ステップｓ１５〜ｓ２０の処理（このステップｓ１５〜ｓ２０の処理をここではデータ端点処理と呼ぶ）が行われる。このデータ端点処理は、行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅのそれぞれの開始点データと終了点データを書き込む（更新する）動作であり、たとえば、図５（ａ）から（ｂ）さらに（ｃ）へというような処理である。このデータ端点処理について、図５（ｃ）の黒丸を付した部分を例にとって説明する。
【００７１】
この図５（ｃ）の例は、図５（ｂ）の状態以降の復号処理により、黒丸で示した位置が零で無かったということであり、この場合、図４におけるステップｓ１５に入る。このステップｓ１５では、その行の開始点データが零であるか否かを見て、行の開始点データが零である場合には、その行の開始点データを更新する（ステップｓ１６）。
【００７２】
つまり、この図５（ｃ）の例では、それまでその位置の行開始点データは零であったので、ステップｓ１６に進み、行開始点データの更新がなされる。この場合、その行開始位置は図示の左から５番目であるので、更新後の行開始点データは５となり、図５（ｃ）に示すように行開始点データ記憶部Ｃｓに５が書き込まれる。続いて、行の行終了点データの更新が行われるが（ステップｓ１７）、この場合、行終了点データも５となる。
【００７３】
次に、列の列開始点データが零であるか否かを見て（ステップ１８）、列の列開始点データが零である場合には、その列の列開始点データを更新する（ステップｓ１９）。この図５（ｃ）の例では、その５列目の列開始点データは零でないので、列の列開始点データの更新は行わずに、列の列終了点データのみの更新が行われる（ステップｓ２０）。つまり、この場合、その列の列開始点データは１のままであるが、図５（ｃ）に示すように列終了点データ記憶部Ｒｅが６に更新される。
【００７４】
以上説明した図４の一連の処理手順で重要であるのは、この図４からもわかるように、ランレングス復号化は非零要素に注目した復号化であり、零要素に関しては、付加的な処理が何ら発生していないことである。つまり、従来例において見られたように、零要素、非零要素の判断は本発明では不要であるということである。
【００７５】
以上のような処理を繰り返し行うことによって、処理対象となる８×８のデータブロックについてデータ端点処理を含む復号処理が終了する。これによって、図１に示したデータ記憶手段１には復号化された非零要素のデータが書き込まれるとともに、行開始点データ記憶手段Ｃｓ、行終了点データ記憶手段Ｃｅ、列開始点データ記憶手段Ｒｓ、列終了点データ記憶手段Ｒｅには、それぞれの行および列において、非零要素の開始点データと終了点データが書き込まれる。
【００７６】
つまり、行開始点データ記憶手段Ｃｓには、その行に含まれる最も左側の非零要素の位置が行開始点データとして書き込まれ、行終了点データ記憶手段Ｃｓには、その行に含まれる最も右側の非零要素の位置が行終了点データとして書き込まれる。また、列開始点データ記憶手段Ｒｓには、その列に含まれる最も上側の非零要素の位置が列開始点データとして書き込まれ、列終了点データ記憶手段Ｒｓには、その列に含まれる最も下側の非零要素の位置が列終了点データとして書き込まれる。
【００７７】
ここで、図３に示す全体的な処理の流れにおいて、ステップｓ１におけるデータ端点処理を含む復号処理の後に続く処理は、行と列における演算実行順序の優先度の判定である（ステップｓ２）。前述したように、２次元直交変換においては、行側の処理と列側の処理の実行順序には自由度がある。しかし、全体の計算量は、この順序に依存して変化する。その模式的な例を図６と図７に示す。
【００７８】
図６（ａ）も図７（ａ）も同じデータを示し、ある行のみに非零要素（塗りつぶされている）を含むものであり、この例では３行目の１行がすべて非零である場合を示している。図６（ｂ）はそれを行側から処理（矢印にて示す）を行う場合を示しており、また、図７（ｂ）は列側から処理（矢印にて示す）を行う場合を示している。
【００７９】
その処理の結果、中間状態として作られたデータの零、非零の状態を示したのが、図６（ｃ）および図７（ｃ）であり、この図６（ｃ）および図７（ｃ）からも明らかであるように、図６（ｃ）は３行目の１行分のみが非零であり、その他が全て零であるのに対し、図７（ｃ）では、８×８のデータブロック全ての要素が非零となる。
【００８０】
つまり、図６（ｄ）および図７（ｄ）に示すような２段目の処理（この例では、図６の場合は１段目の処理が行方向処理であるので２段目の処理としては列方向処理、図７の場合は逆に１段目の処理が列方向処理であるので２段目の処理としては行方向処理）においては、図６と図７とでは非常に大きな計算量の差が発生することになる。
【００８１】
そこで、本発明においては、図８に示すような行と列の演算実行順序の優先度の判定処理を行う。この図８のような行と列の演算実行順序の優先度の判定処理を行なうことによって、全体の計算量を小さくすることができる。
【００８２】
なお、図６および図７の例においては、この図８における最初の段階の判断、つまり、ステップ２３までの判断で演算実行順序の優先度が決定する。このステップｓ２３までの処理は、まず、全ての要素が零である行の数をＮＣ、全ての要素が零である列の数をＮＲとし（ステップｓ２１）、ＮＣ＞ＮＲであれば、行側から処理を行ない、ＮＣ＜ＮＲであれば、列側から処理を行うというものである（ステップｓ２２〜ｓ２５）。
【００８３】
また、ＮＣ＞ＮＲでもなく、ＮＣ＜ＮＲでもない場合、つまり、全ての要素が零である行の数ＮＣと全ての要素が零である列の数ＮＲが同数である場合は、（終了点）−（開始点）の総和を求め、それを行についてはＳＣとし、列についてはＳＲとする（ステップｓ２６）。なお、この（終了点）−（開始点）の総和は、
行方向においてはそれぞれの行開始点データとそれに対応するそれぞれの行終了点データの差の総和であって、それをＳＣとし、列方向においてはそれぞれの列開始点データとそれに対応するそれぞれの列終了点データの差の総和であって、それをＳＲとする。そして、ＳＣ＞ＳＲを判断し、ＳＣ＞ＳＲであれば、列側から処理を開始し（ステップｓ２５）、ＳＣ＞ＳＲでなければ、行側から処理を開始する（ステップｓ２４）。
【００８４】
たとえば、図６および図７においては、全要素が零である行の数は７であり、全要素が零である列の数は０であるので、この図６および図７の場合、上述したように、図８におけるステップ２３までの判断で演算実行順序の優先度が決定し、この場合、行の処理が優先される。
【００８５】
また、図９および図１０の場合は、より詳細な判断が必要であり、この場合は、図８の処理において、ステップｓ２６以降の処理が必要となる。ここでは、行および列の双方において、それぞれ（終了点）−（開始点）の総和が求められ、求められた総和をＳＣとＳＲとする。
【００８６】
これは単純に言って、積和演算処理の和の数に対応する。図９および図１０の例では、行における（終了点）−（開始点）の総和ＳＣは１０となり、列における（終了点）−（開始点）の総和ＳＲは１３となり、図８ステップｓ２７の判断によって、行の処理が優先されることになる。つまり、行を優先した方が演算量は少なく、この場合は、和の数が３だけ少なくなる。
【００８７】
以上のような処理によって、行と列における演算実行順序の優先度が判定される。そして、その後の処理は、図３によれば、データ端点処理を含む行または列の直交変換処理を行うことになる。この処理の具体的な内容を図１１に示す。
【００８８】
この図１１の処理では、ステップｓ３１の処理として、２組目の行、列の開始点データと終了点データを初期化するという処理が存在するが、これは、図２の構成図で示したように、２組の行開始点データ記憶手段Ｃｓ１，Ｃｓ２と２組の行終了点データ記憶手段Ｃｅ１，Ｃｅ２、さらに、２組の列開始点データ記憶手段Ｒｓ１，Ｒｓ２と２組の列終了点データ記憶手段Ｒｅ１，Ｒｅ２を用意した場合に、２組目の行開始点データ記憶手段Ｃｓ２と行終了点データ記憶手段Ｃｅ２、列開始点データ記憶手段Ｒｓ２と列終了点データ記憶手段Ｒｅ２をそれぞれ初期化するということである。この初期化処理は図４のステップｓ１１で説明したと同じに考えればよい。
【００８９】
また、この図1１の処理の流れは全体的には、図４の処理と同じであるが、ステップｓ３３の１つの行または列の直交変換処理が含まれている点が異なる。このステップｓ３３の１つの行または列の直交変換処理の具体的な内容を図１２に示す。
【００９０】
この図１２において、指定された行または列の開始点データ（これをＰｓとする）と終了点データ（これをＰｅとする）を読み込む（ステップｓ４１）。そして、Ｐｓが零、かつ、Ｐｅも零かを判定し（ステップｓ４２）、Ｐｓが零、かつ、Ｐｅも零であれば０を返値とする（ステップｓ４３）。また、Ｐｓが零、かつ、Ｐｅも零でなければ、Ｐｓを開始位置、Ｐｅを終了位置とする（Ｐｅ−Ｐｓ＋１）回の積和を行い、その結果であるＳｕｍを返値とする（ステップｓ４４）。
【００９１】
この図１２からもわかるように、この１つの行または列の１次元の直交変換処理においては、その全ての要素が零である場合（Ｐｓが零、かつ、Ｐｅも零である場合）には、積和演算処理が完全に省略される。これにより、本発明においても従来例である特開平４−７００６０と同等の効果が得られる。また、上記以外の場合、（Ｐｓが零、かつ、Ｐｅも零でない場合）は、その非零要素の開始位置と終了位置の間のみにおいて積和演算が行われる。
【００９２】
この効果を、図１３と従来技術の説明で用いた図２４、図２５を参照して、従来例との比較で説明する。この図１３、図２４、図２５におけるそれぞれ（ａ）の図が元データであり、これらの元データはどれも同じデータであるとする。また、これら図１３、図２４、図２５における（ｂ）の塗りつぶした部分が積和演算の対象となる領域である。
【００９３】
図２４は、従来例における行方向の４並列演算を行う場合を仮定したものである。この場合、図２４（ｂ）に黒く塗りつぶした位置のデータについての積和演算が必要となる。この図２４からもわかるように４並列演算を行う場合は、図２４（ａ）に示す元データに比較して、かなり多くのデータが積和演算の対象となる。
図２５はＥＯＢによる判断を行った場合の例であり、この場合も図２５（ａ）に示す元データに比較して非常に多くのデータが積和演算の対象となることがわかる。
【００９４】
これに対して、図１３は本発明の処理を、行方向について行った場合であり、図１３（ｂ）に示すように、積和演算処理の対象となるデータは、図２４（ｂ）や図２５（ｂ）の従来例に比較してかなり少なくなっていることがわかる。
【００９５】
また、図１４は本発明の処理を、列方向について行ったものであり、この場合も、図１３と同様に積和演算処理の対象となるデータは、図２４（ｂ）や図２５（ｂ）の従来例に比較してかなり少なくなっていることがわかる。
【００９６】
また、この図１３の例について、前述した本発明の行、列における演算実行順序の優先度判定処理（図８参照）を行うと、この場合は、図８のステップｓ２６以降の処理によって、図１３の行方向の処理が優先される。実際、このデータにおいては、図１３の処理の方が図１４に比べて、積和演算処理の回数が１つだけ少ない。
【００９７】
以上のように、本発明の方法は、従来例に比較して非常に少ない処理で１段目（行または列のいずれか）の直交変換処理を行うことができる。
【００９８】
以上説明した図１２の処理（１つの行または列の直交変換処理）は、図１１のステップｓ３３の処理であり、この図１２の処理が終了すると、図１１において、ステップｓ３４以降のデータ端点処理を行う。この場合、２組の行開始点データ記憶手段Ｃｓ１，Ｃｓ２と２組の行終了点データ記憶手段Ｃｅ１，Ｃｅ２、２組の列開始点データ記憶手段Ｒｓ１，Ｒｓ２と２組の列終了点データ記憶手段Ｒｅ１，Ｒｅ２が用意されているので、ここでのデータ端点処理は２組目の行開始点データ記憶手段Ｃｓ２、行終了点データ記憶手段Ｃｅ２、列開始点データ記憶手段Ｒｓ２、列終了点データ記憶手段Ｒｅ２についての端点処理である。この端点処理は図４のステップｓ１４以降の処理と同じである。
【００９９】
このように、ある１つの行プまたは列の直交変換処理が終了した段階でもデータ端点処理が行われるが、この段階におけるデータ端点処理が有効である理由を図１５により次に説明する。
【０１００】
従来においても、本発明においても、零であるデータの処理を省略することにより高速化を行っているのであるが、同様の条件は１段目の処理後のデータにおいても発生する。たとえば、図１５（ａ）のように、全ての要素が同じ値であるデータが存在するものとする。このようなデータについて、１段目の処理後の状態は、図１５（ｂ）に示すように、ある一つの列のみが、非零のデータとなり、それ以外は全て零となる。つまり、このように１段目の処理のよって得られたデータにおいても、これまで説明したようなデータ端点処理を行えば、積和演算回数をより削減することができる。
【０１０１】
これまでの説明によって、図３のステップｓ３までが終了したことになる。この  図３に示した最後の処理は、残る行または列の直交変換処理（ステップｓ４）であり、これは、単に、行または列についての直交変換処理である。これは単純に図１６に示すように、データブロックの終わりか否かの判断（ステップｓ５１）と、１つの行または列の直交変換処理な処理（ステップｓ５２）を行うことで実現される。
【０１０２】
なお、本発明は以上説明した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲で種々変形実施可能となるものである。
【０１０３】
また、本発明は、以上説明した本発明を実現するための処理手順が記述された処理プログラムを作成し、その処理プログラムをフロッピィディスク、光ディスク、ハードディスクなどの記録媒体に記録させておくことができ、本発明はその処理プログラムが記録された記録媒体をも含むものである。また、ネットワークから当該処理プログラムを得るようにしてもよい。
【０１０４】
以上で説明したように本発明によれば、Ｎ×Ｎのデータブロックにおける各行ごとに、その行における処理走査方向最も手前に存在する非零要素の位置を行開始点データ、その行における処理走査方向最も後方に存在する非零要素の位置を行終了点データとして記憶するとともに、各列ごとに、その列における処理走査方向最も手前に存在する非零要素の位置を列開始点データ、その列における処理走査方向最も後方に存在する非零要素の位置を列終了点データとして記憶し、それぞれの行においてはその行の開始点データと終了点データ間のみにおいて積和演算を行い、それぞれの列においてはその列の開始点データと終了点データ間のみにおいて積和演算を行うようにしているので、非常に簡単な処理で積和演算を簡略化することができ、また、積和すべき範囲を適正に判断することができることから高精度な直交変換処理が可能となる。
【０１０５】
また、この積和演算を行う際、その演算実行順序を行方向から行うか列方向から行うかを、Ｎ×Ｎのデータブロックにおけるデータ内容に基づき積和回数の数を考慮して決定するようにしている。このように、演算実行順序をＮ×Ｎのデータブロックにおけるデータ内容によって、行または列のいずれかに決めることで、積和演算を効率よく行うことができる。
【０１０６】
また、本発明においては、特別のハードウェアやデータを仮定するするものではなく、一般のデータに対し、汎用のＣＰＵやＤＳＰでの処理が可能なものである。
【図面の簡単な説明】
【図１】本発明の２次元直交変換装置の概略的な構成図である。
【図２】図１の構成において、行開始点データ記憶手段および行終了点データ記憶手段、列開始点データ記憶手段および列終了点データ記憶手段をそれぞれ２組有した場合の構成図である。
【図３】本発明の２次元直交変換処理の全体的な処理手順を説明するフローチャートである。
【図４】図３のフローチャートにおけるデータ端点処理を含む復号処理を説明するフローチャートである。
【図５】図３のフローチャートにおけるデータ端点処理を説明する図である。
【図６】ある行のみに零要素を含むデータブロックに対し、行方向に処理を行なう場合の計算量についてを模式的に説明する図であり、全ての要素が零である行と列の数のみで行方向からの処理を行なうか列方向からの処理を行なうかを判断する例を示す図である。
【図７】ある行のみに零要素を含むデータブロックに対し、列方向に処理を行なう場合の計算量についてを模式的に説明する図であり、全ての要素が零である行および列の数のみで行方向からの処理を行なうか列方向からの処理を行なうかを判断する例を示す図である。
【図８】図３のフローチャートにおける行と列の処理の優先度の判定処理を説明するフローチャートである。
【図９】複数の行や列に渡って複数の零要素を含むデータブロックに対し、行方向に処理を行なう場合の計算量についてを模式的に説明する図であり、図８のフローチャートにおける（終了点）−（開始点）の総和を行と列それぞれについて求め、その総和の大きさの比較に基づいて行方向からの処理を行なうか列方向からの処理を行なうかを判断する例を示す図である。
【図１０】複数の行や列に渡って複数の零要素を含むデータブロックに対し、列方向に処理を行なう場合の計算量についてを模式的に説明する図であり、図８のフローチャートにおける（終了点）−（開始点）の総和を行と列それぞれについて求め、その総和の大きさの比較に基づいて列方向からの処理を行なうか列方向からの処理を行なうかを判断する例を示す図である。
【図１１】図３のフローチャートにおけるデータ端点処理を含む行または列の直交変換処理を説明するフローチャートである。
【図１２】図１１おける１つの行又は列の直交変換処理を説明するフローチャートである。
【図１３】本発明による積和演算処理の効果を行方向の処理を行なう場合について説明する図である。
【図１４】本発明による積和演算処理の効果を列方向の処理を行なう場合について説明する図である。
【図１５】１つの行または列の直交変換処理を終わった後にさらに端点処理を行う有効性について説明するための画像例を示す図である。
【図１６】個々の行または列の直交変換処理の手順を説明するフローチャートである。
【図１７】画像データから処理単位となるＮ×Ｎ（８×８）のデータブロックの切り出しを模式的に説明する図である。
【図１８】処理単位となるＮ×Ｎ（８×８）のデータブロックのデータ例と、そのデータを周波数領域に変換したのち量子化する処理例を説明する図である。
【図１９】ランレングス符号化処理について説明する図である。
【図２０】図１８（ｃ）のデータを並べ替え、さらに、零の連鎖をＥＯＢに置き換えた場合を示す図である。
【図２１】処理単位となるＮ×Ｎ（８×８）のデータブロックに対する処理を行方向または列方向のいずれから行うかを説明する図である。
【図２２】従来技術において、ＥＯＢの位置により最適な演算手段を選択して直交変換演算の簡略化を図る例を説明する図である。
【図２３】  従来技術において、処理単位となるＮ×Ｎ（８×８）のデータブロックをいくつかの領域に分割して演算を行うことで直交演算の簡略化を図る例を説明する図である。
【図２４】処理単位となるＮ×Ｎ（８×８）のデータブロックにおけるデータにおいて、従来技術の１つである４並列演算（行方向の４並列演算）により積和演算を行なう場合の問題点を説明する図である。
【図２５】処理単位となるＮ×Ｎ（８×８）のデータブロックにおけるデータにおいて、従来技術の１つであるＥＯＢの判断を用いて積和演算を行なう場合の問題点を説明する図である。
【符号の説明】
１  データ記録手段
２  データ選択手段
３  変換係数記憶手段
４  積和演算手段
Ｃｓ  行開始点データ記憶手段
Ｃｅ  行終了点データ記憶手段
Ｒｓ  列開始点データ記憶手段
Ｒｅ  列終了点データ記憶手段
【図１】
0003733883.tif 000009
【図２】
0003733883.tif 000010
【図３】
0003733883.tif 000011
【図４】
0003733883.tif 000012
【図５】
0003733883.tif 000013
【図６】
0003733883.tif 000014
【図７】
0003733883.tif 000015
【図８】
0003733883.tif 000016
【図９】
0003733883.tif 000017
【図１０】
0003733883.tif 000018
【図１１】
0003733883.tif 000019
【図１２】
0003733883.tif 000020
【図１３】
0003733883.tif 000021
【図１４】
0003733883.tif 000022
【図１５】
0003733883.tif 000023
【図１６】
0003733883.tif 000024
【図１７】
0003733883.tif 000025
【図１８】
0003733883.tif 000026
【図１９】
0003733883.tif 000027
【図２０】
0003733883.tif 000028
【図２１】
0003733883.tif 000029
【図２２】
0003733883.tif 000030
【図２３】
0003733883.tif 000031
【図２４】
0003733883.tif 000032
【図２５】
0003733883.tif 000033