(57)【要約】【課題】ＪＰＥＧ符号化を行う際にゼロランレングスの検出処理を高速化する。【解決手段】前処理部１１で画像データをブロック分割し、ＤＣＴ処理および量子化処理後に量子化データ配列Ｑとして量子化バッファ部２０に格納する。ゼロフラグ生成部２５は、各データが０か否かを示すゼロフラグ配列Ｚを生成する。順序列生成部３０は、各配列要素を左上から右下に向けてジグザグに並べ替え、順序列バッファ部４０内に、データ順序列Ｑ′とゼロフラグ順序列Ｚ′として格納する。ランレングス処理部５０は、データ順序列Ｑ′の先頭の１データと、ゼロフラグ順序列Ｚ′の先頭から８個のゼロフラグと、ＥＯＢフラグ順序列Ｅ′の先頭の１フラグと、を一度に読出し、ゼロフラグ群の先頭からゼロが連続して出現していた場合には、これを累積カウントしてゼロランレングス値を生成し、ゼロの連続数だけ読み飛ばして、順序列バッファ部４０から次の読出しを行う。【選択図】図４
2014132705.tif 000002
【特許請求の範囲】
【請求項１】
二次元画像を符号化する画像符号化装置であって、
符号化の対象となる二次元画像を複数のブロックに分割し、それぞれ所定の画素値をもった合計ｎ個の画素を縦横に並べてなるブロック画素配列を生成する前処理部と、
前記ブロック画素配列に対して、離散コサイン変換を行い、得られるｎ個のＤＣＴ係数を縦横に並べてなるＤＣＴ係数配列を生成するＤＣＴ処理部と、
前記ＤＣＴ係数配列に対して、所定の量子化テーブルを用いた量子化処理を行い、得られるｎ個の量子化データを縦横に並べてなる量子化データ配列を生成する量子化処理部と、
前記量子化データ配列を格納する量子化バッファ部と、
前記量子化データ配列を構成するｎ個の量子化データのそれぞれについて、「０である」場合には「零状態」、「０でない」場合には「非零状態」を示すゼロフラグを生成し、生成したゼロフラグを前記量子化データ配列に対応する配列に収容することによりゼロフラグ配列を生成し、これを前記量子化バッファ部に格納するゼロフラグ生成部と、
前記量子化データ配列について、空間周波数分布に応じた所定の並び順を定め、ｎ個のデータを前記並び順に応じて並べたデータ順序列を生成するデータ順序列生成部と、前記ゼロフラグ配列について、ｎ個のゼロフラグを前記並び順に応じて並べたゼロフラグ順序列を生成するゼロフラグ順序列生成部と、を有する順序列生成部と、
前記データ順序列と前記ゼロフラグ順序列とを格納する順序列バッファ部と、
前記順序列バッファ部から、前記データ順序列の第ｉ番目のデータと、前記ゼロフラグ順序列の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグ（但し、ｉ＞ｎ−ｍ＋１の場合は、第ｉ番目〜第ｎ番目までのゼロフラグ）からなる単位ゼロフラグ群と、を読み出す読出処理を、パラメータｉを１から所定ステップ数ずつ順次増加させながら繰り返し実行し、読み出した前記単位ゼロフラグ群を参照することにより前記データ順序列内において０が連続して出現する数を示すゼロランレングス値をカウントし、読み出したデータ順序列内のデータおよびカウントしたゼロランレングス値を出力し、カウントしたゼロランレングス値に応じた数だけデータを読み飛ばすことができるように前記所定ステップ数を設定するランレングス処理部と、
を備えることを特徴とする画像符号化装置。
【請求項２】
請求項１に記載の画像符号化装置において、
ランレングス処理部が、読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理を行い、前記連続数が０の場合にはステップ数を１とし、前記連続数が１以上の場合には当該連続数をステップ数として、パラメータｉを前記ステップ数だけ増加させながら読出処理を繰り返し実行することを特徴とする画像符号化装置。
【請求項３】
請求項２に記載の画像符号化装置において、
ランレングス処理部が、読み出した単位ゼロフラグ群の先頭のゼロフラグが「零状態」のフラグであった場合には、連続数算出処理で求めた連続数を累積加算する処理を行い、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合には、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、前記累積値を初期値０に設定する処理を行うことを特徴とする画像符号化装置。
【請求項４】
請求項１〜３のいずれかに記載の画像符号化装置において、
前処理部が、
三原色Ｒ，Ｇ，Ｂのそれぞれについての画素値が定義された二次元画素配列からなるカラー原画像を入力するカラー原画像入力部と、
前記カラー原画像の色空間をＲＧＢ表色系からＹＣｂＣｒ表色系に変換し、Ｙ，Ｃｂ，Ｃｒのそれぞれについて、画素値が定義された二次元画素配列を生成する表色系変換部と、
前記表色系変換部による変換で得られたＹ，Ｃｂ，Ｃｒの各二次元画素配列を、それぞれ複数のブロックに分割し、Ｉ行Ｊ列に並べられたｎ個（ｎ＝Ｉ×Ｊ）の画素の配列からなるブロック画素配列を生成するブロック分割部と、
を有することを特徴とする画像符号化装置。
【請求項５】
請求項１〜４のいずれかに記載の画像符号化装置において、
ＤＣＴ処理部が、ブロック画素配列に対して離散コサイン変換を行うことにより、左上へゆくほど低周波成分、右下へゆくほど高周波成分が配置されるようにＤＣＴ係数を縦横に並べてなるＤＣＴ係数配列を生成する処理を行い、
データ順序列生成部が、配列の左上隅から右下隅に向けてジグザグに各配列要素を順序づける並び順を定め、量子化データ配列を構成する各量子化データを、前記並び順に応じて並べ替えることによりデータ順序列を生成することを特徴とする画像符号化装置。
【請求項６】
請求項１〜５のいずれかに記載の画像符号化装置において、
量子化処理部が、ＤＣＴ係数配列と同じサイズの配列からなる量子化テーブルを用いて、前記ＤＣＴ係数配列の各配列要素を前記量子化テーブルの対応する配列要素で除する除算演算を行い、得られた商を量子化データとして量子化データ配列を生成することを特徴とする画像符号化装置。
【請求項７】
請求項１〜６のいずれかに記載の画像符号化装置において、
ゼロフラグ生成部が、ゼロフラグを、「零状態」には論理値「０」、「非零状態」には論理値「１」を対応させた１ビットで表現することを特徴とする画像符号化装置。
【請求項８】
請求項７に記載の画像符号化装置において、
ゼロフラグ生成部が、個々の量子化データについてのゼロフラグを生成する構成要素として、当該量子化データを示す全ビットについての論理和演算を行う論理和演算回路を有することを特徴とする画像符号化装置。
【請求項９】
請求項７または８に記載の画像符号化装置において、
量子化バッファ部が、量子化データ配列内の個々の量子化データを示す各ビットを格納するためのフリップフロップと、ゼロフラグ配列内の個々のゼロフラグを示すビットを格納するためのフリップフロップとを有し、
順序列バッファ部が、データ順序列内の個々のデータを示す各ビットを格納するためのフリップフロップと、ゼロフラグ順序列内の個々のゼロフラグを示すビットを格納するためのフリップフロップとを有することを特徴とする画像符号化装置。
【請求項１０】
請求項９に記載の画像符号化装置において、
データ順序列生成部が、量子化バッファ部内のフリップフロップの出力段と順序列バッファ部内のフリップフロップの入力段とを接続する信号線によって構成され、
前記信号線は、量子化データ配列を構成するｎ個のデータを所定の並び順に応じて並べ替えることができるように、量子化バッファ部内で特定のデータが格納されたフリップフロップと順序列バッファ部内で前記特定のデータを格納すべきフリップフロップとを接続することを特徴とする画像符号化装置。
【請求項１１】
請求項９または１０記載の画像符号化装置において、
ゼロフラグ順序列生成部が、量子化バッファ部内のフリップフロップの出力段と順序列バッファ部内のフリップフロップの入力段とを接続する信号線によって構成され、
前記信号線は、ゼロフラグ配列を構成するｎ個のフラグを所定の並び順に応じて並べ替えることができるように、量子化バッファ部内で特定のフラグが格納されたフリップフロップと順序列バッファ部内で前記特定のフラグを格納すべきフリップフロップとを接続することを特徴とする画像符号化装置。
【請求項１２】
請求項１〜１１のいずれかに記載の画像符号化装置において、
順序列バッファ部が、格納しているデータ順序列内のデータおよび格納しているゼロフラグ順序列内のゼロフラグを、与えられたシフト指示に基づいて指定されたシフト量だけ先頭側にシフトさせるシフト機能を有し、
ランレングス処理部が、制御部とゼロランカウンタ部と出力部とを有し、
前記ゼロランカウンタ部は、ゼロランレングス値を計数するために、ゼロカウンタクリア指示が与えられたときに、ゼロランレングス値を初期値０に設定し、所定のゼロカウントアップ量を指定したゼロカウントアップ指示が与えられたときに、ゼロランレングス値を前記ゼロカウントアップ量だけ増加させて累積する累積計数機能を有し、
前記出力部は、所定のデータを伴う出力イネーブル指示が与えられたときに、当該データと前記ゼロランカウンタ部に累積されているゼロランレングス値とを組にして出力する出力機能を有し、
前記制御部は、処理対象となるブロック画素配列に関するブロック処理を行うために、
ブロック処理の開始時に、前記ゼロランカウンタ部に対してゼロカウンタクリア指示を与える初期設定処理と、
前記順序列バッファ部から、データ順序列の先頭データと、ゼロフラグ順序列の先頭からｍ個のゼロフラグ（但し、シフトによりゼロフラグの数がｍ個未満の数になっていた場合は、当該数に相当する個数のゼロフラグ）と、を読み込む読込処理と、
読み込んだ１乃至ｍ個のゼロフラグからなる単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理と、
前記単位ゼロフラグ群の先頭のゼロフラグが「零状態」を示していた場合に、前記ゼロランカウンタ部に対して、前記連続数をゼロカウントアップ量として指定したゼロカウントアップ指示を与えるとともに、前記順序列バッファ部に対して、前記連続数をシフト量として指定したシフト指示を与えるゼロカウントアップ指示処理と、
前記単位ゼロフラグ群の先頭のゼロフラグが「非零状態」を示していた場合に、前記出力部に対して、読み込んだ前記先頭データを伴う出力イネーブル指示を与え、前記ゼロランカウンタ部に対してゼロカウンタクリア指示を与え、前記順序列バッファ部に対して、シフト量を１に指定したシフト指示を与える出力指示処理と、
を、前記処理対象となるブロック画素配列に関するブロック処理が完了するまで繰り返して行う機能を有することを特徴とする画像符号化装置。
【請求項１３】
請求項１〜１１のいずれかに記載の画像符号化装置において、
順序列生成部が、ゼロフラグ順序列を構成するｎ個のゼロフラグのそれぞれについて、自己を含めて後続するゼロフラグが、すべて「零状態」を示している場合には「ブロック終了状態」、そうでない場合には「ブロック継続状態」を示すＥＯＢフラグを生成し、生成したｎ個のＥＯＢフラグを前記ゼロフラグ順序列の並び順に応じて並べたＥＯＢフラグ順序列を生成するＥＯＢフラグ順序列生成部を更に有し、
順序列バッファ部が、データ順序列およびゼロフラグ順序列に加えて、前記ＥＯＢフラグ順序列を格納し、
ランレングス処理部が、データ順序列の第ｉ番目のデータおよび単位ゼロフラグ群を読み出す際に、前記ＥＯＢフラグ順序列の第ｉ番目のＥＯＢフラグも併せて読み出し、読み出したＥＯＢフラグが「ブロック終了状態」を示している場合に、当該ＥＯＢフラグを「ブロック終了状態」を示す情報として出力し、処理対象となるブロック画素配列に関する以後の処理を中止することを特徴とする画像符号化装置。
【請求項１４】
請求項１３に記載の画像符号化装置において、
ＥＯＢフラグ順序列生成部が、ＥＯＢフラグを、「ブロック終了状態」には論理値「０」、「ブロック継続状態」には論理値「１」を対応させた１ビットで表現し、
ランレングス処理部が、ＥＯＢフラグを出力する際に、当該フラグの論理値を反転して出力することを特徴とする画像符号化装置。
【請求項１５】
請求項１４に記載の画像符号化装置において、
量子化バッファ部が、ゼロフラグ配列内の個々のゼロフラグを示すビットを格納するためのフリップフロップを有し、
順序列バッファ部が、ＥＯＢフラグ順序列内の個々のＥＯＢフラグを示すビットを格納するためのフリップフロップを有し、
ＥＯＢフラグ順序列生成部が、量子化バッファ部内のフリップフロップの出力段と順序列バッファ部内のフリップフロップの入力段とを接続する複数組の信号線と、これら信号線上に設けられた合計（ｎ−１）個の論理和演算回路と、を有し、
前記（ｎ−１）個の論理和演算回路のうち、第ｉ番目（ｉ＝１〜ｎ−１）の論理和演算回路は、量子化バッファ部内で第ｉ番目〜第ｎ番目の並び順に対応するゼロフラグを格納している合計（ｎ−ｉ＋１）個のフリップフロップの各出力段に接続された（ｎ−ｉ＋１）本の信号線を入力とし、順序列バッファ部内で第ｉ番目（ｉ＝１〜ｎ−１）の並び順に対応するＥＯＢフラグを格納すべきフリップフロップの入力段に接続される１本の信号線を出力とする「（ｎ−ｉ＋１）入力１出力論理和演算回路」であり、
前記ＥＯＢフラグ順序列生成部が、更に、量子化バッファ部内で第ｎ番目の並び順に対応するゼロフラグを格納しているフリップフロップの出力段と、順序列バッファ部内で第ｎ番目の並び順に対応するＥＯＢフラグを格納すべきフリップフロップの入力段と、を接続する信号線を有することを特徴とする画像符号化装置。
【請求項１６】
請求項１３〜１５のいずれかに記載の画像符号化装置において、
順序列バッファ部が、格納しているデータ順序列内のデータ、格納しているゼロフラグ順序列内のゼロフラグ、格納しているＥＯＢフラグ順序列内のＥＯＢフラグを、与えられたシフト指示に基づいて指定されたシフト量だけ先頭側にシフトさせるシフト機能を有し、
ランレングス処理部が、制御部とゼロランカウンタ部と出力部とを有し、
前記ゼロランカウンタ部は、ゼロランレングス値を計数するために、ゼロカウンタクリア指示が与えられたときに、ゼロランレングス値を初期値０に設定し、所定のゼロカウントアップ量を指定したゼロカウントアップ指示が与えられたときに、ゼロランレングス値を前記ゼロカウントアップ量だけ増加させて累積する累積計数機能を有し、
前記出力部は、所定のデータを伴う出力イネーブル指示およびＥＯＢフラグが与えられたときに、与えられたデータと前記ゼロランカウンタ部に累積されているゼロランレングス値と与えられたＥＯＢフラグとを組にして出力する出力機能を有し、
前記制御部は、処理対象となるブロック画素配列に関するブロック処理を行うために、
ブロック処理の開始時に、前記ゼロランカウンタ部に対してゼロカウンタクリア指示を与える初期設定処理と、
前記順序列バッファ部から、データ順序列の先頭データと、ゼロフラグ順序列の先頭からｍ個のゼロフラグ（但し、シフトによりゼロフラグの数がｍ個未満の数になっていた場合は、当該数に相当する個数のゼロフラグ）と、ＥＯＢフラグ順序列の先頭のＥＯＢフラグと、を読み込む読込処理と、
読み込んだ１乃至ｍ個のゼロフラグからなる単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理と、
前記単位ゼロフラグ群の先頭のゼロフラグが「零状態」を示していた場合に、前記ゼロランカウンタ部に対して、前記連続数をゼロカウントアップ量として指定したゼロカウントアップ指示を与えるとともに、前記順序列バッファ部に対して、前記連続数をシフト量として指定したシフト指示を与えるゼロカウントアップ指示処理と、
前記単位ゼロフラグ群の先頭のゼロフラグが「非零状態」を示していた場合に、前記出力部に対して、読み込んだ前記先頭データと、出力イネーブル指示と、読み込んだＥＯＢフラグと、を与え、前記ゼロランカウンタ部に対してゼロカウンタクリア指示を与え、前記順序列バッファ部に対して、シフト量を１に指定したシフト指示を与える出力指示処理と、
を、「ブロック終了状態」を示すＥＯＢフラグが読み込まれるまで繰り返して行う機能を有し、「ブロック終了状態」を示すＥＯＢフラグが読み込まれたときには、前記出力部に対して、出力イネーブル指示と、読み込んだ前記先頭データと、読み込んだＥＯＢフラグと、を与える処理を行う機能を有することを特徴とする画像符号化装置。
【請求項１７】
請求項１２または１６に記載の画像符号化装置において、
順序列バッファ部が、ゼロフラグ順序列内のフラグを、先頭側に、指定されたシフト量だけシフトさせる際に、末尾側に、前記シフト量に対応する数の「非零状態」を示すダミーフラグを追加する処理を行い、
制御部が、読込処理を実行する際に、常に、ゼロフラグ順序列の先頭からｍ個のフラグを読み込むことを特徴とする画像符号化装置。
【請求項１８】
請求項１２、１６、１７のいずれかに記載の画像符号化装置において、
制御部が、出力指示処理を実行する前に、ゼロランカウンタ部に累積されているゼロランレングス値が、所定の許容値Ｍ以上になっていた場合には、出力指示処理を実行する前に、出力部に対して、中間出力イネーブル指示を与えるとともに、ゼロランカウンタ部に対して中間出力補正指示を与える中間出力指示処理を、ゼロランカウンタ部に累積されているゼロランレングス値が、許容値Ｍ未満になるまで繰り返し実行し、
ゼロランカウンタ部が、前記中間出力補正指示が与えられたときに、ゼロランレングス値を前記許容値Ｍだけ減少させる補正処理を行う機能を有し、
前記出力部が、前記中間出力イネーブル指示が与えられたときに、０を示すデータと（Ｍ−１）個の０が連続することを示すゼロランレングス値とを組にして出力する中間出力処理を行う機能を有することを特徴とする画像符号化装置。
【請求項１９】
請求項１２，１６〜１８のいずれかに記載の画像符号化装置において、
ランレングス処理部が、データカウンタ部を更に有し、
このデータカウンタ部は、データカウント値を計数するために、データカウンタクリア指示が与えられたときに、データカウント値を初期値０に設定し、所定のデータカウントアップ量を指定したデータカウントアップ指示が与えられたときに、データカウント値を前記データカウントアップ量だけ増加させて累積する機能を有し、
制御部が、初期設定処理を行う際に、前記データカウンタ部に対してデータカウンタクリア指示を与える機能を更に有し、
制御部が、ゼロカウントアップ指示処理および出力指示処理を行う際に、前記データカウンタ部に対して、シフト量をデータカウントアップ量として指定したデータカウントアップ指示を与える機能を更に有し、
制御部が、前記データカウンタ部に累積されているデータカウント値が、処理対象となるブロック画素配列に含まれる画素数ｎに達していた場合に、前記処理対象となるブロック画素配列に関するブロック処理を完了することを特徴とする画像符号化装置。
【請求項２０】
請求項１〜１９のいずれかに記載の画像符号化装置において、
ランレングス処理部の後段にランレングスバッファ部を設け、このランレングスバッファ部の更に後段にハフマン符号化部を設け、
ランレングス処理部からの出力をランレングスバッファ部に格納し、このランレングスバッファ部に格納されている情報に対してハフマン符号化部によってハフマン符号化処理を行い、符号化されたデータを出力することを特徴とする画像符号化装置。
【請求項２１】
請求項２０に記載の画像符号化装置において、
順序列バッファ部、ランレングス処理部、ランレングスバッファ部をそれぞれ複数Ｋ組並列させて設け、
順序列生成部が、生成した順序列を格納する際に、処理対象となるブロック画素配列ごとにＫ組の順序列バッファ部を切り替えて格納し、
第ｋ番目（ｋ＝１〜Ｋ）の順序列バッファ部に格納されている順序列に対して、第ｋ番目のランレングス処理部による処理が行われ、第ｋ番目のランレングス処理部からの出力が第ｋ番目のランレングスバッファ部に格納されるようにし、
ハフマン符号化部が、Ｋ組のランレングスバッファ部に格納されている情報を順に読み出しながらハフマン符号化処理を行うことを特徴とする画像符号化装置。
【請求項２２】
請求項１〜２１のいずれかに記載の画像符号化装置として機能する半導体集積回路。
【請求項２３】
所定の画素値をもったｎ個の画素をＩ行Ｊ列に並べることによって構成されるブロック画素配列を有する二次元画像を符号化する画像符号化方法であって、
前記ブロック画素配列に対して、離散コサイン変換を行い、得られたｎ個のＤＣＴ係数をＩ行Ｊ列に並べてなるＤＣＴ係数配列を生成するＤＣＴ処理段階と、
前記ＤＣＴ係数配列に対して、所定の量子化テーブルを用いた量子化処理を行い、得られたｎ個の量子化データをＩ行Ｊ列に並べてなる量子化データ配列を生成する量子化処理段階と、
前記量子化データ配列を構成するｎ個の量子化データのそれぞれについて、「０である」場合には「零状態」、「０でない」場合には「非零状態」を示すゼロフラグを生成し、生成したゼロフラグを前記量子化データ配列に対応するＩ行Ｊ列の配列に収容することによりゼロフラグ配列を生成するゼロフラグ生成段階と、
前記量子化データ配列について、空間周波数分布に応じた所定の並び順を定め、前記量子化データ配列内のｎ個のデータを前記並び順に応じて並べることによりデータ順序列を生成して格納するデータ順序列生成段階と、
前記ゼロフラグ配列内のｎ個のゼロフラグを前記並び順に応じて並べることによりゼロフラグ順序列を生成して格納するゼロフラグ順序列生成段階と、
前記データ順序列の第ｉ番目のデータと、前記ゼロフラグ順序列の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグ（但し、ｉ＞ｎ−ｍ＋１の場合は、第ｉ番目〜第ｎ番目までのゼロフラグ）からなる単位ゼロフラグ群と、を読み出す処理を、パラメータｉを１から所定ステップ数ずつ順次増加させながら繰り返し実行し、読み出した前記単位ゼロフラグ群を参照することにより前記データ順序列内において０が連続して出現する数を示すゼロランレングス値をカウントし、読み出したデータ順序列内のデータおよびカウントしたゼロランレングス値を出力し、カウントしたゼロランレングス値に応じた数だけデータを読み飛ばすことができるように前記所定ステップ数を設定するランレングス処理段階と、
を有することを特徴とする画像符号化方法。
【請求項２４】
請求項２３に記載の画像符号化方法において、
ランレングス処理段階で、読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理を行い、前記連続数が０の場合にはステップ数を１とし、前記連続数が１以上の場合には当該連続数をステップ数として、パラメータｉを前記ステップ数だけ増加させながら読出処理を繰り返し実行することを特徴とする画像符号化方法。
【請求項２５】
請求項２４に記載の画像符号化方法において、
ランレングス処理段階で、読み出した単位ゼロフラグ群の先頭のゼロフラグが「零状態」のフラグであった場合には、連続数算出処理で求めた連続数を累積加算する処理を行い、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合には、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、前記累積値を初期値０に設定する処理を行うことを特徴とする画像符号化方法。
【請求項２６】
請求項２５に記載の画像符号化方法において、
ランレングス処理段階で、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合に、連続数の累積値が所定の許容値Ｍ以上になっていたときには、０を示すデータと（Ｍ−１）個の０が連続することを示すゼロランレングス値とを組にして出力するとともに、前記累積値を前記許容値Ｍだけ減少させる中間出力処理を、前記累積値が前記許容値Ｍ未満になるまで繰り返し実行し、その後で、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、前記累積値を初期値０に設定する処理を行うことを特徴とする画像符号化方法。
【請求項２７】
請求項２５または２６に記載の画像符号化方法において、
ランレングス処理段階で、データ順序列から読み出したもしくは読み飛ばしたデータの総数を計数する処理を行い、計数された総数が処理対象となるブロック画素配列に含まれる画素数ｎに達していた場合には、前記処理対象となるブロック画素配列に関する処理を完了することを特徴とする画像符号化方法。
【請求項２８】
請求項２３〜２７のいずれかに記載の画像符号化方法において、
ゼロフラグ順序列を構成するｎ個のゼロフラグのそれぞれについて、自己を含めて後続するゼロフラグが、すべて「零状態」を示している場合には「ブロック終了状態」、そうでない場合には「ブロック継続状態」を示すＥＯＢフラグを生成し、生成したｎ個のＥＯＢフラグを前記ゼロフラグ順序列の並び順に応じて並べたＥＯＢフラグ順序列を生成して格納するＥＯＢフラグ順序列生成段階を更に有し、
ランレングス処理段階で、データ順序列の第ｉ番目のデータおよび単位ゼロフラグ群を読み出す際に、前記ＥＯＢフラグ順序列の第ｉ番目のＥＯＢフラグも併せて読み出し、読み出したＥＯＢフラグが「ブロック終了状態」を示している場合には、当該ＥＯＢフラグを出力して、処理対象となるブロック画素配列に関する以後の処理を中止することを特徴とする画像符号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像符号化装置および画像符号化方法に関し、特に、データ容量を圧縮するためにゼロランレングスを用いた符号化を行う技術に関する。
【背景技術】
【０００２】
画像データを圧縮する方法として、ゼロランレングスを用いた符号化技術が一般に利用されており、特に、ＪＰＥＧ方式を採用した画像符号化技術は広く普及している。ＪＰＥＧ方式では、符号化の対象となる二次元画像を複数のブロックに分割し、個々のブロックごとに離散コサイン変換および量子化処理を行って「０」の出現頻度を高め、更に、「０」ができるだけ連続して出現するようにデータをジグザグに並べ替えた上でゼロランレングスの検出およびハフマン符号化を行う、という手順により圧縮が行われる。
【０００３】
たとえば、下記の特許文献１には、ハフマン符号化段階における符号化効率を向上させるために、１つのブロックを複数の領域に分割してゼロランレングスの検出を行う技術が開示されており、特許文献２には、デジタルカメラなどに内蔵するのに適した小型の画像符号化装置を実現するために、ＲＯＭやＲＡＭなどのハードウエアリソースの負担を低減させる技術が開示されている。一方、下記の特許文献３には、ゼロランレングスの検出処理とハフマン符号化処理とを分離し、ハフマン符号化処理では、非ゼロ係数とゼロランレングスのみの処理を行って、符号化処理を高速化する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−２３７４４８号公報
【特許文献２】特開２００１−１４５１０６号公報
【特許文献３】特開２００３−３３３３３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、デジタルカメラなどの性能向上により、１枚の静止画像の画素数が増大し、データ圧縮を行う際に必要な符号化処理にも高速化が求められるようになってきている。しかしながら、これまで提案されているＪＰＥＧ方式を採用した画像符号化方法には、ゼロランレングスを検出する処理に時間がかかるという問題がある。
【０００６】
前掲の特許文献３に開示されている技術においても、ゼロランレングスの検出処理がボトルネックとなり、符号化処理全体の高速化を阻む原因になっている。たとえば、ブロック単位の量子化処理によって８×８の量子化データ配列が得られた場合、合計６４個のデータのそれぞれについて、「０」か「０でない」か判定する必要があり、６４サイクル分の処理時間がかかってしまうことになる。
【０００７】
そこで本発明は、ゼロランレングスを用いた符号化を行う際に、より高速化を図ることが可能な画像符号化装置および画像符号化方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
(1)   本発明の第１の態様は、二次元画像を符号化する画像符号化装置において、
符号化の対象となる二次元画像を複数のブロックに分割し、それぞれ所定の画素値をもった合計ｎ個の画素を縦横に並べてなるブロック画素配列を生成する前処理部と、
ブロック画素配列に対して、離散コサイン変換を行い、得られるｎ個のＤＣＴ係数を縦横に並べてなるＤＣＴ係数配列を生成するＤＣＴ処理部と、
ＤＣＴ係数配列に対して、所定の量子化テーブルを用いた量子化処理を行い、得られるｎ個の量子化データを縦横に並べてなる量子化データ配列を生成する量子化処理部と、
量子化データ配列を格納する量子化バッファ部と、
量子化データ配列を構成するｎ個の量子化データのそれぞれについて、「０である」場合には「零状態」、「０でない」場合には「非零状態」を示すゼロフラグを生成し、生成したゼロフラグを量子化データ配列に対応する配列に収容することによりゼロフラグ配列を生成し、これを量子化バッファ部に格納するゼロフラグ生成部と、
量子化データ配列について、空間周波数分布に応じた所定の並び順を定め、ｎ個のデータを上記並び順に応じて並べたデータ順序列を生成するデータ順序列生成部と、ゼロフラグ配列について、ｎ個のゼロフラグを上記並び順に応じて並べたゼロフラグ順序列を生成するゼロフラグ順序列生成部と、を有する順序列生成部と、
データ順序列とゼロフラグ順序列とを格納する順序列バッファ部と、
順序列バッファ部から、データ順序列の第ｉ番目のデータと、ゼロフラグ順序列の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグ（但し、ｉ＞ｎ−ｍ＋１の場合は、第ｉ番目〜第ｎ番目までのゼロフラグ）からなる単位ゼロフラグ群と、を読み出す読出処理を、パラメータｉを１から所定ステップ数ずつ順次増加させながら繰り返し実行し、読み出した単位ゼロフラグ群を参照することによりデータ順序列内において０が連続して出現する数を示すゼロランレングス値をカウントし、読み出したデータ順序列内のデータおよびカウントしたゼロランレングス値を出力し、カウントしたゼロランレングス値に応じた数だけデータを読み飛ばすことができるように所定ステップ数を設定するランレングス処理部と、
を設けるようにしたものである。
【０００９】
(2)   本発明の第２の態様は、上述した第１の態様に係る画像符号化装置において、
ランレングス処理部が、読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理を行い、連続数が０の場合にはステップ数を１とし、連続数が１以上の場合には当該連続数をステップ数として、パラメータｉを上記ステップ数だけ増加させながら読出処理を繰り返し実行するようにしたものである。
【００１０】
(3)   本発明の第３の態様は、上述した第２の態様に係る画像符号化装置において、
ランレングス処理部が、読み出した単位ゼロフラグ群の先頭のゼロフラグが「零状態」のフラグであった場合には、連続数算出処理で求めた連続数を累積加算する処理を行い、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合には、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、累積値を初期値０に設定する処理を行うようにしたものである。
【００１１】
(4)   本発明の第４の態様は、上述した第１〜第３の態様に係る画像符号化装置において、
前処理部を、
三原色Ｒ，Ｇ，Ｂのそれぞれについての画素値が定義された二次元画素配列からなるカラー原画像を入力するカラー原画像入力部と、
カラー原画像の色空間をＲＧＢ表色系からＹＣｂＣｒ表色系に変換し、Ｙ，Ｃｂ，Ｃｒのそれぞれについて、画素値が定義された二次元画素配列を生成する表色系変換部と、
表色系変換部による変換で得られたＹ，Ｃｂ，Ｃｒの各二次元画素配列を、それぞれ複数のブロックに分割し、Ｉ行Ｊ列に並べられたｎ個（ｎ＝Ｉ×Ｊ）の画素の配列からなるブロック画素配列を生成するブロック分割部と、
によって構成したものである。
【００１２】
(5)   本発明の第５の態様は、上述した第１〜第４の態様に係る画像符号化装置において、
ＤＣＴ処理部が、ブロック画素配列に対して離散コサイン変換を行うことにより、左上へゆくほど低周波成分、右下へゆくほど高周波成分が配置されるようにＤＣＴ係数を縦横に並べてなるＤＣＴ係数配列を生成する処理を行い、
データ順序列生成部が、配列の左上隅から右下隅に向けてジグザグに各配列要素を順序づける並び順を定め、量子化データ配列を構成する各量子化データを、上記並び順に応じて並べ替えることによりデータ順序列を生成するようにしたものである。
【００１３】
(6)   本発明の第６の態様は、上述した第１〜第５の態様に係る画像符号化装置において、
量子化処理部が、ＤＣＴ係数配列と同じサイズの配列からなる量子化テーブルを用いて、ＤＣＴ係数配列の各配列要素を量子化テーブルの対応する配列要素で除する除算演算を行い、得られた商を量子化データとして量子化データ配列を生成するようにしたものである。
【００１４】
(7)   本発明の第７の態様は、上述した第１〜第６の態様に係る画像符号化装置において、
ゼロフラグ生成部が、ゼロフラグを、「零状態」には論理値「０」、「非零状態」には論理値「１」を対応させた１ビットで表現するようにしたものである。
【００１５】
(8)   本発明の第８の態様は、上述した第７の態様に係る画像符号化装置において、
ゼロフラグ生成部が、個々の量子化データについてのゼロフラグを生成する構成要素として、当該量子化データを示す全ビットについての論理和演算を行う論理和演算回路を有するようにしたものである。
【００１６】
(9)   本発明の第９の態様は、上述した第７または第８の態様に係る画像符号化装置において、
量子化バッファ部を、量子化データ配列内の個々の量子化データを示す各ビットを格納するためのフリップフロップと、ゼロフラグ配列内の個々のゼロフラグを示すビットを格納するためのフリップフロップとによって構成し、
順序列バッファ部を、データ順序列内の個々のデータを示す各ビットを格納するためのフリップフロップと、ゼロフラグ順序列内の個々のゼロフラグを示すビットを格納するためのフリップフロップとによって構成したものである。
【００１７】
(10)  本発明の第１０の態様は、上述した第９の態様に係る画像符号化装置において、
データ順序列生成部を、量子化バッファ部内のフリップフロップの出力段と順序列バッファ部内のフリップフロップの入力段とを接続する信号線によって構成し、
この信号線が、量子化データ配列を構成するｎ個のデータを所定の並び順に応じて並べ替えることができるように、量子化バッファ部内で特定のデータが格納されたフリップフロップと順序列バッファ部内で上記特定のデータを格納すべきフリップフロップとを接続する役割を果たすようにしたものである。
【００１８】
(11)  本発明の第１１の態様は、上述した第９または第１０の態様に係る画像符号化装置において、
ゼロフラグ順序列生成部を、量子化バッファ部内のフリップフロップの出力段と順序列バッファ部内のフリップフロップの入力段とを接続する信号線によって構成し、
この信号線が、ゼロフラグ配列を構成するｎ個のフラグを所定の並び順に応じて並べ替えることができるように、量子化バッファ部内で特定のフラグが格納されたフリップフロップと順序列バッファ部内で上記特定のフラグを格納すべきフリップフロップとを接続する役割を果たすようにしたものである。
【００１９】
(12)  本発明の第１２の態様は、上述した第１〜第１１の態様に係る画像符号化装置において、
順序列バッファ部が、格納しているデータ順序列内のデータおよび格納しているゼロフラグ順序列内のゼロフラグを、与えられたシフト指示に基づいて指定されたシフト量だけ先頭側にシフトさせるシフト機能を有し、
ランレングス処理部が、制御部とゼロランカウンタ部と出力部とを有し、
ゼロランカウンタ部は、ゼロランレングス値を計数するために、ゼロカウンタクリア指示が与えられたときに、ゼロランレングス値を初期値０に設定し、所定のゼロカウントアップ量を指定したゼロカウントアップ指示が与えられたときに、ゼロランレングス値を上記ゼロカウントアップ量だけ増加させて累積する累積計数機能を有し、
出力部は、所定のデータを伴う出力イネーブル指示が与えられたときに、当該データとゼロランカウンタ部に累積されているゼロランレングス値とを組にして出力する出力機能を有し、
制御部は、処理対象となるブロック画素配列に関するブロック処理を行うために、
ブロック処理の開始時に、ゼロランカウンタ部に対してゼロカウンタクリア指示を与える初期設定処理と、
順序列バッファ部から、データ順序列の先頭データと、ゼロフラグ順序列の先頭からｍ個のゼロフラグ（但し、シフトによりゼロフラグの数がｍ個未満の数になっていた場合は、当該数に相当する個数のゼロフラグ）と、を読み込む読込処理と、
読み込んだ１乃至ｍ個のゼロフラグからなる単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理と、
単位ゼロフラグ群の先頭のゼロフラグが「零状態」を示していた場合に、ゼロランカウンタ部に対して、連続数をゼロカウントアップ量として指定したゼロカウントアップ指示を与えるとともに、順序列バッファ部に対して、連続数をシフト量として指定したシフト指示を与えるゼロカウントアップ指示処理と、
単位ゼロフラグ群の先頭のゼロフラグが「非零状態」を示していた場合に、出力部に対して、読み込んだ先頭データを伴う出力イネーブル指示を与え、ゼロランカウンタ部に対してゼロカウンタクリア指示を与え、順序列バッファ部に対して、シフト量を１に指定したシフト指示を与える出力指示処理と、
を、処理対象となるブロック画素配列に関するブロック処理が完了するまで繰り返して行う機能を有するようにしたものである。
【００２０】
(13)  本発明の第１３の態様は、上述した第１〜第１１の態様に係る画像符号化装置において、
順序列生成部が、ゼロフラグ順序列を構成するｎ個のゼロフラグのそれぞれについて、自己を含めて後続するゼロフラグが、すべて「零状態」を示している場合には「ブロック終了状態」、そうでない場合には「ブロック継続状態」を示すＥＯＢフラグを生成し、生成したｎ個のＥＯＢフラグをゼロフラグ順序列の並び順に応じて並べたＥＯＢフラグ順序列を生成するＥＯＢフラグ順序列生成部を更に有し、
順序列バッファ部が、データ順序列およびゼロフラグ順序列に加えて、ＥＯＢフラグ順序列を格納し、
ランレングス処理部が、データ順序列の第ｉ番目のデータおよび単位ゼロフラグ群を読み出す際に、ＥＯＢフラグ順序列の第ｉ番目のＥＯＢフラグも併せて読み出し、読み出したＥＯＢフラグが「ブロック終了状態」を示している場合に、当該ＥＯＢフラグを「ブロック終了状態」を示す情報として出力し、処理対象となるブロック画素配列に関する以後の処理を中止するようにしたものである。
【００２１】
(14)  本発明の第１４の態様は、上述した第１３の態様に係る画像符号化装置において、
ＥＯＢフラグ順序列生成部が、ＥＯＢフラグを、「ブロック終了状態」には論理値「０」、「ブロック継続状態」には論理値「１」を対応させた１ビットで表現し、
ランレングス処理部が、ＥＯＢフラグを出力する際に、当該フラグの論理値を反転して出力するようにしたものである。
【００２２】
(15)  本発明の第１５の態様は、上述した第１４の態様に係る画像符号化装置において、
量子化バッファ部が、ゼロフラグ配列内の個々のゼロフラグを示すビットを格納するためのフリップフロップを有し、
順序列バッファ部が、ＥＯＢフラグ順序列内の個々のＥＯＢフラグを示すビットを格納するためのフリップフロップを有し、
ＥＯＢフラグ順序列生成部が、量子化バッファ部内のフリップフロップの出力段と順序列バッファ部内のフリップフロップの入力段とを接続する複数組の信号線と、これら信号線上に設けられた合計（ｎ−１）個の論理和演算回路と、を有し、
上記（ｎ−１）個の論理和演算回路のうち、第ｉ番目（ｉ＝１〜ｎ−１）の論理和演算回路は、量子化バッファ部内で第ｉ番目〜第ｎ番目の並び順に対応するゼロフラグを格納している合計（ｎ−ｉ＋１）個のフリップフロップの各出力段に接続された（ｎ−ｉ＋１）本の信号線を入力とし、順序列バッファ部内で第ｉ番目（ｉ＝１〜ｎ−１）の並び順に対応するＥＯＢフラグを格納すべきフリップフロップの入力段に接続される１本の信号線を出力とする「（ｎ−ｉ＋１）入力１出力論理和演算回路」であり、
ＥＯＢフラグ順序列生成部が、更に、量子化バッファ部内で第ｎ番目の並び順に対応するゼロフラグを格納しているフリップフロップの出力段と、順序列バッファ部内で第ｎ番目の並び順に対応するＥＯＢフラグを格納すべきフリップフロップの入力段と、を接続する信号線を有するようにしたものである。
【００２３】
(16)  本発明の第１６の態様は、上述した第１３〜第１５の態様に係る画像符号化装置において、
順序列バッファ部が、格納しているデータ順序列内のデータ、格納しているゼロフラグ順序列内のゼロフラグ、格納しているＥＯＢフラグ順序列内のＥＯＢフラグを、与えられたシフト指示に基づいて指定されたシフト量だけ先頭側にシフトさせるシフト機能を有し、
ランレングス処理部が、制御部とゼロランカウンタ部と出力部とを有し、
ゼロランカウンタ部は、ゼロランレングス値を計数するために、ゼロカウンタクリア指示が与えられたときに、ゼロランレングス値を初期値０に設定し、所定のゼロカウントアップ量を指定したゼロカウントアップ指示が与えられたときに、ゼロランレングス値を上記ゼロカウントアップ量だけ増加させて累積する累積計数機能を有し、
出力部は、所定のデータを伴う出力イネーブル指示およびＥＯＢフラグが与えられたときに、与えられたデータとゼロランカウンタ部に累積されているゼロランレングス値と与えられたＥＯＢフラグとを組にして出力する出力機能を有し、
制御部は、処理対象となるブロック画素配列に関するブロック処理を行うために、
ブロック処理の開始時に、ゼロランカウンタ部に対してゼロカウンタクリア指示を与える初期設定処理と、
順序列バッファ部から、データ順序列の先頭データと、ゼロフラグ順序列の先頭からｍ個のゼロフラグ（但し、シフトによりゼロフラグの数がｍ個未満の数になっていた場合は、当該数に相当する個数のゼロフラグ）と、ＥＯＢフラグ順序列の先頭のＥＯＢフラグと、を読み込む読込処理と、
読み込んだ１乃至ｍ個のゼロフラグからなる単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理と、
単位ゼロフラグ群の先頭のゼロフラグが「零状態」を示していた場合に、ゼロランカウンタ部に対して、連続数をゼロカウントアップ量として指定したゼロカウントアップ指示を与えるとともに、順序列バッファ部に対して、連続数をシフト量として指定したシフト指示を与えるゼロカウントアップ指示処理と、
単位ゼロフラグ群の先頭のゼロフラグが「非零状態」を示していた場合に、出力部に対して、読み込んだ先頭データと、出力イネーブル指示と、読み込んだＥＯＢフラグと、を与え、ゼロランカウンタ部に対してゼロカウンタクリア指示を与え、順序列バッファ部に対して、シフト量を１に指定したシフト指示を与える出力指示処理と、
を、「ブロック終了状態」を示すＥＯＢフラグが読み込まれるまで繰り返して行う機能を有し、「ブロック終了状態」を示すＥＯＢフラグが読み込まれたときには、出力部に対して、出力イネーブル指示と、読み込んだ先頭データと、読み込んだＥＯＢフラグと、を与える処理を行う機能を有するようにしたものである。
【００２４】
(17)  本発明の第１７の態様は、上述した第１２または第１６の態様に係る画像符号化装置において、
順序列バッファ部が、ゼロフラグ順序列内のフラグを、先頭側に、指定されたシフト量だけシフトさせる際に、末尾側に、シフト量に対応する数の「非零状態」を示すダミーフラグを追加する処理を行い、
制御部が、読込処理を実行する際に、常に、ゼロフラグ順序列の先頭からｍ個のフラグを読み込むようにしたものである。
【００２５】
(18)  本発明の第１８の態様は、上述した第１２、第１６、第１７の態様に係る画像符号化装置において、
制御部が、出力指示処理を実行する前に、ゼロランカウンタ部に累積されているゼロランレングス値が、所定の許容値Ｍ以上になっていた場合には、出力指示処理を実行する前に、出力部に対して、中間出力イネーブル指示を与えるとともに、ゼロランカウンタ部に対して中間出力補正指示を与える中間出力指示処理を、ゼロランカウンタ部に累積されているゼロランレングス値が、許容値Ｍ未満になるまで繰り返し実行し、
ゼロランカウンタ部が、中間出力補正指示が与えられたときに、ゼロランレングス値を許容値Ｍだけ減少させる補正処理を行う機能を有し、
出力部が、中間出力イネーブル指示が与えられたときに、０を示すデータと（Ｍ−１）個の０が連続することを示すゼロランレングス値とを組にして出力する中間出力処理を行う機能を有するようにしたものである。
【００２６】
(19)  本発明の第１９の態様は、上述した第１２、第１６〜第１８の態様に係る画像符号化装置において、
ランレングス処理部が、データカウンタ部を更に有し、
このデータカウンタ部は、データカウント値を計数するために、データカウンタクリア指示が与えられたときに、データカウント値を初期値０に設定し、所定のデータカウントアップ量を指定したデータカウントアップ指示が与えられたときに、データカウント値を上記データカウントアップ量だけ増加させて累積する機能を有し、
制御部が、初期設定処理を行う際に、データカウンタ部に対してデータカウンタクリア指示を与える機能を更に有し、
制御部が、ゼロカウントアップ指示処理および出力指示処理を行う際に、データカウンタ部に対して、シフト量をデータカウントアップ量として指定したデータカウントアップ指示を与える機能を更に有し、
制御部が、データカウンタ部に累積されているデータカウント値が、処理対象となるブロック画素配列に含まれる画素数ｎに達していた場合に、処理対象となるブロック画素配列に関するブロック処理を完了するようにしたものである。
【００２７】
(20)  本発明の第２０の態様は、上述した第１〜第１９の態様に係る画像符号化装置において、
ランレングス処理部の後段にランレングスバッファ部を設け、このランレングスバッファ部の更に後段にハフマン符号化部を設け、
ランレングス処理部からの出力をランレングスバッファ部に格納し、このランレングスバッファ部に格納されている情報に対してハフマン符号化部によってハフマン符号化処理を行い、符号化されたデータを出力するようにしたものである。
【００２８】
(21)  本発明の第２１の態様は、上述した第２０の態様に係る画像符号化装置において、
順序列バッファ部、ランレングス処理部、ランレングスバッファ部をそれぞれ複数Ｋ組並列させて設け、
順序列生成部が、生成した順序列を格納する際に、処理対象となるブロック画素配列ごとにＫ組の順序列バッファ部を切り替えて格納し、
第ｋ番目（ｋ＝１〜Ｋ）の順序列バッファ部に格納されている順序列に対して、第ｋ番目のランレングス処理部による処理が行われ、第ｋ番目のランレングス処理部からの出力が第ｋ番目のランレングスバッファ部に格納されるようにし、
ハフマン符号化部が、Ｋ組のランレングスバッファ部に格納されている情報を順に読み出しながらハフマン符号化処理を行うようにしたものである。
【００２９】
(22)  本発明の第２２の態様は、上述した第１〜第２１の態様に係る画像符号化装置を半導体集積回路によって構成したものである。
【００３０】
(23)  本発明の第２３の態様は、所定の画素値をもったｎ個の画素をＩ行Ｊ列に並べることによって構成されるブロック画素配列を有する二次元画像を符号化する画像符号化方法において、
ブロック画素配列に対して、離散コサイン変換を行い、得られたｎ個のＤＣＴ係数をＩ行Ｊ列に並べてなるＤＣＴ係数配列を生成するＤＣＴ処理段階と、
ＤＣＴ係数配列に対して、所定の量子化テーブルを用いた量子化処理を行い、得られたｎ個の量子化データをＩ行Ｊ列に並べてなる量子化データ配列を生成する量子化処理段階と、
量子化データ配列を構成するｎ個の量子化データのそれぞれについて、「０である」場合には「零状態」、「０でない」場合には「非零状態」を示すゼロフラグを生成し、生成したゼロフラグを量子化データ配列に対応するＩ行Ｊ列の配列に収容することによりゼロフラグ配列を生成するゼロフラグ生成段階と、
量子化データ配列について、空間周波数分布に応じた所定の並び順を定め、量子化データ配列内のｎ個のデータを上記並び順に応じて並べることによりデータ順序列を生成して格納するデータ順序列生成段階と、
ゼロフラグ配列内のｎ個のゼロフラグを上記並び順に応じて並べることによりゼロフラグ順序列を生成して格納するゼロフラグ順序列生成段階と、
データ順序列の第ｉ番目のデータと、ゼロフラグ順序列の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグ（但し、ｉ＞ｎ−ｍ＋１の場合は、第ｉ番目〜第ｎ番目までのゼロフラグ）からなる単位ゼロフラグ群と、を読み出す処理を、パラメータｉを１から所定ステップ数ずつ順次増加させながら繰り返し実行し、読み出した単位ゼロフラグ群を参照することによりデータ順序列内において０が連続して出現する数を示すゼロランレングス値をカウントし、読み出したデータ順序列内のデータおよびカウントしたゼロランレングス値を出力し、カウントしたゼロランレングス値に応じた数だけデータを読み飛ばすことができるように上記所定ステップ数を設定するランレングス処理段階と、
を行うようにしたものである。
【００３１】
(24)  本発明の第２４の態様は、上述した第２３の態様に係る画像符号化方法において、
ランレングス処理段階で、読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理を行い、連続数が０の場合にはステップ数を１とし、連続数が１以上の場合には当該連続数をステップ数として、パラメータｉを上記ステップ数だけ増加させながら読出処理を繰り返し実行するようにしたものである。
【００３２】
(25)  本発明の第２５の態様は、上述した第２４の態様に係る画像符号化方法において、
ランレングス処理段階で、読み出した単位ゼロフラグ群の先頭のゼロフラグが「零状態」のフラグであった場合には、連続数算出処理で求めた連続数を累積加算する処理を行い、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合には、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、累積値を初期値０に設定する処理を行うようにしたものである。
【００３３】
(26)  本発明の第２６の態様は、上述した第２５の態様に係る画像符号化方法において、
ランレングス処理段階で、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合に、連続数の累積値が所定の許容値Ｍ以上になっていたときには、０を示すデータと（Ｍ−１）個の０が連続することを示すゼロランレングス値とを組にして出力するとともに、累積値を許容値Ｍだけ減少させる中間出力処理を、累積値が許容値Ｍ未満になるまで繰り返し実行し、その後で、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、累積値を初期値０に設定する処理を行うようにしたものである。
【００３４】
(27)  本発明の第２７の態様は、上述した第２５または第２６の態様に係る画像符号化方法において、
ランレングス処理段階で、データ順序列から読み出したもしくは読み飛ばしたデータの総数を計数する処理を行い、計数された総数が処理対象となるブロック画素配列に含まれる画素数ｎに達していた場合には、処理対象となるブロック画素配列に関する処理を完了するようにしたものである。
【００３５】
(28)  本発明の第２８の態様は、上述した第２３〜第２７の態様に係る画像符号化方法において、
ゼロフラグ順序列を構成するｎ個のゼロフラグのそれぞれについて、自己を含めて後続するゼロフラグが、すべて「零状態」を示している場合には「ブロック終了状態」、そうでない場合には「ブロック継続状態」を示すＥＯＢフラグを生成し、生成したｎ個のＥＯＢフラグをゼロフラグ順序列の並び順に応じて並べたＥＯＢフラグ順序列を生成して格納するＥＯＢフラグ順序列生成段階を更に有し、
ランレングス処理段階で、データ順序列の第ｉ番目のデータおよび単位ゼロフラグ群を読み出す際に、ＥＯＢフラグ順序列の第ｉ番目のＥＯＢフラグも併せて読み出し、読み出したＥＯＢフラグが「ブロック終了状態」を示している場合には、当該ＥＯＢフラグを出力して、処理対象となるブロック画素配列に関する以後の処理を中止するようにしたものである。
【発明の効果】
【００３６】
本発明に係る画像符号化処理では、ゼロランレングスの検出を行う前に、予め、量子化データ配列内の各データについて零か否かを示すゼロフラグを作成しておき、このゼロフラグを参照することにより、ゼロランレングスの検出処理のサイクル数を低減するようにしたため、符号化処理全体の高速化を図ることができるようになる。
【００３７】
また、予め、ゼロフラグとともにＥＯＢフラグを作成しておく実施形態では、ゼロランレングスの検出処理において、ＥＯＢフラグを参照することにより処理を途中で中止し、必要なサイクル数を低減することができる。更に、中間出力処理を行う実施形態では、ＪＰＥＧ等の規格に併せた柔軟な対応が可能になり、データカウンタ部を設ける実施形態では、ブロック内のデータに「０」が含まれていないような特殊なケースにも柔軟に対処することが可能になる。
【図面の簡単な説明】
【００３８】
【図１】ＪＰＥＧ形式でカラー画像を圧縮する際に行うブロック単位の処理を示す平面図である。
【図２】図１に示す量子化データ配列Ｑについて、ジグザグにデータ抽出を行って並び替えることにより、データ順序列Ｑ′を生成する手順を示す平面図である。
【図３】具体的な数値をもった量子化データ配列Ｑについて、図２に示す手順を実行することによりデータ順序列Ｑ′を生成し、更に、ランレングス処理データＲを生成した例を示す平面図である。
【図４】本発明の基本的な実施形態に係る画像符号化装置の構成を示すブロック図である。
【図５】図３(a) に示す具体的な量子化データ配列Ｑについて生成されたゼロフラグ配列Ｚを示す平面図である。
【図６】図４に示すゼロフラグ生成部２５を論理和演算回路によって構成した例を示す回路図である。
【図７】図４に示す順序列生成部３０の処理機能を、具体的なデータ配列について説明したブロック図である。
【図８】図４に示すＥＯＢフラグ順序列生成部３３を論理和演算回路によって構成した例の前半部を示す回路図である。
【図９】図４に示すＥＯＢフラグ順序列生成部３３を論理和演算回路によって構成した例の後半部を示す回路図である。
【図１０】図４に示す順序列バッファ部４０およびランレングス処理部５０の詳細構成を示すブロック図である。
【図１１】図１０に示す制御部５１によって実施されるブロック処理の手順を示す流れ図である。
【図１２】図１１の流れ図のステップＳ４におけるシフト量、データカウントアップ量、ゼロカウントアップ量の算出ルールを示す表である。
【図１３】図１０に示す順序列バッファ部４０に格納されているデータ順序列Ｑ′，ゼロフラグ順序列Ｚ′，ＥＯＢフラグ順序列Ｅ′の具体例を示す平面図である。
【図１４】図１０に示すランレングス処理部５０の処理プロセスを示すチャートである。
【図１５】本発明の変形例に係る画像符号化装置の構成を示すブロック図である。
【図１６】図１５に示す変形例における処理動作を示すタイミングチャートである。
【発明を実施するための形態】
【００３９】
以下、本発明を図示する実施形態に基づいて説明する。
【００４０】
＜＜＜  §１．  ＪＰＥＧ方式の符号化手順  ＞＞＞
本発明に係る画像符号化処理の技術は、特定の符号化方式に限定されるものではないが、実用上は、ＪＰＥＧ方式を採用した画像符号化に最適の技術と言える。また、現在、画像データを圧縮する方法としては、ＪＰＥＧ方式を採用した符号化方法が最も一般化した方法になっている。そこで、ここでは、一般的なＪＰＥＧ方式の符号化手順を簡単に説明しておく。
【００４１】
図１は、ＲＧＢ表色系で表現されたカラー原画像を構成する画像データＰに対して、ＪＰＥＧ方式の符号化処理を行う手順の前半段階を示す平面図である。ＲＧＢ表色系で表現されたカラー原画像は、図の上段左に示すように、Ｒ色プレーンＰ（Ｒ）、Ｇ色プレーンＰ（Ｇ）、Ｂ色プレーンＰ（Ｂ）の３枚の原色プレーンから構成されており、個々の原色プレーンは、それぞれ所定の画素値をもった画素の配列によって構成されている。
【００４２】
ＪＰＥＧ方式では、まず、このカラー原画像の表色系をＲＧＢ表色系からＹＣｂＣｒ表色系に変換して、図１の上段右に示すように、輝度プレーンＰ（Ｙ）、Ｃｂ色プレーンＰ（Ｃｂ）、Ｃｒ色プレーンＰ（Ｃｒ）の３枚の原色プレーンから構成される画像データＰ′を生成した上で、これら各原色プレーンをそれぞれブロック分割する前処理が行われる。通常、１つのブロックが８×８の画素配列によって構成されるように分割処理が行われ、ブロック画素配列Ｂが生成される。図１の中段には、輝度プレーンＰ（Ｙ）の左上部分（ハッチング部分）を構成するブロック画素配列Ｂの構成が例示されている。この例の場合、ブロック画素配列Ｂは、８行８列の画素配列によって構成され、個々の画素には、８ビットで表現される２５６段階の画素値が定義されている。
【００４３】
続いて、個々のブロック画素配列Ｂごとに、それぞれＤＣＴ（離散コサイン変換：Discrete Cosine Transform）処理が施され、図１の下段左に示すように、ＤＣＴ係数配列Ｋが得られる。８ビットの画素値をもつブロック画素配列Ｂに対してＤＣＴ処理を施すと、理論的に１１ビットのＤＣＴ係数（１ビットは符号ビット）が得られることになる。したがって、ＤＣＴ係数配列Ｋは、１１ビットの符号付きＤＣＴ係数を８行８列に並べた配列ということになる。
【００４４】
更に、このＤＣＴ係数配列Ｋに対して、所定の量子化テーブルを用いた量子化処理を行い、図１の下段右に示すような量子化データ配列Ｑを得る。具体的には、８行８列からなる量子化テーブルを用意し、ＤＣＴ係数配列Ｋの各配列要素を量子化テーブルの対応する配列要素で除する除算演算を行い、得られた商を量子化データとして配列することにより、量子化データ配列Ｑが得られる。ここで、量子化データ配列Ｑを構成する個々の量子化データは１１ビットの符号付きデータになる。
【００４５】
結局、図１の中段に示すブロック画素配列Ｂが、８ビットの画素値をもった６４個のデータによって構成されていたのに対して、図１の下段右に示す量子化データ配列Ｑは、１１ビットの画素値をもった６４個のデータによって構成されていることになり、この時点でビット数だけに着目すれば、一見したところ、情報量が増えているように見える。しかしながら、実際には、量子化データ配列Ｑを構成する６４個のデータの多くは「０」になるため、後述するゼロランレングスを用いた符号化および可変長ハフマン符号化を行うことにより、全体の情報量を大幅に削減することができる。
【００４６】
すなわち、ＤＣＴ係数配列Ｋ内の各ＤＣＴ係数は、もとのブロック画素配列Ｂの空間周波数成分を示す値になっており、１行１列目（左上隅のセル）の係数がＤＣ成分を表し、他の６３個の係数がＡＣ成分を表している。しかも、左上のセルへゆくほど低周波成分、右下のセルへゆくほど高周波成分の係数が配置されるようになっているため、一般的なデジタル静止画像に対してＤＣＴ処理を施すと、右下付近の高周波成分の係数の大部分は「０」もしくは「０に近い値」になる。このため、更に量子化処理を施して得られる量子化データ配列Ｑの右下付近のデータの大多数は「０」になるので、ゼロランレングスを用いた符号化を行うことにより、全体の情報量を大幅に削減することができる。
【００４７】
ゼロランレングスは、連続して出現する「０」の数を示すものであるので、データ列をゼロランレングスを利用して符号化する場合、なるべく「０」が連続して出現するデータ列を符号化対象とした方が情報量の圧縮効率は高まることになる。このため、ＪＰＥＧ方式では、図１の下段右に示すような量子化データ配列Ｑの構成要素となる６４個の量子化データを、左上隅のセルから右下隅のセルに向けてジグザグに抽出しながら並び替える処理が行われる。
【００４８】
図２は、量子化データ配列Ｑについて、ジグザグにデータ抽出を行って並び替えることにより、データ順序列Ｑ′を生成する手順を示す平面図である。前述したとおり、量子化データ配列Ｑは、ＤＣＴ係数配列Ｋに基づいて得られた配列であるため、図２(a) に示すとおり、左上のセルへゆくほど低周波成分、右下のセルへゆくほど高周波成分のデータが並べられている。このため、元の原画像が一般的なデジタル静止画像の場合、高周波成分の値は小さくなり、右下のセルへゆくほど「０」が増える傾向にある。
【００４９】
そこで、図２(a) に矢印で示すように、１行１列目（左上隅のセル）のデータを起点として、配列の左上隅のセルから右下隅のセルに向けてジグザグに各配列要素を順序づける並び順を定め、量子化データ配列Ｑを構成する各量子化データを、当該並び順に応じて並べ替えるようにすれば、順番が後ろになるほど、「０」が連続して出現する可能性が高まることになる。図２(b) は、上述した並び順を数字で示したものであり、１〜６４の数字が各配列要素の並び順を示している。
【００５０】
ここでは、この図２(b) に示す６４個のセルを、それぞれセル内の数字を用いて呼ぶことにする。たとえば、１行１列目のセルは「セル１」、１行２列目のセルは「セル２」、... 、８行８列目のセルは「セル６４」ということになる。ここで行う並べ替えは、セル１、セル２、セル３、... 、セル６３、セル６４というように、セルの番号順に当該セル内のデータを並べる処理ということになる。図２(c) は、このような並べ替えを行った結果を示しており、各セル内の数字は、図２(b) の各セル内の数字に対応しており、数字１〜６４を、そのまま昇順に並べたものになっている。
【００５１】
図２(b) に示す６４個のセルが、８行８列の二次元配列を構成しているのに対して、図２(c) に示す６４個のセルは、単に、一次元の順序列を構成している。そこで、ここでは、この並べ替え後のデータ群をデータ順序列Ｑ′と呼ぶことにする。なお、図２(c) では、図示の便宜上、データ順序列Ｑ′を構成する６４個のセルを、４行１６列の形式に並べて示しているが、下方に矢印で示すとおり、この６４個のセルは、１〜６４まで連続する一連の順序列であり、二次元配列を構成するものではない。
【００５２】
上述したとおり、図２(b) に示す量子化データ配列Ｑを構成する量子化データの値は、右下のセルへゆくほど「０」である可能性が高くなる。したがって、図２(c) に示すデータ順序列Ｑ′では、後ろになるほど、「０」が連続して出現する可能性が高まることになる。これは、ゼロランレングスを用いた符号化を行う上では都合がよい。
【００５３】
図３は、具体的な数値をもった量子化データ配列Ｑについて、図２に示す手順を実行することによりデータ順序列Ｑ′を生成し、更に、ランレングス処理データＲを生成した例を示す平面図である。図３(a) に示す量子化データ配列Ｑは、８行８列からなる配列に量子化データを収容したものである。前述したとおり、個々の量子化データは、理論的には、符号付きの１１ビットのデータで表現されることになるが、通常は、図示の例のように、比較的「０」に近い数値をとることが多い。これは、量子化テーブル内の値で割り算する量子化処理が行われているためである。また、ＤＣＴ処理が施されているため、右下へゆくほど、「０」の出現確率が高くなっている。
【００５４】
一方、図３(b) に示すデータ順序列Ｑ′は、図３(a) に示す量子化データ配列Ｑを、図２(a) に示すジグザグ順に並び替えたものである。ここでも、図示の便宜上、データ順序列Ｑ′を、４行１６列の形式に並べて示しているが、実際には、６４個のデータによる一連の一次元順序列が構成されていることになる。このデータ順序列Ｑ′を先頭から順に眺めてゆくと、最初のうちは「０」が離散的に出現しているが、徐々に連続した「０」群が増えてゆき、第４８番目のセル以降はすべてが「０」になっている。このように「０」の連続が続くと、ゼロランレングスを用いた符号化をより効率的に行うことができるようになり、データの圧縮効率は向上する。
【００５５】
図３(c) は、図３(b) に示すデータ順序列Ｑ′に対してランレングス処理（「０」の連続をゼロランレングスに置き換えて表現する処理）を行うことによって得られるデータＲの概念図である。ここで、四角で囲った数値は、「０以外」のデータを示しており、（０×ｋ）という形式の括弧書きの記号は「０がｋ個連続するゼロランレングス」を示す記号である。実際には、ゼロランレングスの部分は、所定のフォーマットで記述されることになるが、いずれにしても、「０がｋ個並んでいる」ことを示せればよいので、情報としては、「ゼロランレングス」であることと「ｋ個」であることが表現できれば十分である。このため、ゼロランレングスを利用した符号化を行えば、全体のデータ容量を大幅に低減させる圧縮効果が得られることになる。
【００５６】
ＪＰＥＧ方式の符号化の場合、このようなゼロランレングス処理を行った後、更に、可変長ハフマン処理を施すことにより、最終的なＪＰＥＧ方式の符号化データが生成されることになる。
【００５７】
このＪＰＥＧ方式の符号化処理において、処理速度を向上させる上でのボトルネックとなるのが、ゼロランレングスの検出処理である。たとえば、図３(b) に示すデータ順序列Ｑ′に基づいて、図３(c) に示すようなランレングス処理データＲを生成するためには、データ順序列Ｑ′を構成する個々のデータを先頭から１個ずつ読み出してチェックしてゆき、合計６４個のデータのそれぞれについて、「０」か「０でない」かを判定する必要がある。そのためには、６４サイクル分の処理時間が必要になり、処理の高速化を阻む要因になっていた。
【００５８】
本発明は、このような問題を解決するために案出されたものであり、ゼロランレングスの検出処理がボトルネックになることを解消し、より高速な符号化を実現するための新技術を提案するものである。以下、§２以降において、その内容を詳述する。
【００５９】
＜＜＜  §２．  本発明に係る符号化装置の基本構成  ＞＞＞
図４は、本発明の基本的な実施形態に係る画像符号化装置の構成を示すブロック図である。この装置は、画像データＰとして与えられた二次元画像を符号化して、符号化データＣとして出力する機能を果たす画像符号化装置であり、図示のとおり、前処理部１１、ＤＣＴ処理部１２、量子化部１３、量子化バッファ部２０、ゼロフラグ生成部２５、順序列生成部３０、順序列バッファ部４０、ランレングス処理部５０、ランレングスバッファ部６０、ハフマン符号化部７０によって構成される。実際には、これらの各構成要素は、半導体集積回路によって構成することができる。以下、これら各構成要素の機能を順に説明する。
【００６０】
前処理部１１の基本機能は、符号化の対象となる二次元画像を複数のブロックに分割し、それぞれ所定の画素値をもった合計ｎ個の画素を縦横に並べてなるブロック画素配列Ｂを生成する機能である。モノクロ画像が符号化対象として与えられた場合は、ブロック分割処理を行うだけでよいが、カラー画像が符号化対象となる原画像として与えられた場合は、必要に応じて表色系の変換を行い、個々の原色プレーンごとにブロック分割を行うことになる。
【００６１】
たとえば、図１に示す例では、ＲＧＢ表色系のカラー原画像が画像データＰとして与えられており、これをＹＣｂＣｒ表色系に変換した上で、個々の原色プレーンごとにブロック分割を行い、ブロック画素配列Ｂを得ている。
【００６２】
このような前処理を行う場合には、前処理部１１を、三原色Ｒ，Ｇ，Ｂのそれぞれについての画素値が定義された二次元画素配列からなるカラー原画像を画像データＰとして入力するカラー原画像入力部と、入力したカラー原画像の色空間をＲＧＢ表色系からＹＣｂＣｒ表色系に変換し、Ｙ，Ｃｂ，Ｃｒのそれぞれについて、画素値が定義された二次元画素配列を生成する表色系変換部と、この表色系変換部による変換で得られたＹ，Ｃｂ，Ｃｒの各二次元画素配列を、それぞれ複数のブロックに分割し、Ｉ行Ｊ列に並べられたｎ個（ｎ＝Ｉ×Ｊ）の画素の配列からなるブロック画素配列Ｂを生成するブロック分割部と、によって構成すればよい。図１に示す例は、Ｉ＝８、Ｊ＝８、ｎ＝６４とした例である。
【００６３】
こうして、前処理部１１によって、各原色プレーンについて、それぞれ複数のブロック画素配列Ｂが生成されることになるが、これらのブロック画素配列Ｂは、順次、ＤＣＴ処理部１２に与えられることになる。したがって、ＤＣＴ処理部１２およびこれに後続する各構成要素では、個々のブロック画素配列Ｂを単位処理対象とした処理（以下、ブロック処理と呼ぶことにする）が順次繰り返されることになる。そして、最後にハフマン符号化部７０において、ブロック単位のデータをまとめることにより、与えられた画像データＰに対応する符号化データＣが生成される。
【００６４】
ＤＣＴ処理部１２は、図１の中段から下段左に示すように、前処理部１１から与えられるブロック画素配列Ｂに対して、離散コサイン変換を行い、得られるｎ個のＤＣＴ係数を縦横に並べてなるＤＣＴ係数配列Ｋを生成する処理を行う。ＪＰＥＧ方式で採用されている離散コサイン変換処理を行うと、図２(a) に示すように、配列の左上へゆくほど低周波成分、右下へゆくほど高周波成分が配置されるようにＤＣＴ係数を縦横に並べてなるＤＣＴ係数配列Ｋが生成される。§１で述べたとおり、ブロック画素配列Ｂを構成する個々の画素が８ビットの画素値を有する一般的な例の場合、離散コサイン変換を行うことにより、符号を含めて１１ビットで表現されるＤＣＴ係数が得られることになる。
【００６５】
量子化処理部１３は、ＤＣＴ処理部１２から与えられるＤＣＴ係数配列Ｋに対して、図１の下段に示すとおり量子化処理を行い、得られるｎ個の量子化データを縦横に並べてなる量子化データ配列Ｑを生成する処理を行う。具体的には、量子化処理部１３は、ＤＣＴ係数配列Ｋと同じサイズの配列からなる量子化テーブルを用いて、ＤＣＴ係数配列Ｋの各配列要素を量子化テーブルの対応する配列要素で除する除算演算を行い、得られた商を量子化データとして量子化データ配列Ｑを生成することになる。用いる量子化テーブルの内容は、ＪＰＥＧの規格によって定められているため、ここでは詳しい説明は省略する。§１で述べた例の場合、量子化処理を行うことにより、１１ビットで表現される６４個の量子化データを８行８列に並べた量子化データ配列Ｑが生成される。
【００６６】
量子化バッファ部２０は、こうして生成された量子化データ配列Ｑを格納する機能を果たす構成要素である。この量子化バッファ部２０は、図示のとおり、量子化データ配列Ｑとともに、ゼロフラグ配列Ｚを格納する機能を果たす。ゼロフラグ配列Ｚは、ゼロフラグ生成部２５によって生成された、量子化データ配列Ｑと同じサイズをもった配列であり、ここに示す例の場合、量子化データ配列Ｑと同様に、８行８列の行列によって構成される。ただ、ゼロフラグ配列Ｚは、１ビットのゼロフラグを要素とする配列であるため、この例の場合、全体で６４ビットの情報量をもった配列ということになる。
【００６７】
ゼロフラグは、対応する量子化データが「０」か「０でない」かを示すフラグである。ここでは、「０である」場合を「零状態」、「０でない」場合を「非零状態」と呼ぶことにする。フラグ自身は、０または１のいずれかの論理値をとる１ビットの情報であるので、ここでは、ゼロフラグを、「零状態」には論理値「０」、「非零状態」には論理値「１」を対応させた１ビットで表現することにする。もちろん、「零状態」には論理値「１」、「非零状態」には論理値「０」を対応させることも可能であるが、後述するように、実用上は、「零状態」には論理値「０」、「非零状態」には論理値「１」を対応させるのが好ましい。
【００６８】
ゼロフラグの実体は、図５に示す対応関係を参照すれば容易に理解できよう。図５の左に示す量子化データ配列Ｑは、図３(a) に示す具体的な量子化データ配列Ｑと同じものであり、８行８列の二次元配列に並べられた６４個の量子化データによって構成されており、個々の量子化データは、符号を含めて１１ビットのデータによって構成されている。一方、図５の右に示すゼロフラグ配列Ｚも、８行８列の二次元配列に並べられた６４個のゼロフラグによって構成されているが、各ゼロフラグは１ビットからなるフラグであり、論理値０または１のいずれかを示す役割を果たす。
【００６９】
ここに示す例の場合、上述したとおり、ゼロフラグの論理値が０の場合は、対応データ（配列上の同じ位置にある量子化データ）がゼロであること（零状態）を示し、ゼロフラグの論理値が１の場合は、対応データがゼロでないこと（非零状態）を示している。すなわち、図５左に示す量子化データ配列の各セルの数字が０の場合には、図５右に示すゼロフラグ配列の対応するセルの数値は０になり、図５左に示す量子化データ配列の各セルの数字が０でない場合には、その数値や符号にかかわらず、図５右に示すゼロフラグ配列の対応するセルの数値は１になる。
【００７０】
結局、図４に示すゼロフラグ生成部２５は、量子化データ配列Ｑを構成するｎ個の量子化データのそれぞれについて、「０である」場合には「零状態」、「０でない」場合には「非零状態」を示すゼロフラグを生成し、生成したゼロフラグを量子化データ配列に対応する配列に収容することによりゼロフラグ配列Ｚを生成し、これを量子化バッファ部２０に格納する処理を行うことになる。
【００７１】
なお、実用上は、上述したように、「零状態」を論理値「０」、「非零状態」を論理値「１」で表現する１ビットのゼロフラグを用いるようにするのが好ましい。これは、そのような定義を行えば、ゼロフラグ生成部２５を単純な論理和演算回路によって構成することができるためである。
【００７２】
図６は、ゼロフラグ生成部２５を６４組の「１１入力１出力タイプの論理和演算回路」によって構成した例を示す回路図である。図では、便宜上、１組の論理和演算回路２５−１のみの回路図を示すが、論理和演算回路２５−２，２５−３，... ，２５−６４も全く同様の回路によって構成されている。論理和演算回路２５−１の入力段には、量子化処理部１３から出力される第１番目の量子化データ（量子化データ配列Ｑの第１行第１列目のデータ）を示す１１本のビット信号線が接続され、論理和演算回路２５−１の出力段は、量子化バッファ部２０内のゼロフラグ配列Ｚの第１番目のゼロフラグ（ゼロフラグ配列Ｚの第１行第１列目のフラグ）の格納場所に接続される。
【００７３】
後述するように、ここに示す実施形態の場合、量子化バッファ部２０は、個々のビットを格納するためのフリップフロップによって構成されているため、論理和演算回路２５−１の出力段は、対応するゼロフラグを格納するためのフリップフロップの入力段に接続されることになる。結局、図６に示す６４組の論理和演算回路２５−１〜２５−６４は、図５左に示す量子化データ配列Ｑの各セルに記載されたデータ（符号付きの１１ビットのデータ）を示す１１ビットの論理値について、論理和演算を行い、その結果を各データに対応するゼロフラグとして出力する処理を行うことになる。
【００７４】
たとえば、図５左に示す量子化データ配列Ｑの場合、１行１列目のセルのデータ「−３」が１１ビットのデータとして、図６に示す論理和演算回路２５−１に入力され、その結果として論理和演算回路２５−１から出力される論理値「１」が、図５右に示すゼロフラグ配列Ｚの１行１列目のセルのフラグとして格納されることになる。論理和演算回路２５−１は、入力した１１ビットがすべて論理値「０」であった場合にのみ論理値「０」を出力し、入力した１１ビットの中に１つでも論理値「１」が含まれていた場合は論理値「１」を出力することになるので、量子化データが「０」か、「０でない」かを示すゼロフラグを生成することができる。
【００７５】
このように、１１ビットからなる量子化データの全ビットについての論理和演算を行う論理和演算回路を、個々の量子化データについてのゼロフラグを生成する構成要素として用いるようにすれば、図６に示すように、合計６４組の論理和演算回路２５−１〜２５−６４によってゼロフラグ生成部２５を構成することができ、比較的単純な回路構成でゼロフラグ生成部２５を実現できるようになる。
【００７６】
なお、図５には、説明の便宜上、量子化データ配列Ｑに基づいてゼロフラグ配列Ｚを生成する概念図が示されているが、実用上は、ゼロフラグ生成部２５は、量子化処理部１３の信号出力に基づいてゼロフラグ配列Ｚを生成するようにするのが好ましい。
【００７７】
図４に示すとおり、量子化処理部１３で生成された量子化データは、量子化バッファ部２０内に量子化データ配列Ｑとして格納される。したがって、ゼロフラグ生成部２５は、量子化バッファ部２０内に格納されている量子化データ配列Ｑ内の各量子化データを読み出してゼロフラグを生成することも可能であるが、実用上は、図示のとおり、量子化処理部１３から量子化バッファ部２０への信号線を分岐させてゼロフラグ生成部２５（論理和演算回路２５−１〜２５−６４）に与え、生成したゼロフラグを量子化バッファ部２０に格納する処理を行うようにすればよい。そうすれば、量子化バッファ部２０内に量子化データ配列Ｑを格納するのとほぼ同じタイミングで（厳密には、論理和演算回路による論理和演算処理サイクルだけ遅れて）、ゼロフラグ配列Ｚを格納することができ、処理の高速化を図ることができる。
【００７８】
ここに示す実施形態の場合、量子化バッファ部２０は、フリップフロップによって構成されており、量子化データ配列Ｑ内の各量子化データを構成する個々のビットや、ゼロフラグ配列Ｚ内の各ゼロフラグを示す個々のビットは、いずれもフリップフロップによる二値情報として記録されることになる。したがって、量子化処理部１３からの各ビット線やゼロフラグ生成部２５からの各ビット線は、これらフリップフロップの入力段に接続されることになる。同様に、量子化バッファ部２０から量子化データやゼロフラグを読み出す場合は、各フリップフロップの出力段から二値情報が読み出されることになる。
【００７９】
このように、量子化バッファ部２０をメモリではなく、フリップフロップによって構成しておけば、メモリに対するアドレス指定などは不要になり、各フリップフロップの入出力段に適切な配線を施しておけば足りるので、回路構成の単純化を図るとともに、処理の高速化を図ることができる。
【００８０】
一方、順序列生成部３０の役割は、こうして量子化バッファ部２０内に格納された量子化データ配列Ｑおよびゼロフラグ配列Ｚについて並べ替えを行い、その結果を、順序列バッファ部４０にデータ順序列Ｑ′およびゼロフラグ順序列Ｚ′として格納することと、ゼロフラグ配列Ｚに基づいて、ＥＯＢフラグ順序列Ｅ′を生成し、これを順序列バッファ部４０に格納することである。そのため、順序列生成部３０には、図４に示されているとおり、データ順序列生成部３１、ゼロフラグ順序列生成部３２、ＥＯＢフラグ順序列生成部３３が設けられている。
【００８１】
データ順序列生成部３１は、量子化バッファ部２０内に格納されている量子化データ配列Ｑについて、空間周波数分布に応じた所定の並び順を定め、ｎ個のデータを当該並び順に応じて並べたデータ順序列Ｑ′を生成する機能を果たす。ここで述べる実施形態の場合、量子化データ配列Ｑ内には、６４個の量子化データ（ｎ＝６４）が格納されており、データ順序列生成部３１は、図２(a) に矢印で示すように、配列の左上隅から右下隅に向けてジグザグに各配列要素を順序づける並び順を定め、量子化データ配列Ｑを構成する各量子化データを、この並び順に応じて並べ替えることによりデータ順序列Ｑ′を生成し、これを順序列バッファ部４０に格納する処理を行う。量子化データ配列Ｑに基づいてデータ順序列Ｑ′を生成する具体例は、図３(a) ，(b) に例示したとおりである。
【００８２】
ゼロフラグ順序列生成部３２も同様に、量子化バッファ部２０内に格納されているゼロフラグ配列Ｚに基づいて、ｎ個のゼロフラグを上記並び順（この実施形態の場合、６４個のゼロフラグについて、図２(a) に矢印で示すジグザグの並び順）に応じて並べたゼロフラグ順序列Ｚ′を生成し、これを順序列バッファ部４０に格納する処理を行う。
【００８３】
一方、ＥＯＢフラグ順序列生成部３３は、量子化バッファ部２０内に格納されているゼロフラグ配列Ｚに基づいて、ＥＯＢフラグ順序列Ｅ′を生成し、これを順序列バッファ部４０に格納する処理を行う。ここで、「ＥＯＢ」とは、「End of Block」の頭文字をとったものであり、ＥＯＢフラグは、ブロック処理を継続して行うべきであることを示す「ブロック継続状態」か、ブロック処理を終了してよい「ブロック終了状態」か、のいずれかを示すフラグとして機能する。
【００８４】
具体的には、ＥＯＢフラグ順序列生成部３３は、ゼロフラグ順序列Ｚ′を構成するｎ個のゼロフラグのそれぞれについて、自己を含めて後続するゼロフラグが、すべて「零状態」を示している場合には「ブロック終了状態」、そうでない場合には「ブロック継続状態」を示すＥＯＢフラグを生成し、生成したｎ個のＥＯＢフラグをゼロフラグ順序列Ｚ′の並び順に応じて並べたＥＯＢフラグ順序列Ｅ′を生成する機能を有している。「ブロック終了状態」であれば、以後のゼロフラグがすべて「零状態」を示していることになり、以後の量子化データがすべて「０」であることを示していることになる。
【００８５】
したがって、「ブロック終了状態」であれば、その時点で、以後に後続するデータ「０」をゼロランレングスとして出力し、ブロック処理を終了してよいことになる。このように、ＥＯＢフラグは、「ブロック終了状態」か否かを示すフラグであるため、本来は、「ブロック終了状態」には論理値「１」、「ブロック継続状態」には論理値「０」を対応させるべきであるが、ここに示す実施形態の場合、ＥＯＢフラグ順序列生成部３３は、ＥＯＢフラグを、「ブロック終了状態」には論理値「０」、「ブロック継続状態」には論理値「１」を対応させた１ビットで表現している。その理由については後述する。
【００８６】
かくして、順序列生成部３０を構成するデータ順序列生成部３１からはデータ順序列Ｑ′が出力され、ゼロフラグ順序列生成部３２からはゼロフラグ順序列Ｚ′が出力され、ＥＯＢフラグ順序列生成部３３からはＥＯＢフラグ順序列Ｅ′が出力されることになる。順序列バッファ部４０は、こうして出力されたデータ順序列Ｑ′と、ゼロフラグ順序列Ｚ′と、ＥＯＢフラグ順序列Ｅ′と、を格納する機能を有する。
【００８７】
図７は、図４に示す順序列生成部３０の処理機能を、具体的なデータ配列について説明したブロック図である。図の上段に示す量子化バッファ部２０に格納されている量子化データ配列Ｑおよびゼロフラグ配列Ｚは、図５に例示したものと同じものである。順序列生成部３０は、これら量子化データ配列Ｑおよびゼロフラグ配列Ｚに基づいて、データ順序列Ｑ′、ゼロフラグ順序列Ｚ′、ＥＯＢフラグ順序列Ｅ′を生成し、順序列バッファ部４０に格納する処理を行う。なお、順序列バッファ部４０に格納されている各順序列Ｑ′，Ｚ′，Ｅ′は、データやフラグを所定の並び順で並べた一次元の順序列であり、二次元配列ではないが、ここでは図示の便宜上、４行１６列の形式に並べて示すことにする。
【００８８】
データ順序列生成部３１は、量子化バッファ部２０に格納されている量子化データ配列Ｑ内の６４個のデータを、図２(a) に矢印で示す並び順で並び替えることにより、データ順序列Ｑ′を生成し、これを順序列バッファ部４０に格納する処理を行う。データ順序列Ｑ′は、それぞれが１１ビットからなるデータを６４個、所定の並び順で並べたものである。
【００８９】
ゼロフラグ順序列生成部３２は、量子化バッファ部２０に格納されているゼロフラグ配列Ｚ内の６４個のフラグを、図２(a) に矢印で示す並び順で並び替えることにより、ゼロフラグ順序列Ｚ′を生成し、これを順序列バッファ部４０に格納する処理を行う。ゼロフラグ順序列Ｚ′は、それぞれが１ビットからなるフラグを６４個、所定の並び順で並べたものである。
【００９０】
ＥＯＢフラグ順序列生成部３３は、ゼロフラグ順序列Ｚ′を構成する６４個のゼロフラグのそれぞれについて、自己を含めて後続するゼロフラグが、すべて「零状態」を示している場合には「ブロック終了状態」、そうでない場合には「ブロック継続状態」を示すＥＯＢフラグを生成し、生成した６４個のＥＯＢフラグをゼロフラグ順序列Ｚ′の並び順に応じて並べたＥＯＢフラグ順序列Ｅ′を生成し、これを順序列バッファ部４０に格納する処理を行う。ＥＯＢフラグ順序列Ｅ′は、それぞれが１ビットからなるフラグを６４個、所定の並び順で並べたものである。
【００９１】
前述したように、ここに示す実施形態の場合、「ブロック終了状態」を示すＥＯＢフラグには論理値「０」、「ブロック継続状態」を示すＥＯＢフラグには論理値「１」を対応させている。したがって、図７の最下段に示すＥＯＢフラグ順序列Ｅ′の場合、全６４個のＥＯＢフラグのうち、第１番目〜第４７番目のＥＯＢフラグは論理値「１」（ブロック継続状態）を示しており、第４８番目〜第６４番目のＥＯＢフラグ（図ではセルの枠を太線で囲って示してある）は論理値「０」（ブロック終了状態）を示している。
【００９２】
このＥＯＢフラグ順序列Ｅ′は、その上に示されているゼロフラグ順序列Ｚ′に対応するものである。すなわち、ＥＯＢフラグ順序列Ｅ′内の第ｉ番目のＥＯＢフラグは、ゼロフラグ順序列Ｚ′内の第ｉ番目およびこれに後続する第（ｉ＋１）番目，第（ｉ＋２）番目，... ，第６４番目のゼロフラグがすべてが「０」である場合には論理値「０」（ブロック終了状態）を示し、そうでない場合には論理値「１」（ブロック継続状態）を示している。
【００９３】
実際、ゼロフラグ順序列Ｚ′を構成する各ゼロフラグを第１番目から第６４番目に向かって１つずつ順番に着目してゆくと、第４８番目のゼロフラグ（図ではセルの枠を太線で囲って示してある）に着目した時点で初めて「自己を含めて後続するゼロフラグが、すべて『０』を示している」という条件が満足されることになる。したがって、ＥＯＢフラグ順序列Ｅ′では、第１番目〜第４７番目までのＥＯＢフラグは「１」、第４８番目〜第６４番目のＥＯＢフラグは「０」になっている。
【００９４】
このように、ＥＯＢフラグ順序列Ｅ′は、ゼロフラグ順序列Ｚ′に対応しており、第ｉ番目のＥＯＢフラグの値を決定するには、ゼロフラグ順序列Ｚ′の第ｉ番目以降のすべてのゼロフラグの値を参照して、上記条件が満足されているか否かを判定する必要がある。したがって、ＥＯＢフラグ順序列生成部３３は、原理的には、順序列バッファ部４０内に格納されているゼロフラグ順序列Ｚ′から、判定に必要なゼロフラグを読み出して、上記条件が満足されているか否かを判定し、その結果に基づいてＥＯＢフラグの値を決定すればよい。
【００９５】
しかしながら、実用上、ＥＯＢフラグ順序列生成部３３は、順序列バッファ部４０内に格納されているゼロフラグ順序列Ｚ′を参照してＥＯＢフラグ順序列Ｅ′を生成する代わりに、図７に示すように、量子化バッファ部２０内に格納されているゼロフラグ配列Ｚを参照してＥＯＢフラグ順序列Ｅ′を生成し、これを順序列バッファ部４０内に格納する処理を行うようにするのが好ましい。そうすれば、順序列バッファ部４０内にゼロフラグ順序列Ｚ′を格納するのとほぼ同じタイミングで（厳密には、後述するように、論理和回路の演算時間だけ遅延した程度のタイミングで）、ＥＯＢフラグ順序列Ｅ′を格納することができ、処理の高速化を図ることができる。このような方法でＥＯＢフラグ順序列Ｅ′を生成する機能をもったＥＯＢフラグ順序列生成部３３の具体的構成例は後述する。
【００９６】
ここに示す実施形態の場合、順序列バッファ部４０も、フリップフロップによって構成されており、データ順序列Ｑ′内の各データを構成する個々のビット、ゼロフラグ順序列Ｚ′内の各ゼロフラグを示す個々のビット、ＥＯＢフラグ順序列Ｅ′内の各ＥＯＢフラグを示す個々のビットは、いずれもフリップフロップによる二値情報として記録される。したがって、順序列生成部３０からデータやフラグを出力するための各ビット線は、これらフリップフロップの入力段に接続されることになる。同様に、順序列バッファ部４０からデータやフラグを読み出す場合は、各フリップフロップの出力段から二値情報が読み出されることになる。
【００９７】
このように、順序列バッファ部４０をメモリではなく、フリップフロップによって構成しておけば、メモリに対するアドレス指定などは不要になり、各フリップフロップの入出力段に適切な配線を施しておけば足りるので、回路構成の単純化を図るとともに、処理の高速化を図ることができる。
【００９８】
ここに示す実施形態の場合、量子化バッファ部２０と順序列バッファ部４０との双方がフリップフロップによって構成されている。すなわち、量子化バッファ部２０は、量子化データ配列Ｑ内の個々の量子化データを示す各ビットを格納するためのフリップフロップと、ゼロフラグ配列Ｚ内の個々のゼロフラグを示すビットを格納するためのフリップフロップとを有している。一方、順序列バッファ部４０は、データ順序列Ｑ′内の個々のデータを示す各ビットを格納するためのフリップフロップと、ゼロフラグ順序列Ｚ′内の個々のゼロフラグを示すビットを格納するためのフリップフロップと、ＥＯＢフラグ順序列Ｅ′内の個々のＥＯＢフラグを示すビットを格納するためのフリップフロップとを有している。このように量子化バッファ部２０と順序列バッファ部４０との双方をフリップフロップによって構成しておけば、これらの間に設けられた順序列生成部３０の回路構成を単純化し、処理の高速化を図るメリットも得られるようになる。以下、この点を順に説明しよう。
【００９９】
まず、データ順序列生成部３１は、量子化バッファ部２０内の量子化データ配列Ｑを格納するためのフリップフロップの出力段と順序列バッファ部４０内のデータ順序列Ｑ′を格納するためのフリップフロップの入力段とを接続する信号線によって構成することができる。データ順序列Ｑ′は、量子化データ配列Ｑ内の量子化データを、図２(a) の矢印に示す並び順で並べ替えたものであるので、量子化データ配列Ｑを格納するための１１ビット×６４組のフリップフロップの出力段と、データ順序列Ｑ′を格納するための１１ビット×６４組のフリップフロップの入力段とを接続する単なる信号線（配線）によって、データ順序列生成部３１を構成することができる。
【０１００】
もちろん、個々の信号線は、量子化データ配列Ｑを構成する６４個のデータを上記並び順に応じて並べ替えることができるように、量子化バッファ部２０内で特定のデータが格納されたフリップフロップと順序列バッファ部４０内で当該特定のデータを格納すべきフリップフロップとを接続する配線を構成する必要がある。たとえば、量子化データ配列Ｑの第２行第３列目のデータ「−４」を格納するための１１ビット分のフリップフロップの出力段は、データ順序列Ｑ′の第８番目のデータを格納すべき１１ビット分のフリップフロップの入力段に接続されるような配線が行われる。
【０１０１】
ゼロフラグ順序列生成部３２も、同様に、量子化バッファ部２０内のゼロフラグ配列Ｚを格納するためのフリップフロップの出力段と順序列バッファ部４０内のゼロフラグ順序列Ｚ′を格納するためのフリップフロップの入力段とを接続する信号線によって構成することができる。ゼロフラグ順序列Ｚ′は、ゼロフラグ配列Ｚ内のゼロフラグを、図２(a) の矢印に示す並び順で並べ替えたものであるので、ゼロフラグ配列Ｚを格納するための６４組のフリップフロップの出力段と、ゼロフラグ順序列Ｚ′を格納するための６４組のフリップフロップの入力段とを接続する単なる信号線（配線）によって、ゼロフラグ順序列生成部３２を構成することができる。
【０１０２】
もちろん、個々の信号線は、ゼロフラグ配列Ｚを構成する６４個のフラグを上記並び順に応じて並べ替えることができるように、量子化バッファ部２０内で特定のフラグが格納されたフリップフロップと順序列バッファ部４０内で当該特定のフラグを格納すべきフリップフロップとを接続する配線を構成する必要がある。たとえば、ゼロフラグ配列Ｚの第２行第３列目のフラグを格納するためのフリップフロップの出力段は、ゼロフラグ順序列Ｚ′の第８番目のデータを格納すべきフリップフロップの入力段に接続されるような配線が行われる。
【０１０３】
一方、ＥＯＢフラグ順序列生成部３３は、単なる信号線（配線）だけで構成することはできないので、若干の工夫が必要である。具体的には、ＥＯＢフラグ順序列生成部３３は、量子化バッファ部２０内のゼロフラグ配列Ｚを格納するためのフリップフロップの出力段と順序列バッファ部４０内のＥＯＢフラグ順序列Ｅ′を格納するためのフリップフロップの入力段とを接続する複数組の信号線と、これら信号線上に設けられた合計（ｎ−１）個（この例の場合、ｎ＝６４）の論理和演算回路と、によって構成することができる。
【０１０４】
図８および図９に、６３組の論理和演算回路３３−１〜３３−６３と、１組の信号線３３−６４と、によってＥＯＢフラグ順序列生成部３３を構成した具体的な回路図を示す。
【０１０５】
まず、図８の上段に示されている第１番目の論理和演算回路３３−１は、「６４入力１出力タイプの論理和演算回路」であり、量子化バッファ部２０に格納されているゼロフラグ配列Ｚを構成する第１番目〜第６４番目の並び順（図２(b) の各セル内に記載された並び順に基づく順番、以下同様）のゼロフラグを示す６４本の信号線（６４個のフリップフロップの出力段に接続された信号線）を入力とし、入力した６４ビットの論理値についての論理和を、１本の信号線から１ビットの出力として出力する回路である。当該１ビットの出力は、順序列バッファ部４０に格納されるべきＥＯＢフラグ順序列Ｅ′の第１番目のＥＯＢフラグ格納用のフリップフロップの入力段に与えられる。
【０１０６】
また、図８の２段目に示されている第２番目の論理和演算回路３３−２は、「６３入力１出力タイプの論理和演算回路」であり、量子化バッファ部２０に格納されているゼロフラグ配列Ｚを構成する第２番目〜第６４番目の並び順のゼロフラグを示す６３本の信号線（６３個のフリップフロップの出力段に接続された信号線）を入力とし、入力した６３ビットの論理値についての論理和を、１本の信号線から１ビットの出力として出力する回路である。当該１ビットの出力は、順序列バッファ部４０に格納されるべきＥＯＢフラグ順序列Ｅ′の第２番目のＥＯＢフラグ格納用のフリップフロップの入力段に与えられる。
【０１０７】
更に、図８の３段目に示されている第３番目の論理和演算回路３３−３は、「６２入力１出力タイプの論理和演算回路」であり、量子化バッファ部２０に格納されているゼロフラグ配列Ｚを構成する第３番目〜第６４番目の並び順のゼロフラグを示す６２本の信号線（６２個のフリップフロップの出力段に接続された信号線）を入力とし、入力した６２ビットの論理値についての論理和を、１本の信号線から１ビットの出力として出力する回路である。当該１ビットの出力は、順序列バッファ部４０に格納されるべきＥＯＢフラグ順序列Ｅ′の第３番目のＥＯＢフラグ格納用のフリップフロップの入力段に与えられる。
【０１０８】
以下、同様にして、たとえば、図９に示されている第６２番目の論理和演算回路３３−６２は、「３入力１出力タイプの論理和演算回路」であり、量子化バッファ部２０に格納されているゼロフラグ配列Ｚを構成する第６２番目〜第６４番目の並び順のゼロフラグを示す３本の信号線（３個のフリップフロップの出力段に接続された信号線）を入力とし、入力した３ビットの論理値についての論理和を、１本の信号線から１ビットの出力として出力する回路である。当該１ビットの出力は、順序列バッファ部４０に格納されるべきＥＯＢフラグ順序列Ｅ′の第６２番目のＥＯＢフラグ格納用のフリップフロップの入力段に与えられる。
【０１０９】
また、図９に示されている第６３番目の論理和演算回路３３−６３は、「２入力１出力タイプの論理和演算回路」であり、量子化バッファ部２０に格納されているゼロフラグ配列Ｚを構成する第６３番目および第６４番目の並び順のゼロフラグを示す２本の信号線（２個のフリップフロップの出力段に接続された信号線）を入力とし、入力した２ビットの論理値についての論理和を、１本の信号線から１ビットの出力として出力する回路である。当該１ビットの出力は、順序列バッファ部４０に格納されるべきＥＯＢフラグ順序列Ｅ′の第６３番目のＥＯＢフラグ格納用のフリップフロップの入力段に与えられる。
【０１１０】
以上、６３組の論理和演算回路３３−１〜３３−６３についての説明を行ったが、図９の最下段に示す第６４番目の回路３３−６４は、論理和演算回路ではなく、単なる信号線である。この信号線は、量子化バッファ部２０に格納されているゼロフラグ配列Ｚを構成する第６４番目の並び順のゼロフラグを示す１本の信号線（１個のフリップフロップの出力段に接続された信号線）を順序列バッファ部４０に格納されるべきＥＯＢフラグ順序列Ｅ′の第６４番目のＥＯＢフラグ格納用のフリップフロップの入力段に接続する役割を果たす。
【０１１１】
結局、ブロック画素配列の画素数をｎとすれば（ここに示す実施形態の場合は、ｎ＝６４）、ＥＯＢフラグ順序列生成部３３は、合計（ｎ−１）組の論理和演算回路３３−１〜３３−（ｎ−１）と、１組の信号線３３−ｎと、によって構成することができる。
【０１１２】
ここで、（ｎ−１）組の論理和演算回路３３−１〜３３−（ｎ−１）のうち、第ｉ番目（ｉ＝１〜ｎ−１）の論理和演算回路を３３−ｉと呼べば、この論理和演算回路を３３−ｉは、図９の上段に示すように、量子化バッファ部２０内で第ｉ番目〜第ｎ番目の並び順に対応するゼロフラグを格納している合計（ｎ−ｉ＋１）個のフリップフロップの各出力段に接続された（ｎ−ｉ＋１）本の信号線を入力とし、順序列バッファ部４０内で第ｉ番目（ｉ＝１〜ｎ−１）の並び順に対応するＥＯＢフラグを格納すべきフリップフロップの入力段に接続される１本の信号線を出力とする「（ｎ−ｉ＋１）入力１出力論理和演算回路」ということになる。
【０１１３】
また、１組の信号線３３−ｎは、量子化バッファ部２０内で第ｎ番目の並び順に対応するゼロフラグを格納しているフリップフロップの出力段と、量子化バッファ部２０内で第ｎ番目の並び順に対応するＥＯＢフラグを格納すべきフリップフロップの入力段と、を接続する信号線ということになる。
【０１１４】
このように、図４に示す符号化装置において、量子化バッファ部２０および順序列バッファ部４０を必要な数のフリップフロップによって構成しておけば、順序列生成部３０内のデータ順序列生成部３１、ゼロフラグ順序列生成部３２、ＥＯＢフラグ順序列生成部３３は、これらフリップフロップ間を接続する信号線（単なる配線）、もしくは当該信号線とその上に設けられた論理和演算回路との組合わせによって構成することができるので、比較的単純な回路構成で実現することができ、しかも処理速度の向上を図ることができるようになる。
【０１１５】
こうして、順序列バッファ部４０内に、データ順序列Ｑ′、ゼロフラグ順序列Ｚ′、ＥＯＢフラグ順序列Ｅ′が格納されたら、ランレングス処理部５０によるランレングス処理が行われる。このランレングス処理は、たとえば、図３(b) に示すデータ順序列Ｑ′に対して、「０」の連続をゼロランレングスに置き換えて表現する処理であり、その結果、図３(c) に示すようなランレングス処理データＲが得られることになる。ここで、（０×ｋ）という形式の括弧書きの記号は、「０がｋ個連続するゼロランレングス」を示す記号である。ランレングス処理部５０で行われる具体的なランレングス処理の内容については、§３で詳述する。
【０１１６】
図４に示す実施形態では、ランレングス処理部５０の後段にランレングスバッファ部６０が設けられており、ランレングス処理部５０からの出力は、このランレングスバッファ部６０に一時的に格納される。そして、このランレングスバッファ部６０の更に後段には、ハフマン符号化部７０が設けられている。ハフマン符号化部７０は、ランレングスバッファ部６０に格納されている情報に対して、可変長ハフマン符号化処理を行う。このハフマン符号化処理自体は、公知の技術であるため、ここでは詳しい説明は省略する。
【０１１７】
以上、前処理部１１で用意された１組のブロック画素配列Ｂについての符号化を行うブロック処理の手順を述べたが、実際には、前処理部１１で用意された複数のブロック画素配列Ｂについて、同様のブロック処理が繰り返し実行されることになる。ハフマン符号化部７０からは、こうして個々のブロック画素配列Ｂについて得られたハフマン符号を連結することにより、最終的な符号化データＣが出力されることになる。こうして出力される符号化データＣは、元の画像データＰをＪＰＥＧ方式で圧縮した圧縮画像データということになる。
【０１１８】
＜＜＜  §３．  本発明に係るランレングス処理  ＞＞＞
§２では、図４に示す基本的な実施形態に係る画像符号化装置の全体構成および順序列生成部３０の具体的な構成例を述べ、順序列バッファ部４０内に、データ順序列Ｑ′、ゼロフラグ順序列Ｚ′、ＥＯＢフラグ順序列Ｅ′が格納されることを説明した。ここでは、これら各順序列に基づいて、ランレングス処理部５０において実行されるランレングス処理の内容を説明する。
【０１１９】
順序列バッファ部４０内に格納されるデータ順序列Ｑ′、ゼロフラグ順序列Ｚ′、ＥＯＢフラグ順序列Ｅ′は、たとえば、図７の下段に示すような情報になる。すなわち、この例の場合、データ順序列Ｑ′は、１１ビットで表現される符号付きのデータを６４個並べたものであり、ゼロフラグ順序列Ｚ′は、１ビットのゼロフラグを６４個並べたものであり、ＥＯＢフラグ順序列Ｅ′は、１ビットのＥＯＢフラグを６４個並べたものである。
【０１２０】
一方、ランレングス処理部５０が行うランレングス処理は、データ順序列Ｑ′を構成する６４個のデータを、「０」の連続部分をゼロランレングスに置き換えて表現する処理ということができる。別言すれば、データ順序列Ｑ′を構成する６４個のデータを、図３(c) に示すようなランレングス処理データＲの形式で表現することにより、全体のデータ容量を低減させる処理ということになる。したがって、原理的には、順序列バッファ部４０内にデータ順序列Ｑ′さえ用意できていれば、ランレングス処理を実行することができる。すなわち、図３(b) に示すデータ順序列Ｑ′が与えられれば、先頭から順番に個々のデータをチェックしてゆき、「０」が出現したときに、連続する「０」の数をカウントしてゼロランレングスに置き換える操作を行えばよい。
【０１２１】
しかしながら、データ順序列Ｑ′を構成する個々のデータを先頭から１個ずつ読み出してチェックしてゆくと、図示の例のようにｎ＝６４の場合、６４サイクル分の処理時間が必要になり、処理の高速化を阻む要因になる。順序列バッファ部４０に用意されたゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′は、このようなランレングス処理を高速化する役割を果たすことになる。
【０１２２】
別言すれば、本発明の特徴は、予め、ゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′を用意しておき、ランレングス処理部５０がランレングス処理を実行する際には、これらゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′を利用することにより、データ順序列Ｑ′に対して効率的なランレングス処理を施す点にある。
【０１２３】
もちろん、本発明では、ランレングス処理を実行する前に、ゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′を用意しておく必要があるので、そのための準備時間が余分に必要になる。しかしながら、実際には、§２で述べたとおり、ゼロフラグ生成部２５、ゼロフラグ順序列生成部３２、ＥＯＢフラグ順序列生成部３３は、単なる配線や単純な論理和回路によって構成することができるため、順序列バッファ部４０内にデータ順序列Ｑ′を用意するのとほぼ同時に（論理和回路の演算時間だけ遅延した程度のタイミングで）、順序列バッファ部４０内に、ゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′を用意することができる。
【０１２４】
したがって、本発明の採用により、ゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′を用意するための準備時間が余分にかかったとしても、符号化処理に必要なトータルの時間を比較すれば、本発明により、処理時間を短縮する効果が得られることになる。以下、ゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′を利用したランレングス処理のメリットを説明する。
【０１２５】
まず、ゼロフラグ順序列Ｚ′を利用する効用を説明しよう。前述したとおり、ゼロフラグは、対応するデータが「０（零状態）」か、「０でない（非零状態）」かを示すフラグであり、ここで述べる実施形態の場合、零状態の場合はゼロフラグを論理値「０」とし、「非零状態」の場合はゼロフラグを論理値「１」としている。このようなゼロフラグの集合からなるゼロフラグ順序列Ｚ′を予め用意しておき、データ順序列Ｑ′と共に順序列バッファ部４０内に格納しておけば、ランレングス処理部５０は、データ順序列Ｑ′から１個のデータを読み出しながら、ゼロフラグ順序列Ｚ′からは先行して複数ｍ個のゼロフラグを読み出すことが可能になる。ここでは、同時に読み出される複数ｍ個のゼロフラグを「単位ゼロフラグ群」と呼ぶことにする。
【０１２６】
たとえば、ランレングス処理部５０が、データ順序列Ｑ′内の第ｉ番目のデータを読み出すとともに、ゼロフラグ順序列Ｚ′内の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグを単位ゼロフラグ群として読み出した場合を考えてみよう。この場合、もし、読み出した単位ゼロフラグ群の先頭のゼロフラグ（すなわち、ゼロフラグ順序列Ｚ′内の第ｉ番目のゼロフラグ）が論理値「０」であれば、当然、読み出した第ｉ番目のデータは「０」ということになる。そして、もし読み出した単位ゼロフラグ群の第２番目のゼロフラグ（すなわち、ゼロフラグ順序列Ｚ′内の第（ｉ＋１）番目のゼロフラグ）も論理値「０」であったとすれば、まだ読み出されていない第（ｉ＋１）番目のデータも「０」であることが認識できる。同様に、もし読み出した単位ゼロフラグ群の第３番目のゼロフラグ（すなわち、ゼロフラグ順序列Ｚ′内の第（ｉ＋２）番目のゼロフラグ）も論理値「０」であったとすれば、まだ読み出されていない第（ｉ＋２）番目のデータも「０」であることが認識できる。
【０１２７】
このように、データについては、第ｉ番目のデータを１個だけ読み出すようにしつつ、ゼロフラグについては、第ｉ番目のゼロフラグを先頭として複数ｍ個分のゼロフラグを単位ゼロフラグ群として読み出すようにすれば、まだ読み出していない第（ｉ＋１）番目以降のデータが「０か否か」を先行して認識することができる。たとえば、読み出した単位ゼロフラグ群が「００００１０... 」であったとすると、現在読み出されている第ｉ番目のデータを含めて、合計４個の連続したデータが「０」であることを先行して認識することができるので、その時点で、「０」が４個連続することを示すゼロランレングスを生成することができる。
【０１２８】
しかも、こうして先行してランレングスの生成ができれば、まだ読み出されていないデータ「０」については、実際には読出処理をスキップして読み飛ばしてしまうことができる。たとえば、上例のように、読み出した単位ゼロフラグ群が「００００１０... 」であった場合は、現在読み出されている第ｉ番目のデータを含めて、合計４個の連続したデータが「０」であることが認識できる。すなわち、まだ読み出されていない第（ｉ＋１）番目のデータ、第（ｉ＋２）番目のデータ、第（ｉ＋３）番目のデータは、いずれも「０」であることが認識できるので、これら３個のデータについては読み飛ばしを行い、次は、第（ｉ＋４）番目のデータを読み出せばよい。
【０１２９】
要するに、ランレングス処理部５０は、順序列バッファ部４０から、データ順序列Ｑ′の第ｉ番目のデータと、ゼロフラグ順序列Ｚ′の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグからなる単位ゼロフラグ群と、を読み出す読出処理を、パラメータｉを１から所定ステップ数ずつ順次増加させながら繰り返し実行し、読み出した単位ゼロフラグ群を参照することによりデータ順序列Ｑ′内において０が連続して出現する数を示すゼロランレングス値をカウントし、読み出したデータ順序列Ｑ′内のデータおよびカウントしたゼロランレングス値を出力する処理を行うようにすればよい。
【０１３０】
こうして、データ順序列Ｑ′内のデータ「０」をゼロランレングスとしてカウントしてゼロランレングス値の形式で出力し、データ順序列Ｑ′内の「０」以外のデータをデータの形式で出力すれば、ランレングス処理部５０から出力される情報は、図３(c) に示すようなランレングス処理データＲの形式になる。しかも、カウントしたゼロランレングス値に応じた数だけデータを読み飛ばすことができるように、パラメータｉを増加させるステップ数を設定すれば、ゼロランレングスとして先行してカウントされたデータ「０」については読出処理がスキップされ、読出処理に必要なサイクルを省略することができる。
【０１３１】
なお、データについては、データ順序列Ｑ′から１個ずつ読み出すのに対して、ゼロフラグについては、ゼロフラグ順序列Ｚ′からｍ個分のゼロフラグを単位ゼロフラグ群としてまとめて読み出すことになるので、読出対象がゼロフラグ順序列Ｚ′の末尾に近づいてくると、ゼロフラグが枯渇して、ｍ個分のゼロフラグを読み出すことができなくなる。
【０１３２】
具体的には、ゼロフラグ順序列Ｚ′に収容されているゼロフラグの総数がｎである場合、ｉ＝ｎ−ｍ＋１の場合は、ゼロフラグ順序列Ｚ′の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグからなる単位ゼロフラグ群を読み出すことができるが、ｉ＝ｎ−ｍ＋２の場合は、（ｍ−１）個のゼロフラグしか残っていないので、ｍ個のゼロフラグを読み出すことはできない。このようにゼロフラグ順序列Ｚ′内のゼロフラグが枯渇してしまう場合は、すなわち、ｉ＞ｎ−ｍ＋１の場合は、合計ｍ個のゼロフラグではなく、第ｉ番目〜第ｎ番目までのゼロフラグを単位ゼロフラグ群として読み出すようにすればよい。
【０１３３】
もっとも、実用上は、枯渇したゼロフラグの部分にダミーフラグを補填することにより、常に、ｍ個のフラグを単位ゼロフラグ群として読み出すことが可能になる。このような取り扱いを行う方法についての詳細は、§４で述べる。
【０１３４】
続いて、ランレングス処理部５０が行うゼロランレングス値のカウント処理およびパラメータｉの更新処理をもう少し詳しく説明しよう。前述したとおり、ランレングス処理部５０は、１回の読出処理において、データ順序列Ｑ′から第ｉ番目のデータを１個読み出すとともに、ゼロフラグ順序列Ｚ′の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグ（但し、ｉ＞ｎ−ｍ＋１の場合は、第ｉ番目〜第ｎ番目までのゼロフラグ）からなる単位ゼロフラグ群を読み出すことになる。
【０１３５】
ランレングス処理部５０は、こうして読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグ（ここに示す実施形態の場合は論理値「０」のフラグ）の連続数を求める連続数算出処理を行う。ここでいう「連続数」とは、あくまでも「先頭から現れる『零状態』のフラグが連続する数」である。たとえば、単位ゼロフラグ群が「００００１０００」であった場合、先頭から連続して出現する０の数は４個であるので、連続数は４ということになる。後半に、０が３個並んでいるが、先頭から連続して出現しているわけではないので、連続数にはカウントされない。また、単位ゼロフラグ群が「１０００００００」であった場合は、先頭から連続して出現する０は１個もないので、連続数は０ということになる。
【０１３６】
ランレングス処理部５０は、こうして求めた連続数が０の場合、別言すれば、単位ゼロフラグ群の先頭のゼロフラグが論理値「１」であった場合、パラメータｉを増加させるステップ数を１に設定し、新たなパラメータｉ（前回の読出処理におけるｉに１を加えた数）を用いて次の読出処理を行う。一方、求めた連続数が１以上の場合、別言すれば、単位ゼロフラグ群の少なくとも先頭のゼロフラグが論理値「０」であった場合、パラメータｉを増加させるステップ数を当該連続数に設定し、新たなパラメータｉ（前回の読出処理におけるｉに当該連続数を加えた数）を用いて次の読出処理を行う。
【０１３７】
要するに、ランレングス処理部５０は、読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理を行い、当該連続数が０の場合にはステップ数を１とし、当該連続数が１以上の場合には当該連続数をステップ数として、パラメータｉをこのステップ数だけ増加させながら読出処理を繰り返し実行することになる。
【０１３８】
一方、ランレングス処理部５０は、次のような方法で、ゼロランレングスのカウントを行う。まず、読み出した単位ゼロフラグ群の先頭のゼロフラグが「零状態」のフラグ（ここに示す実施形態の場合は論理値「０」のフラグ）であった場合には、上述した連続数算出処理で求めた連続数を累積加算する処理を行う。たとえば、単位ゼロフラグ群が「００００１０００」であった場合は、先頭のゼロフラグが０なので、連続数算出処理で求めた連続数４がゼロランレングス値に累積加算される。後半に並んでいる３個の０は、この時点では、まだカウントされない。なお、先頭のゼロフラグが０の場合は、ゼロランレングスのカウントアップ（累積加算）が行われるだけで、データやゼロランレングス値の出力は一切行われない。これは、単位ゼロフラグ群の先頭のゼロフラグが０の場合は、読み出したデータが「０」であるため、データとして出力する必要がないためである。
【０１３９】
これに対して、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグ（ここに示す実施形態の場合は論理値「１」のフラグ）であった場合には、連続数算出処理で求まる連続数は０であるから、ゼロランレングスのカウントアップは行われない。たとえば、単位ゼロフラグ群が「１０００００００」であった場合は、２番目以降のゼロフラグがすべて０になっているが、先頭のゼロフラグが１であるため、連続数は０であり、この時点では、２番目以降のゼロフラグがゼロランレングスとしてカウントアップされることはない。一方、読み出したデータは「０」ではないので、当該データを出力する必要がある。
【０１４０】
そこで、単位ゼロフラグ群の先頭のゼロフラグが１であった場合、ランレングス処理部５０は、データ順序列Ｑ′から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力する処理を行う。すなわち、読み出したデータが「０」ではなかった場合、当該データをそのまま出力するとともに、その時点でのゼロランレングスの累積値（ゼロランレングス値）を併せて出力することになる。このように、ランレングス処理部５０からの出力は、基本的には、読出処理を行った結果、単位ゼロフラグ群の先頭のゼロフラグが１であった場合に生じ、読み出したデータとゼロランレングス値とを組にした形で行われる。
【０１４１】
なお、単位ゼロフラグ群の先頭のゼロフラグが１であった場合、上述したように、その時点でのゼロランレングスの累積値がゼロランレングス値として出力されるので、その後、ゼロランレングスの累積値を初期値０にリセットする処理を行うようにする。したがって、次に読み出された単位ゼロフラグ群の先頭のゼロフラグが０であった場合に行われる連続数の累積処理は、初期値０に対して行われることになる。
【０１４２】
以上述べたとおり、ランレングス処理部５０は、データ順序列Ｑ′から第ｉ番目のデータを読み出すとともに、ゼロフラグ順序列Ｚ′から第ｉ番目を先頭とする複数ｍ個のゼロフラグからなる単位ゼロフラグ群を読み出し、この単位ゼロフラグ群の先頭から現れる「零状態」のフラグの連続数を求める処理を行う。そして、連続数が１以上である場合には、当該連続数をゼロランレングスとしてカウントし、連続数が０である場合には、データおよびこれまでのゼロランレングスのカウント値を出力することになる。このため、データとともに、適切なゼロランレングス値の出力を行うことができる。また、パラメータｉの更新ステップ数を、連続数が０の場合には１とし、連続数が１以上の場合には当該連続数としたため、ゼロランレングスとしてカウント済みのデータ「０」については読み飛ばしを行い、読出処理のサイクル数を削減することができる。これが、ランレングス処理を行う前に、予めゼロフラグ順序列Ｚ′を用意しておくことによって得られる効用である。
【０１４３】
次に、ＥＯＢフラグ順序列Ｅ′を予め用意しておく効用を説明しよう。ＥＯＢフラグは、前述したとおり、「ブロック終了状態」か「ブロック継続状態」かを示すフラグである。そして、ここで述べる実施形態の場合、ＥＯＢフラグは、「ブロック終了状態」には論理値「０」、「ブロック継続状態」には論理値「１」を対応させた１ビットのフラグとして定義される。このような定義を行うのは、§２で述べたとおり、ＥＯＢフラグ順序列生成部３３を、図８および図９に例示するように、単純な論理和演算回路の組合わせによって構成することができるためである。
【０１４４】
ここで、ＥＯＢフラグの「ブロック終了状態」とは、対応するゼロフラグおよびこれに後続するゼロフラグが、すべて「零状態」であることを示すものである。たとえば、図７の下段に示す例の場合、ＥＯＢフラグ順序列Ｅ′内の第１番目〜第４７番目のＥＯＢフラグは１、第４８番目〜第６４番目のＥＯＢフラグ（図に太枠で囲って示すフラグ）は０になっているが、これは、対応するゼロフラグ順序列Ｚ′内の第１番目〜第４７番目のゼロフラグについては、「自己を含めて後続するゼロフラグが、すべて０である」という条件を満たしていないが、第４８番目〜第６４番目のゼロフラグについては、「自己を含めて後続するゼロフラグが、すべて０である」という条件を満たしていることを示している。
【０１４５】
したがって、ランレングス処理部５０が、上述した読出処理において、データ順序列Ｑ′内の第ｉ番目のデータおよびゼロフラグ順序列Ｚ′内の第ｉ番目のゼロフラグを先頭とする単位ゼロフラグ群を読み出す際に、ＥＯＢフラグ順序列Ｅ′内の第ｉ番目のＥＯＢフラグも併せて読み出すようにすれば、「ブロック終了状態」になっているか否かを認識することができる。そして、もし「ブロック終了状態」になっていた場合には、現在読み出した第ｉ番目のデータを含めて、後続するデータはすべて「０」ということになるので、その旨を示す情報を出力することにより、以後の処理を中止できる。
【０１４６】
たとえば、図７の下段に示す例の場合、ランレングス処理部５０は、パラメータｉ＝４８とする読出処理において、データ順序列Ｑ′から第４８番目のデータ「０」を読み出し、ゼロフラグ順序列Ｚ′から第４８番目を先頭とする複数ｍ個のゼロフラグからなる単位ゼロフラグ群「００００００....」を読み出し、ＥＯＢフラグ順序列Ｅ′から第４８番目のＥＯＢフラグ「０」を読み出すことになる。そして、読み出したＥＯＢフラグ「０」により、「ブロック終了状態」になっていることを認識できる。すなわち、第４８番目のデータを含めて、後続する第６４番目までのデータがすべて「０」であることを認識することができる。そこで、ランレングス処理部５０は、処理対象となるブロック画素配列に関する以後のブロック処理を中止し、「後続するデータはすべて０であることを示す情報（「ブロック終了状態」を示す情報）」を出力すればよい。
【０１４７】
この「後続するデータはすべて０であることを示す情報（「ブロック終了状態」を示す情報）」としては、ＥＯＢフラグ自身をそのまま利用すればよい。上述したように、ランレングス処理部５０は、読出処理を行った結果、単位ゼロフラグ群の先頭のゼロフラグが１であった場合に、読み出したデータとゼロランレングス値とを組にして出力する。そこで、この出力を行う際に、併せてＥＯＢフラグも出力するようにする。別言すれば、ランレングス処理部５０からの出力は、データ、ゼロランレングス値、ＥＯＢフラグという３要素を組にして行うようにする。ランレングス処理部５０からの出力が生じる際には、毎回、ＥＯＢフラグも出力されることになるが、その論理値によって、「ブロック継続状態」か「ブロック終了状態」かを示すことができる。
【０１４８】
上述の説明では、ランレングス処理部５０は、読み出した単位ゼロフラグ群の先頭のゼロフラグが１であった場合（すなわち、読み出したデータが「０」でなかった場合）に出力を行うことになっているが、読み出したＥＯＢフラグが０であった場合にも、例外的な出力（以下、「ブロック最終出力」という）を行うようにする。ＥＯＢフラグが０であった場合、処理対象となるブロック画素配列に関する以後のブロック処理は中止されるので、上記「ブロック最終出力」が、文字通り、当該ブロック画素配列に関する最終的な出力になる。
【０１４９】
結局、ランレングス処理部５０は、データ順序列Ｑ′の第ｉ番目のデータおよびゼロフラグ順序列Ｚ′の第ｉ番目のフラグを先頭とする単位ゼロフラグ群を読み出す際に、ＥＯＢフラグ順序列Ｅ′の第ｉ番目のＥＯＢフラグも併せて読み出し、読み出したＥＯＢフラグが「ブロック終了状態（ここに示す実施形態の場合は論理値「０」）」を示している場合には、当該ＥＯＢフラグを「ブロック終了状態」を示す情報として出力し、処理対象となるブロック画素配列に関する以後の処理を中止すればよい。
【０１５０】
なお、ここに示す実施形態の場合、前述したように、ＥＯＢフラグ順序列生成部３３を単純な論理和演算回路の組合わせによって構成することができるように、ＥＯＢフラグを、「ブロック終了状態」には論理値「０」、「ブロック継続状態」には論理値「１」を対応させた１ビットのフラグとして定義している。しかしながら、ＥＯＢフラグは、本来、「ブロック終了状態」を示すためのフラグであり、ＪＰＥＧなどの汎用規格では、「ブロック終了状態」には論理値「１」、「ブロック継続状態」には論理値「０」を対応させたフラグとして定義されるのが一般的である。
【０１５１】
そこで、ここに示す実施形態の場合、ランレングス処理部５０が、ＥＯＢフラグを出力する際に、当該フラグの論理値を反転して出力するようにしている。すなわち、ランレングス処理部５０から出力されるＥＯＢフラグ（反転されたＥＯＢフラグ）が論理値「０」である場合には「ブロック継続状態」を示し、論理値「１」である場合には「ブロック終了状態」を示すことになる。
【０１５２】
＜＜＜  §４．  ランレングス処理部の具体的な構成  ＞＞＞
図４では、ランレングス処理部５０を１つの機能ブロックとして示し、このランレングス処理部５０で実施されるランレングス処理の内容を§３で説明した。ここでは、§３で述べたランレングス処理を実施するのに適したランレングス処理部５０の具体的な構成を説明する。
【０１５３】
図１０は、図４に示す順序列バッファ部４０およびランレングス処理部５０の詳細構成を示すブロック図である。§２で述べたとおり、ここに示す実施形態の場合、順序列バッファ部４０はフリップフロップによって構成されており、データ順序列Ｑ′、ゼロフラグ順序列Ｚ′、ＥＯＢフラグ順序列Ｅ′が格納されている。
【０１５４】
ここでは、一般的なＪＰＥＧ方式の規格に基づいて、前処理部１１において、８ビットの画素値を有する６４個の画素（ｎ＝６４）を８行８列に並べたブロック画素配列Ｂが作成された場合を例にとって説明する。この場合、ＤＣＴ処理により、個々のデータは１１ビットの情報量をもつことになるので、順序列バッファ部４０に格納されているデータ順序列Ｑ′は、１１ビットのデータを６４個並べた順序列ということになる。一方、ゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′は、いずれも１ビットのフラグを６４個並べた順序列になる。
【０１５５】
§３では、ランレングス処理部５０の基本的な機能として、順序列バッファ部４０から、第ｉ番目のデータと、第ｉ番目を先頭とする複数ｍ個のゼロフラグからなる単位ゼロフラグ群と、第ｉ番目のＥＯＢフラグと、をまとめて読み出す読出処理を説明した。このような読出処理を、パラメータｉを１から所定ステップ数ずつ順次増加させながら繰り返し実行することにより、ランレングス処理部５０内部でランレングス処理が実行されることになる。
【０１５６】
一般に、任意のパラメータｉを定めて、何らかの順序列から第ｉ番目の要素を読み出す処理は、様々な分野で利用されている汎用処理である。たとえば、メモリ上に格納されたデジタルデータをアクセスする場合、通常、所定のアドレス値をパラメータとして指定し、当該アドレス場所からデータを読み出す処理が行われる。ただ、本発明の目的は、符号化処理の高速化にあるので、順序列バッファ部４０からの読出処理も、できるだけ高速化が図れる方法を採用するのが好ましい。
【０１５７】
そこで、ここで述べる実施形態では、順序列バッファ部４０にシフト機能をもたせ、格納されている順序列の各要素（データやフラグ）自体を順序列バッファ部４０内でシフトさせることにより、実質的に、第ｉ番目の要素の読み込みが可能になるような構成を採っている。たとえば、データ順序列Ｑ′の中の第ｉ番目のデータを読み出す際には、順序列バッファ部４０内で当該第ｉ番目のデータが先頭にくるようなシフト動作を行い、先頭のデータを読み出すようにすればよい。前述したとおり、順序列バッファ部４０をフリップフロップで構成しておけば、いわゆる「バレルシフタ」と呼ばれる仕組を利用して、任意のシフト量によるシフト動作を１サイクルで行うことができる。
【０１５８】
そこで、図１０に示す順序列バッファ部４０は、格納しているデータ順序列Ｑ′内のデータ、格納しているゼロフラグ順序列Ｚ′内のゼロフラグ、格納しているＥＯＢフラグ順序列Ｅ′内のＥＯＢフラグを、ランレングス処理部５０から与えられたシフト指示に基づいて、指定されたシフト量だけ先頭側にシフトさせるシフト機能を有している。
【０１５９】
図１０において、ランレングス処理部５０から順序列バッファ部４０に向かう「シフト」と記述された矢印は、シフト動作を指示するシフト指示信号の流れを示し、「シフト量」と記述された矢印は、シフト量を指定する信号の流れを示している。シフト量の上限値は、単位ゼロフラグ群に含まれるゼロフラグの数ｍになる。ここに示す実施形態は、ｍ＝８に設定した例であるため、シフト量は１〜８の範囲内の値をとる。
【０１６０】
図示のとおり、ランレングス処理部５０から順序列バッファ部４０に対して、シフト信号およびシフト量が伝達されると、順序列バッファ部４０は、データ順序列Ｑ′内のデータ、ゼロフラグ順序列Ｚ′内のゼロフラグ、ＥＯＢフラグ順序列Ｅ′内のＥＯＢフラグに対して、指定されたシフト量だけ先頭側にシフトさせるシフト処理を行う。すなわち、シフト量をＳとするシフト処理は、概念的には、順序列を構成する第ｘ番目のセルの内容が、第（ｘ＋Ｓ）番目のセルの内容に置き換えられる処理、ということができる。
【０１６１】
このシフト処理により、先頭側のセル（第１番目のセル）から押し出されたデータやフラグは、そのまま消滅させてしまってかまわない。一方、シフト処理によって空いた末尾側のセルは、概念的には空白セルとしておいてかまわないが、フリップフロップ等の回路でセルを構成した場合、「０」または「１」のいずれかの論理値を補填しておく必要があるので、実用上は、何らかのダミーデータやダミーフラグを補填すればよい。
【０１６２】
ここに示す実施形態の場合、ゼロフラグ順序列Ｚ′については、シフト処理によって空いた末尾側のセルに、「非零状態」を示すダミーフラグ（すなわち、論理値「１」を示すフラグ）を補填するようにしている。そうすれば、データ順序列Ｑ′やＥＯＢフラグ順序列Ｅ′については、任意の値を補填しても、ゼロランレングス処理を行う上では支障は生じない。
【０１６３】
一方、ランレングス処理部５０は、図示のとおり、制御部５１と、ゼロランカウンタ部５２と、データカウンタ部５３と、出力部５４とを有している。制御部５１は、このランレングス処理部５０で実行されるランレングス処理を統括制御する役割を果たす。ゼロランカウンタ部５２は、順序列バッファ部４０から読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグ（論理値「０」のフラグ）の連続数を累積してゼロランレングス値を計数するカウンタとしての機能を果たす。データカウンタ部５３は、順序列バッファ部４０から読み出したもしくは読み飛ばされたデータの数を累積して計数するカウンタとしての機能を果たす。出力部５４は、制御部５１からの指示に基づいて、データ、ゼロランレングス、反転ＥＯＢフラグを組にして出力し、後段に接続されたランレングスバッファ部６０に書き込みを行う機能を果たす。以下、これらの構成要素の処理機能を順に説明する。
【０１６４】
はじめに、制御部５１の処理機能の概略を、他の構成要素との関連において説明する。図に矢印で示されているとおり、制御部５１は、他の構成要素との間で信号やデータのやりとりを行う基本機能を有している。
【０１６５】
具体的には、まず、順序列バッファ部４０に対しては、シフト指示およびシフト量を与える処理を行うとともに、データ順序列Ｑ′の先頭データ（１１ビットのデータ１個）と、ゼロフラグ順序列Ｚ′の先頭からｍ個（ここに示す例の場合は、ｍ＝８）のゼロフラグ（但し、シフトによりゼロフラグの数がｍ個未満の数になっていた場合は、当該数に相当する個数のゼロフラグおよびその末尾に補填されたダミーフラグ）と、ＥＯＢフラグ順序列Ｅ′の先頭のＥＯＢフラグと、を読み込む処理を行う。
【０１６６】
一方、ゼロカウンタ部５２に対しては、図に矢印で示されているとおり、ゼロカウントアップ指示、ゼロカウントアップ量、ゼロカウンタクリア指示、中間出力補正指示を与える処理を行う。ゼロカウントアップ指示は、連続数算出処理で求めた連続数を累積加算するための指示であり、ゼロカウントアップ量は、累積対象となる数値（すなわち、連続数算出処理で求めた連続数。この例の場合は、ｍ＝８であるため、連続数は１〜８の範囲の数値になる）である。ゼロカウンタクリア指示は、ブロック処理を開始する初期時点やゼロランレングス値が出力された時点で、ゼロランカウンタ部５２が保持しているカウント値を初期値０に設定するための指示である。また、中間出力補正指示は、例外的に、中間時点でゼロランレングス値の出力を行う中間出力処理を行った場合に、カウント値を補正するための指示である。この中間出力処理については後述する。なお、ゼロカウンタ部５２が保持している現時点のカウント値は、ゼロランレングス値として制御部５１に戻される。
【０１６７】
また、データカウンタ部５３に対しては、図に矢印で示されているとおり、データカウントアップ指示、データカウントアップ量、データカウンタクリア指示を与える処理を行うとともに、データカウント値を入力する処理を行う。データカウントアップ指示は、順序列バッファ部４０内のデータ順序列Ｑ′から読み出したもしくは読み飛ばされたデータの総数を累積加算するための指示であり、データカウントアップ量は、累積対象となる数値（この例の場合は、ｍ＝８であるため、当該数値は１〜８の範囲の数値になる）である。データカウンタクリア指示は、ブロック処理を開始する初期時点で、データカウンタ部５３が保持しているカウント値を初期値０に設定するための指示である。データカウンタ部５３が保持している現時点のカウント値は、データカウント値として制御部５１に戻される。
【０１６８】
そして、出力部５４に対しては、図に矢印で示されているとおり、出力イネーブル指示、１１ビットのデータ、中間出力イネーブル指示、ＥＯＢフラグを与える処理を行う。出力イネーブル指示は、出力部５４に対して、与えた１１ビットのデータと、その時点でゼロランカウンタ部５２が保持しているゼロランレングス値と、与えたＥＯＢフラグを反転させた反転ＥＯＢフラグと、を出力させるための指示である。また、中間出力イネーブル指示は、例外的に、上述した中間出力処理を行わせるための指示であり、その内容については後述する。
【０１６９】
一方、ゼロランカウンタ部５２は、ゼロランレングス値を計数するための累積計数機能を有する構成要素であり、制御部５１からゼロカウンタクリア指示が与えられたときに、カウント値として保持しているゼロランレングス値を初期値０に設定する処理を行う。また、制御部５１から、所定のゼロカウントアップ量を指定したゼロカウントアップ指示が与えられたときには、カウント値として保持しているゼロランレングス値を、与えられたゼロカウントアップ量だけ増加させて累積するとともに、その時点のゼロランレングス値を制御部５１に返す処理を行う。
【０１７０】
また、データカウンタ部５３は、データカウント値を計数するための累積計数機能を有する構成要素であり、制御部５１から、データカウンタクリア指示が与えられたときに、カウント値として保持しているデータカウント値を初期値０に設定する処理を行う。また、制御部５１から、所定のデータカウントアップ量を指定したデータカウントアップ指示が与えられたときには、カウント値として保持しているデータカウント値を、与えられたデータカウントアップ量だけ増加させて累積するとともに、その時点の累積値をデータカウント値として、制御部５１に返す処理を行う。
【０１７１】
そして、出力部５４は、制御部５１から、所定のデータを伴う出力イネーブル指示およびＥＯＢフラグが与えられたときに、与えられたデータ（この例の場合、１１ビットのデータ）と、その時点でゼロランカウンタ部５２に累積されているゼロランレングス値（後述するように、ここに示す実施形態の場合は、ＪＰＥＧの規格に合致するように、０〜１５の範囲内の数値となる）と、与えられたＥＯＢフラグとを組にして出力する。また、これらを後段のランレングスバッファ部６０に書き込むため、「ランレングスバッファ書き込み信号」を併せて出力する。
【０１７２】
なお、出力部５４は、与えられたＥＯＢフラグをそのままの形で出力してもかまわないが、ここに示す実施形態の場合、前述したように、ＥＯＢフラグを、「ブロック終了状態」には論理値「０」、「ブロック継続状態」には論理値「１」を対応させた１ビットのフラグとして定義しているため、出力部５４は、与えられたＥＯＢフラグを反転させて、反転ＥＯＢフラグという形式（論理値「１」が「ブロック終了状態」を示す形式）で出力している。
【０１７３】
＜＜＜  §５．  ランレングス処理部の具体的な処理動作  ＞＞＞
続いて、制御部５１の内部処理動作を、図１１の流れ図を参照しながら詳細に説明する。この流れ図は、制御部５１によって実施されるブロック処理の手順、すなわち、図１に例示するような１組のブロック画素配列Ｂを元に生成されたｎ個のデータ（ここに示す例では、ｎ＝６４）を所定の並び順で並べたデータ順序列Ｑ′を処理対象とする処理の手順を示すものである。実際には、この１組のブロック画素配列Ｂに関するブロック処理が完了すると、順序列バッファ部４０には、次の１組のブロック画素配列Ｂに基づいて作成された新たなデータ順序列Ｑ′が格納されることになり、図１１に示すブロック処理が繰り返されることになる。
【０１７４】
まず、ステップＳ１では、ゼロランカウンタ部５２に対してゼロカウンタクリア指示を与えるとともに、データカウンタ部５３に対してデータカウンタクリア指示を与える初期設定処理が行われる。これにより、ブロック処理の開始時点において、ゼロランカウンタ部５２のカウント値およびデータカウンタ部５３のカウント値は、いずれも初期値０に設定されることになる。
【０１７５】
続くステップＳ２では、順序列バッファ部４０から、データ順序列Ｑ′の先頭データと、ゼロフラグ順序列Ｚ′の先頭からｍ個のゼロフラグ（単位ゼロフラグ群）と、ＥＯＢフラグ順序列Ｅ′の先頭のＥＯＢフラグと、を読み込む読込処理が行われる。ここに示す実施形態の場合、データは１１ビットから構成されており、ｍ＝８に設定されているため、１１ビットのデータが１個、１ビットからなるゼロフラグが８個、１ビットからなるＥＯＢフラグが１個が、制御部５１によって読み込まれることになる。
【０１７６】
なお、前述したとおり、順序列バッファ部４０はシフト機能を有しているため、シフト動作を行うたびに、データ順序列Ｑ′内のデータ数、ゼロフラグ順序列Ｚ′内のゼロフラグ数、ＥＯＢフラグ順序列内のＥＯＢフラグ数は減少してゆくことになる。しかも、ゼロフラグに関しては、先頭の１個だけではなく、ｍ個（８個）のフラグが単位ゼロフラグ群としてまとめて読み込まれることになるため、シフトによりゼロフラグの数がｍ個未満の数になっていた場合は、ゼロフラグの枯渇により、ｍ個のゼロフラグを読み込むことはできなくなる。その場合には、残存数に相当する個数のゼロフラグを読み込むようにすればよい。
【０１７７】
もっとも、実際には、前述したとおり、順序列バッファ部４０が、ゼロフラグ順序列Ｚ′内のゼロフラグを、先頭側に、指定されたシフト量だけシフトさせるシフト処理を行う際に、末尾側に、当該シフト量に対応する数の「非零状態」を示すダミーフラグ（この例の場合、論理値「１」のフラグ）を追加する処理を行うため、制御部５１は、読込処理を実行する際に、常に、ゼロフラグ順序列Ｚ′の先頭からｍ個（８個）のフラグを読み込むようにすれば問題は生じない。ゼロフラグが枯渇していた場合、読み込んだｍ個のフラグのうちの末尾のいくつかは、ゼロフラグではなく、ダミーフラグということになるが、ダミーフラグが「非零状態」を示すフラグである限り、動作に支障は生じない。結局、ステップＳ２で読み込まれる単位ゼロフラグ群は、１乃至ｍ個のゼロフラグと、必要に応じてこれに付加されたダミーフラグによって構成される合計ｍ個のフラグ群ということになる。
【０１７８】
続くステップＳ３では、読み込んだＥＯＢフラグの値をチェックする処理が行われる。ここに示す実施形態では、ＥＯＢフラグが「１」であれば、「ブロック継続状態」を示していることになるため、そのままブロック処理は続行されることになるが、ＥＯＢフラグが「０」であれば、「ブロック終了状態」であるため、ブロック処理は中止されることになる。ここでは、ＥＯＢフラグが「１」であった場合（ブロック継続状態であった場合）について、以下の説明を続けることにする。
【０１７９】
ステップＳ３において、ＥＯＢフラグが「１」と判定されると、ステップＳ４において、シフト量、データカウントアップ量、ゼロカウントアップ量の算出が行われる。これらを算出するためには、ステップＳ２で読み込んだ単位ゼロフラグ群について、先頭から現れる「零状態」のフラグ（この例の場合は、論理値「０」のフラグ）の連続数を求める連続数算出処理が必要である。連続数が求まると、図１２の表に示す算出ルールに基づいて、シフト量、データカウントアップ量、ゼロカウントアップ量を決定することができる。
【０１８０】
図１２の表の第１欄には、単位ゼロフラグ群を構成する８個のゼロフラグの論理値のバリエーションが示されている。各単位ゼロフラグ群は、左側が先頭であり、Ｘはドントケア（０／１どちらでもよい）を示す。表の第２欄には、各バリエーションについての連続数が示されている。連続数は、論理値「０」のゼロフラグが先頭から現れる場合に、先頭から何個の「０」が連続しているかを示す数値として定義されるので、先頭のゼロフラグが「１」の場合の連続数は０になる。また、論理値「１」が出現してしまった場合は、単位ゼロフラグ群内において、それ以降に出現する「０」は連続数としてはカウントされないので、表の第１欄に示すバリエーションでは、単位ゼロフラグ群において「１」に後続するゼロフラグは、ドントケア（Ｘ）として示されている。
【０１８１】
したがって、「１ＸＸＸＸＸＸＸ」のように先頭から「１」が出現した場合の連続数は０、「０１ＸＸＸＸＸＸ」のように先頭の「０」の次に「１」が出現した場合の連続数は１、「００１ＸＸＸＸＸ」のように先頭から２個の「０」が連続出現する場合の連続数は２、「０００１ＸＸＸＸ」のように先頭から３個の「０」が連続出現する場合の連続数は３、... 、「００００００００」のように８個のゼロフラグが全部「０」の場合の連続数は８ということになる。ここでは、ｍ＝８の場合の例を示すが、もちろん、ｍが８以外の任意の数値に設定されていた場合も、同様にして連続数が定義される。
【０１８２】
こうして、ステップＳ２で読み込んだ単位ゼロフラグ群について、連続数が決定されたら、当該連続数に基づいて、図１２の表に従って、シフト量、データカウントアップ量、ゼロカウントアップ量が決定される。まず、シフト量に関しては、連続数が０の場合はシフト量＝１とし、それ以外の場合はシフト量＝連続数とすればよい。また、データカウントアップ量は、常に、シフト量と同じ値に設定すればよい。一方、ゼロカウントアップ量は、常に、連続数と同じ値に設定すればよい。
【０１８３】
この図１２に示す表において、各行に記載された数値の意味合いは、次のとおりである。まず、連続数が０の場合の行は、現在読み出されたデータが「０以外」であるため、ゼロランレングスに関するカウントアップ量は０とすべきであるが、次回の読出処理では次のデータを読み出す必要があるためシフト量を１とし、また、既に１個のデータが読み出されているのでデータカウントアップ量も１とすべきであることを示している。
【０１８４】
一方、連続数が１の場合の行は、現在読み出されたデータが「０」であるため、ゼロランレングスに関するカウントアップ量は１とすべきであり、次回の読出処理では次のデータを読み出す必要があるためシフト量を１とし、また、既に１個のデータが読み出されているのでデータカウントアップ量も１とすべきであることを示している。
【０１８５】
また、連続数が２の場合の行は、現在読み出されたデータが「０」であり、更に、まだ読み出しを行っていない次に後続するデータも「０」であることが先行して認識できるため、ゼロランレングスに関するカウントアップ量は２とすべきであり、次回の読出処理では次のデータを１個読み飛ばして、その次のデータを読み出す必要があるためシフト量を２とし、また、既に１個のデータが読み出され、次の１個のデータが読み飛ばされるので、データカウントアップ量は２とすべきであることを示している。
【０１８６】
同様に、連続数が３の場合の行は、現在読み出されたデータが「０」であり、更に、まだ読み出しを行っていない後続する２個のデータも「０」であることが先行して認識できるため、ゼロランレングスに関するカウントアップ量は３とすべきであり、次回の読出処理では後続データを２個読み飛ばして、その次のデータを読み出す必要があるためシフト量を３とし、また、既に１個のデータが読み出され、後続する２個のデータが読み飛ばされるので、データカウントアップ量は３とすべきであることを示している。
【０１８７】
そして、連続数が８の場合の行は、現在読み出されたデータが「０」であり、更に、まだ読み出しを行っていない後続する７個のデータも「０」であることが先行して認識できるため、ゼロランレングスに関するカウントアップ量は８とすべきであり、次回の読出処理では後続データを７個読み飛ばして、その次のデータを読み出す必要があるためシフト量を８とし、また、既に１個のデータが読み出され、後続する７個のデータが読み飛ばされるので、データカウントアップ量は８とすべきであることを示している。
【０１８８】
こうして、ステップＳ４において、シフト量、データカウントアップ量、ゼロカウントアップ量が算出されたら、続くステップＳ５において、ステップＳ２で読み出した単位ゼロフラグ群の先頭のゼロフラグの値をチェックする処理が行われる。先頭のゼロフラグが論理値「０」であった場合、すなわち、「零状態」を示していた場合は、ステップＳ２で読み込んだ１個のデータが「０」であることになるので、ゼロランレングス値をカウントアップするためにステップＳ６へと分岐する。これに対して、先頭のゼロフラグが論理値「１」であった場合、すなわち、「非零状態」を示していた場合は、ステップＳ２で読み込んだ１個のデータが「０以外」であることになるので、当該「０以外」のデータを出力するためにステップＳ７へと分岐する。
【０１８９】
ここでは、まず、ステップＳ６へ分岐した場合の処理を説明する。ステップＳ６は、ゼロランレングス値をカウントアップするための処理であり、ゼロランカウンタ部５２に対して、ゼロカウントアップ指示とともに、ゼロカウントアップ量を与える処理が行われる。このゼロカウントアップ量は、ステップＳ４で算出された値であり、単位ゼロフラグ群の先頭から現れる「０」の連続数に一致する。したがって、連続数が２以上であった場合は、まだ読み出されていないデータ「０」について、先行して、ゼロランレングスとしてのカウントが行われることになる。
【０１９０】
また、順序列バッファ部４０に対しては、所定のシフト量を指定したシフト指示が与えられる。ステップＳ６が完了すると、再びステップＳ２へ戻り、次回の読出処理が行われることになるが、その際には、上記シフト量に応じたシフト処理が行われているため、新たなデータやフラグの読み出しが行われることになる。ステップＳ６で指定されるシフト量は、ステップＳ４で算出された値であり、単位ゼロフラグ群の先頭から現れる「０」の連続数（ステップＳ６の場合は、必ず１以上になる）に一致する。したがって、連続数が１であった場合は、シフト量＝１とするシフト処理が行われるが、連続数が２以上であった場合は、シフト量を２以上とするシフト処理が行われ、ゼロランレングスとしてのカウントが先行して行われているデータ「０」は読み飛ばされることになる。
【０１９１】
更に、データカウンタ部５３に対しては、上記シフト量をデータカウントアップ量として指定したデータカウントアップ指示を与えることになる。データ「０」の読み飛ばしが行われた場合は、シフト量として反映されるため、シフト量をデータカウントアップ量としてデータのカウントアップを行えば、データカウンタ部５３は、実際に読み出されたデータとともに読み飛ばされたデータについてもカウントすることができる。
【０１９２】
このように、制御部５１は、ステップＳ２で読み出した単位ゼロフラグ群の先頭のゼロフラグが「零状態」（論理値「０」）を示していた場合には、ステップＳ６において、ゼロランカウンタ部５２に対して、ステップＳ４で求めた連続数をゼロカウントアップ量として指定したゼロカウントアップ指示を与え、順序列バッファ部４０に対して、当該連続数をシフト量として指定したシフト指示を与え、データカウンタ部５３に対して、当該シフト量をデータカウントアップ量として指定したデータカウントアップ指示を与える処理を行うことになる。
【０１９３】
かくして、ステップＳ２で読み出した単位ゼロフラグ群の先頭のゼロフラグが論理値「０」であった場合（「零状態」を示していた場合）は、ステップＳ５からステップＳ６へと分岐して、ゼロランレングス値のカウントアップが行われ、０が連続して出現する個数は、ゼロカウンタ部５２におけるカウント値（ゼロランレングス値）として累積されてゆくことになる。これに対して、ステップＳ２で読み出した単位ゼロフラグ群の先頭のゼロフラグが論理値「１」であった場合（「非零状態」を示していた場合）は、ステップＳ５からステップＳ７へと分岐して、データを出力する処理が行われる。
【０１９４】
まず、ステップＳ７では、ゼロランカウンタ部５２に現時点で保存されているカウント値（すなわち、その時点のゼロランレングス値）が１６以上であるか否かが判定される。図１０に示すとおり、ゼロランカウンタ部５２から制御部５１には、その時点のゼロランレングス値が伝達されており、制御部５１は、この値を用いて、ステップＳ７の判定処理を行うことができる。当該判定処理は、後述する中間出力処理（ステップＳ８）を行うべきか否かを決めるためのものである。すなわち、ゼロランレングス値が１６以上になっていた場合には、ステップＳ７からステップＳ８に分岐して、中間出力処理が実行されることになるが、ここでは、まず、ゼロランレングス値が１６未満であった場合についての処理を説明する。
【０１９５】
ステップＳ７でゼロランレングス値が１６未満であると判定されると、ステップＳ９へと進み、出力処理が実行される。まず、制御部５１は、出力部５４に対して、ステップＳ２で読み出した１１ビットのデータを伴う出力イネーブル指示と、ステップＳ２で読み出したＥＯＢフラグと、を与える。既に述べたとおり、出力部５４は、このような出力イネーブル指示を受けて、与えられた１１ビットのデータと、ゼロランカウンタ部５２に保持されていたゼロランレングス値と、与えられたＥＯＢフラグを反転させた反転ＥＯＢフラグと、ランレングスバッファ書き込み信号と、を後段のランレングスバッファ部６０に対して出力することになる。
【０１９６】
また、ゼロランカウンタ部５２に対しては、ゼロカウンタクリア指示を与え、カウント値を初期値０に設定する処理が行われる。これは、ゼロランカウンタ部５２がこれまで累積保持していたカウント値が、ゼロランレングス値として出力されてしまったため、ゼロランレングス値の以後のカウントを初期値０から行うためである。
【０１９７】
一方、順序列バッファ部４０に対しては、シフト量を１に指定したシフト指示が与えられる。前述したとおり、シフト量は、ステップＳ４において算出されるが、ステップＳ９が実行される場合は、先頭ゼロフラグが「１」の場合、すなわち、連続数が０の場合であるため、図１２の表に示すとおり、シフト量は必ず１になる。そこで、順序列バッファ部４０に対しては、シフト量を１に指定したシフト指示が与えられることになる。ステップＳ９が完了すると、ステップＳ１０を経て、再びステップＳ２へ戻り、次回の読出処理が行われることになるが、その際には、シフト量を１に指定したシフト処理が行われているため、後続する次のデータが新たなデータとして読み出されることになる。
【０１９８】
また、データカウンタ部５３に対しては、上記シフト量１をデータカウントアップ量として指定したデータカウントアップ指示が与えられる。
【０１９９】
このように、制御部５１は、ステップＳ２で読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」（論理値「１」）を示していた場合には、ステップＳ９において、出力部５４に対して、出力イネーブル指示と、ステップＳ２で読み込んだデータおよびＥＯＢフラグと、を与え、ゼロランカウンタ部５２に対してゼロカウンタクリア指示を与え、データカウンタ部５３に対して、シフト量をデータカウントアップ量として指定したデータカウントアップ指示を与え、順序列バッファ部４０に対して、シフト量を１に指定したシフト指示を与える処理を行うことになる。
【０２００】
こうして、ステップＳ９の処理が完了すると、続くステップＳ１０において、データカウンタ部５３に累積されているデータカウント値が、処理対象となるブロック画素配列に含まれる画素数ｎ（この例の場合、ｎ＝６４）に達しているか否かが判定される。図１０に示すとおり、制御部５１には、データカウンタ部５３から、その時点におけるデータカウント値が戻されるので、制御部５１は、このデータカウント値を値ｎ（＝６４）と比較することにより、ステップＳ１０の判定を行うことができる。データカウント値がｎに達していない場合には、ステップＳ１０からステップＳ２へと戻り、上述した各手順が、「ブロック終了状態」を示すＥＯＢフラグが読み込まれるまで繰り返されることになる。一方、ステップＳ１０の判定において、データカウント値がｎに達していた場合には、処理対象となるブロック画素配列に関するブロック処理は完了することになる。
【０２０１】
続いて、ステップＳ７から分岐したステップＳ８で行われる中間出力処理について説明を行う。この中間出力処理は、本発明を実施する上で必ずしも必要な処理ではないが、ゼロランレングス値に上限が設けられている規格に応じた符号化を行う場合には必要になる。たとえば、ＪＰＥＧ規格では、ゼロランレングス値の最大値を１５とする上限が設けられている。この規格に従うと、データとしての１個の「０」とランレングスとしての１５個の「０」という形式により、最大１６個までの連続するデータ「０」を１回の符号化用出力として出すことができる。
【０２０２】
換言すれば、データ順序列Ｑ′内に、データ「０」が１７個以上並んでいた場合、１回の符号化用出力として取り扱うことはできない。図１０において、出力部５４から出力されるゼロランレングス値の数値範囲が０〜１５となっているのは、このようなＪＰＥＧ規格に応じたランレングス処理を行ったためである。
【０２０３】
図１１の流れ図におけるステップＳ７は、ゼロランカウンタ部５２に保持されている現時点のゼロランレングス値が、所定の許容値Ｍ以上となっているか否かを判定するための処理である。ここでは、上述したＪＰＥＧ規格に対応するため、Ｍ＝１６に設定し、ゼロランカウンタ部５２のカウント値が１６以上になっているか否かの判定が行われる。カウント値が１６未満であれば、ステップＳ９へと進み、これまで述べたように、出力部５４に対して出力イネーブル指示を与えるなどの通常の出力指示処理が実行される。ところが、カウント値が１６以上になっていた場合には、ステップＳ７からステップＳ８へと進み、中間出力処理が実行される。
【０２０４】
この中間出力処理は、ゼロランカウンタ部５２に累積されている１６個分の「０」の情報を、データとしての１個の「０」とランレングスとしての１５個の「０」という形式により出力することを目的としたものである。
【０２０５】
データ順序列Ｑ′内に多数の「０」が連続していた場合、図１１の流れ図に示す手順では、ステップＳ２→Ｓ３→Ｓ４→Ｓ５→Ｓ６→Ｓ２→というループにより、ゼロランカウンタ部５２がカウントアップを続けることになるが、出力部５４からの出力は「０以外」のデータが読み出されるまで（すなわち、ステップＳ５において、先頭ゼロフラグ＝１と判定されるまで）は生じないので、カウント値は１６を超えても増え続けることになる。
【０２０６】
そこで、ステップＳ５からステップＳ７へと分岐したときに、ステップＳ９による通常の出力指示処理を行う前に、ステップＳ８において、１６個分の「０」の情報を中間的に出力し、ゼロランカウンタ部５２のカウント値が１６未満となるようにしてからステップＳ９へと進み、通常の出力指示処理が実行されるようにしているのである。
【０２０７】
すなわち、制御部５１は、ステップＳ９の出力指示処理を実行する前に、ステップＳ７において、ゼロランカウンタ部５２に累積されているゼロランレングス値が、所定の許容値Ｍ（この例の場合、Ｍ＝１６）以上になっているか否かを判定し、Ｍ以上になっていた場合には、ステップＳ９の出力指示処理を実行する前に、ステップＳ８における中間出力指示処理を実行することになる。具体的には、この中間出力指示処理では、制御部５１から出力部５４に対して、中間出力イネーブル指示を与えるとともに、ゼロランカウンタ部５２に対して中間出力補正指示を与える処理が行われる。
【０２０８】
出力部５４は、このような中間出力イネーブル指示が与えられると、０を示すデータと（Ｍ−１）個の０が連続することを示すゼロランレングス値とを組にして出力する中間出力処理を実行する。ここに示す例では、Ｍ＝１６であるので、中間出力イネーブル指示を受けた出力部５４は、上述したとおり、０を示すデータと１５個の０が連続することを示すゼロランレングス値とを組にして出力することになり（このとき、「ブロック継続状態」を示す反転ＥＯＢフラグも併せて出力される。）、合計１６個の「０」が連続するという情報がランレングスバッファ部６０へ書き込まれることになる。
【０２０９】
一方、制御部５１から中間出力補正指示が与えられたゼロランカウンタ部５２は、保持しているゼロランレングス値を許容値Ｍだけ減少させる補正処理を行う。ここに示す例では、Ｍ＝１６であるので、中間出力補正指示を受けたゼロランカウンタ部５２は、カウント値を１６だけ減少させる補正処理を行うことになる。
【０２１０】
図１１の流れ図に示すとおり、ステップＳ８が完了した後、再びステップＳ７へと戻ることになるので、ステップＳ８の中間出力指示処理は、ゼロランカウンタ部５２に累積されているゼロランレングス値が、許容値Ｍ未満になるまで繰り返し実行されることになる。
【０２１１】
たとえば、ステップＳ５からステップＳ７へ進んだ時点で、ゼロランカウンタ部５２に累積されているゼロランレングス値が３６であった場合は、まず、ステップＳ８における第１回目の中間出力指示処理により、出力部５４から合計１６個の「０」が連続するという情報が出力され、中間出力補正指示により、累積されているゼロランレングス値は２０に補正される。続いて、再びステップＳ７を経てステップＳ８へと進み、第２回目の中間出力指示処理により、出力部５４から合計１６個の「０」が連続するという情報が出力され、中間出力補正指示により、累積されているゼロランレングス値は４に補正される。かくして、ステップＳ９による通常の出力指示処理では、データとともに、補正後のゼロランレングス値４が出力されることになる。
【０２１２】
最後に、ステップＳ３において、ＥＯＢフラグが「０」と判定された場合、すなわち「ブロック終了状態」を示すＥＯＢフラグが読み込まれた場合の処理を説明する。この場合、ステップＳ２で読み込んだデータは必ず「０」であり、しかも後続するデータもすべて「０」であることになる。そこで、ステップＳ３からステップＳ１１へと進み、出力部５４に対して、出力イネーブル指示を与える処理が行われる。このとき、ステップＳ２で読み込んだデータおよびＥＯＢフラグも出力イネーブル指示とともに出力部５４に与えられる。
【０２１３】
この場合に、出力部５４が行う出力処理は、ステップＳ９において出力イネーブル指示が与えられた場合と全く同じ処理である。すなわち、制御部５１から与えられたデータ（この場合、「０」）と、その時点でゼロランカウンタ部５２が保持していたゼロランレングス値と、制御部５１から与えられたＥＯＢフラグ（この場合、「０」）を反転させた反転ＥＯＢフラグ（すなわち、「１」）と、を組にして、ランレングスバッファ書き込み信号とともに、ランレングスバッファ部６０へと出力する処理が行われる。
【０２１４】
こうして、ステップＳ１１の処理が完了したら、ブロック処理はそこで中止される。この場合、データ順序列Ｑ′に、まだ読み出されていないデータが残っていたとしても、これらの残存データはいずれもデータ「０」であるから、読出処理を省略しても問題は生じない。
【０２１５】
また、これら残存するデータ「０」の中には、ゼロランレングスとしてまだカウントされていないデータが含まれている可能性もあるが、反転ＥＯＢフラグとして、論理値「１」を示すフラグが出力されているため、処理対象となるブロック画素配列に関するデータは、この論理値「１」を示す反転ＥＯＢフラグが出力された時点で終了し、これ以降に後続するデータは、次のブロック画素配列に関するデータであることが認識可能であるので、ハフマン符号化部７０で行われるハフマン符号化処理には何ら支障は生じない。
【０２１６】
＜＜＜  §６．  ランレングス処理の具体的な実例  ＞＞＞
ここでは、図１０に示すランレングス処理部５０を用いた実施形態において、制御部５１が図１１の流れ図に示す処理を実行した場合に、どのようなランレングス処理が行われるかを、具体的な実例に即して説明する。
【０２１７】
いま、図１０に示す順序列バッファ部４０内に、図１３に例示するようなデータ順序列Ｑ′、ゼロフラグ順序列Ｚ′、ＥＯＢフラグ順序列Ｅ′が格納されていたものとしよう。これらの各順序列Ｑ′，Ｚ′，Ｅ′の内容は、図７の下段に示したものと同じものである。一方、図１４は、図１０に示す順序列バッファ部４０内に図１３に例示するような各順序列Ｑ′，Ｚ′，Ｅ′が格納されているという前提において、図１０に示すランレングス処理部５０によって実行される処理プロセスを示すチャートである。
【０２１８】
この図１４に示すチャートにおいて、「サイクル」欄に記載された１〜３１の数字は、ランレングス処理部５０の処理サイクルを示す番号である。ランレングス処理部５０は、１サイクルの間に、順序列バッファ部４０からデータやフラグを読み出す入力処理と、ランレングスバッファ６０に対してデータやフラグを書き出す出力処理と、を実行することができる。なお、「サイクル」欄に記載された黒い星印は、当該サイクルが、読み飛ばし後のサイクルであることを示している。
【０２１９】
一方、このチャートの「入力」欄には、各サイクルにおいて、順序列バッファ部４０から入力されるデータ、単位ゼロフラグ群、ＥＯＢフラグの内容（具体的な数値）が記載されており、「出力」欄には、各サイクルにおいて、ランレングスバッファ６０に対して出力されるデータ、ゼロランレングス値、反転ＥＯＢフラグの内容（具体的な数値）が記載されている。また、「次のシフト量」欄には、各サイクルにおいて、順序列バッファ部４０に対して与えられるシフト量の内容（具体的な数値）が記載されている。順序列バッファ部４０は、次のサイクルの入力が行われるまでに、当該シフト量に応じたシフト処理を実行することになる。
【０２２０】
それでは、図１３に例示した各順序列Ｑ′，Ｚ′，Ｅ′と、図１１の流れ図と、図１４に示すチャートを参照しながら、ランレングス処理部５０の処理プロセスをサイクルごとに順に説明していこう。なお、ここに示す実例は、ＪＰＥＧ形式の画像符号化を行うプロセスであり、処理対象となるブロック画素配列の画素数ｎ＝６４、単位ゼロフラグ群のフラグ数ｍ＝８、ゼロランレングスの許容値Ｍ＝１６（１個のデータ「０」＋ランレングス値１５）の例である。はじめに、図１１の流れ図のステップＳ１において、ゼロランカウンタ部５２およびデータカウンタ部５３のカウント値が初期値０に設定され、一連のブロック処理が開始される。
【０２２１】
まず、第１サイクルにおいて、ステップＳ２の読込処理が実行され、図１３に示すデータ順序列Ｑ′の第１セル内のデータ「−３」と、ゼロフラグ順序列Ｚ′の第１〜第８セル内のフラグからなる単位ゼロフラグ群「１０１１１１０１」と、ＥＯＢフラグ順序列Ｅ′の第１セル内のフラグ「１」と、が読み込まれる。これらの数値は、図１４のチャートの第１サイクルの「入力」欄に記載されているとおりである。
【０２２２】
続くステップＳ３の判定では、ＥＯＢフラグ＝１であるため、ステップＳ４へと進み、シフト量、データカウントアップ量、ゼロカウントアップ量の算出が行われる。図１２の表によれば、今回読み込まれた単位ゼロフラグ群「１０１１１１０１」は、１行目のバリエーション「１ＸＸＸＸＸＸＸ」に対応するので、連続数＝０となり、シフト量＝１、データカウントアップ量＝１、ゼロカウントアップ量＝０なる算出が行われる。
【０２２３】
次のステップＳ５の判定では、読み込まれた単位ゼロフラグ群の先頭ゼロフラグは「１」であるため、ステップＳ７の判定を経て、Ｓ９の出力処理が行われることになる。すなわち、出力部５４から、データ「−３」と、ゼロランレングス値「０」と、反転ＥＯＢフラグ「０」とが出力される。これらの数値は、図１４のチャートの第１サイクルの「出力」欄に記載されているとおりである。また、このとき、ゼロカウントクリア指示およびデータカウントアップ指示が与えられるため、ゼロランカウンタ部５２のカウント値は初期値０にクリアされ、データカウンタ部５３のカウント値は、データカウントアップ量１だけ増加して１になる。
【０２２４】
このとき、順序列バッファ部４０に対しては、シフト量＝１を指定したシフト指示が与えられるので、順序列バッファ部４０によるシフト処理により、図１３に示す各順序列Ｑ′，Ｚ′，Ｅ′のセルの内容が、１つずつ繰り上げられる。すなわち、各順序列Ｑ′，Ｚ′，Ｅ′の第１セル内の数値は押し出されて廃棄され、第２セル内の数値が第１セルに移動し、第３セル内の数値が第２セルに移動し、... 、第６４セル内の数値が第６３セルに移動する。第６４セルは、概念的には空白になるが、実際には、ダミーデータもしくはダミーフラグによって補填される。前述したとおり、ゼロフラグ順序列Ｚ′内には、ダミーフラグとして論理値「１」を示すフラグが補填される。
【０２２５】
このように、ここに示す実施形態の場合、順序列バッファ部４０に格納されている各順序列Ｑ′，Ｚ′，Ｅ′内のデータやフラグは、シフト指示によってシフトされ、ステップＳ２の読込処理は、常に、順序列の先頭から行われることになるが、ここでは、便宜上、図１３に示す各順序列Ｑ′，Ｚ′，Ｅ′内のデータやフラグはそのままの状態とし、ステップＳ２の読込処理を行う際に、読込先のセルをシフト量だけ後方に移動させたものとして、説明を行うことにする。
【０２２６】
したがって、第２サイクルでは、ステップＳ２の読込処理により、図１３に示すデータ順序列Ｑ′の第２セル内のデータ「０」と、ゼロフラグ順序列Ｚ′の第２〜第９セル内のフラグからなる単位ゼロフラグ群「０１１１１０１１」と、ＥＯＢフラグ順序列Ｅ′の第２セル内のフラグ「１」と、が読み込まれる。これらの数値は、図１４のチャートの第２サイクルの「入力」欄に記載されているとおりである。
【０２２７】
続くステップＳ３の判定では、ＥＯＢフラグ＝１であるため、ステップＳ４へと進み、シフト量、データカウントアップ量、ゼロカウントアップ量の算出が行われる。図１２の表によれば、今回読み込まれた単位ゼロフラグ群「０１１１１０１１」は、２行目のバリエーション「０１ＸＸＸＸＸＸ」に対応するので、連続数＝１となり、シフト量＝１、データカウントアップ量＝１、ゼロカウントアップ量＝１なる算出が行われる。
【０２２８】
次のステップＳ５の判定では、読み込まれた単位ゼロフラグ群の先頭ゼロフラグは「０」であるため、ステップＳ６の処理が行われる。すなわち、ゼロカウンタ部５２のカウンタ値（ゼロランレングス値）は、ゼロカウントアップ量１だけ増加して１になり、データカウンタ部５３のカウント値は、データカウントアップ量１だけ増加して２になる。なお、ステップＳ６の処理では、出力は行われないため、図１４のチャートの第２サイクルの「出力」欄は空欄になっている。
【０２２９】
このとき、順序列バッファ部４０に対しては、シフト量＝１を指定したシフト指示が与えられるので、順序列バッファ部４０によるシフト処理により、図１３に示す各順序列Ｑ′，Ｚ′，Ｅ′のセルの内容が、１つずつ前方にシフトする。
【０２３０】
次の第３サイクルの処理は、第１サイクルの処理と同様である。すなわち、図１３に示すデータ順序列Ｑ′の第３セル内のデータ「−４」と、ゼロフラグ順序列Ｚ′の第３〜第１０セル内のフラグからなる単位ゼロフラグ群「１１１１０１１１」と、ＥＯＢフラグ順序列Ｅ′の第３セル内のフラグ「１」と、が読み込まれる。これらの数値は、図１４のチャートの第３サイクルの「入力」欄に記載されているとおりである。
【０２３１】
続くステップＳ３の判定では、ＥＯＢフラグ＝１であるため、ステップＳ４へと進み、連続数＝０、シフト量＝１、データカウントアップ量＝１、ゼロカウントアップ量＝０なる算出が行われる。そして、ステップＳ５，Ｓ７の判定を経てＳ９の出力処理が行われる。すなわち、出力部５４から、データ「−４」と、ゼロランレングス値「１」と、反転ＥＯＢフラグ「０」とが出力される。これらの数値は、図１４のチャートの第３サイクルの「出力」欄に記載されているとおりである。
【０２３２】
また、このとき、ゼロカウントクリア指示およびデータカウントアップ指示が与えられるため、ゼロランカウンタ部５２のカウント値は初期値０にクリアされ、データカウンタ部５３のカウント値は、データカウントアップ量１だけ増加して３になる。一方、順序列バッファ部４０に対しては、シフト量＝１を指定したシフト指示が与えられるので、各順序列Ｑ′，Ｚ′，Ｅ′のセルの内容が、１つずつ繰り上げられる。
【０２３３】
以下、第４サイクル〜第６サイクルも、第３サイクルと同様に出力処理が行われることになり、第７サイクルでは、データ「０」がゼロランレングスとしてカウントアップされる。続く第８サイクル〜第１０サイクルも、第３サイクルと同様に出力処理が行われることになり、第１１サイクルでは、データ「０」がゼロランレングスとしてカウントアップされる。更に、第１２サイクル〜第１４サイクルも、第３サイクルと同様に出力処理が行われることになる。
【０２３４】
この第１４サイクルまでは、単位ゼロフラグ群の先頭フラグが「０」であっても、次のフラグが「１」であったため、連続数は１止まりである。ところが、第１５サイクルでは、連続数が５になるため、サイクルの読み飛ばしが生じることになる。
【０２３５】
すなわち、第１５サイクルでは、図１３に示すデータ順序列Ｑ′の第１５セル内のデータ「０」と、ゼロフラグ順序列Ｚ′の第１５〜第２２セル内のフラグからなる単位ゼロフラグ群「０００００１００」と、ＥＯＢフラグ順序列Ｅ′の第１５セル内のフラグ「１」と、が読み込まれる。これらの数値は、図１４のチャートの第１５サイクルの「入力」欄に記載されているとおりである。
【０２３６】
続くステップＳ３の判定では、ＥＯＢフラグ＝１であるため、ステップＳ４へと進み、シフト量、データカウントアップ量、ゼロカウントアップ量の算出が行われる。図１２の表によれば、今回読み込まれた単位ゼロフラグ群「０００００１００」は、６行目のバリエーション「０００００１ＸＸ」に対応するので、連続数＝５となり、シフト量＝５、データカウントアップ量＝５、ゼロカウントアップ量＝５なる算出が行われる。
【０２３７】
なお、図１３のゼロフラグ順序列Ｚ′の第１５〜第１９セル内の数値「０００００」を囲う太線枠は、これら５個の連続するゼロフラグ「０００００」が、単位ゼロフラグ群の先頭から連続して現れる「０」として認識されることを示し、この太線枠の左端上部に記述された［５］なる記号は、認識される連続数が５であることを示している。別言すれば、図１３のゼロフラグ順序列Ｚ′に記載されている太線枠は、０が２個以上並んで出現する箇所を示しており、［ｘ］の形式で記述されている数値は、０の連続数を示している。
【０２３８】
次のステップＳ５の判定では、読み込まれた単位ゼロフラグ群の先頭ゼロフラグは「０」であるため、ステップＳ６の処理が行われる。すなわち、ゼロカウンタ部５２のカウンタ値（ゼロランレングス値）は、ゼロカウントアップ量５だけ増加して５になり、データカウンタ部５３のカウント値は、データカウントアップ量５だけ増加して１９になる。なお、ステップＳ６の処理では、出力は行われないため、図１４のチャートの第１５サイクルの「出力」欄は空欄になっている。
【０２３９】
このとき、順序列バッファ部４０に対しては、シフト量＝５を指定したシフト指示が与えられるので、順序列バッファ部４０によるシフト処理により、図１３に示す各順序列Ｑ′，Ｚ′，Ｅ′のセルの内容が、５つずつ前方にシフトする。このため、図示されている第１５セル内の数値だけでなく、第１６セル、第１７セル、第１８セル、第１９セル内の数値もシフトにより押し出されて廃棄される。すなわち、第１６〜第１９セル内の数値は読み飛ばされてしまい、第２０セル内の数値が先頭位置にシフトされることになる。
【０２４０】
次の第１６サイクルの処理は、サイクル番号に星印が付されているように、読み飛ばし後のサイクルである。すなわち、第１６サイクルの処理で読み込まれる数値は、各順序列Ｑ′，Ｚ′，Ｅ′の第１６セル内の数値ではなく、第２０セル内の数値ということになる。このため、図１３に示すデータ順序列Ｑ′の第２０セル内のデータ「−２」と、ゼロフラグ順序列Ｚ′の第２０〜第２７セル内のフラグからなる単位ゼロフラグ群「１０００１１１０」と、ＥＯＢフラグ順序列Ｅ′の第１セル内のフラグ「１」と、が読み込まれる。これらの数値は、図１４のチャートの第１６サイクルの「入力」欄に記載されているとおりである。
【０２４１】
続くステップＳ３の判定では、ＥＯＢフラグ＝１であるため、ステップＳ４へと進み、連続数＝０、シフト量＝１、データカウントアップ量＝１、ゼロカウントアップ量＝０なる算出が行われる。そして、ステップＳ５，Ｓ７の判定を経てＳ９の出力処理が行われる。すなわち、出力部５４から、データ「−２」と、ゼロランレングス値「５」と、反転ＥＯＢフラグ「０」とが出力される。これらの数値は、図１４のチャートの第１６サイクルの「出力」欄に記載されているとおりである。
【０２４２】
また、このとき、ゼロカウントクリア指示およびデータカウントアップ指示が与えられるため、ゼロランカウンタ部５２のカウント値は初期値０にクリアされ、データカウンタ部５３のカウント値は、データカウントアップ量１だけ増加して２０になる。一方、順序列バッファ部４０に対しては、シフト量＝１を指定したシフト指示が与えられるので、各順序列Ｑ′，Ｚ′，Ｅ′のセルの内容が、１つずつ繰り上げられる。
【０２４３】
第１７サイクル以降の処理も、これまで述べてきた処理と同様のプロセスが実行されることになるので、個別の説明は省略するが、図１４のチャートにおいて、サイクル番号に星印が付されたサイクルの直前には、それぞれ読み飛ばしが行われることになる。別言すれば、「次のシフト量」欄の数字が２以上になっている場合、その次のサイクルの直前に読み飛ばしが行われることになり、「次のシフト量」欄の数字から１を減じた数に相当するデータが、読み出されずに廃棄されることになる。
【０２４４】
このような読み飛ばしの対象となるセルは、図１３のゼロフラグ順序列に描かれた太線枠によっても示されている。すなわち、この太線枠の先頭にあるセルの位置に対応するデータに対しては読み込みが行われるが、それに後続する太線枠内のセルの位置に対応するデータは読み飛ばされることになる。別言すれば、太線枠内の複数個のセルに対しては、先頭のセルに対応するデータが代表として１回だけ読み込まれ、これに後続する太線枠内のセルに対応するデータについては、読み込みが省略されることになる。各太線枠の左端上部に記述された［５］等の記号に示された数字は、連続数すなわちシフト量を示しており、当該シフト量に応じたシフト処理が行われるため、次回の読み込みは、太線枠が終了した次のセルから行われることになる。
【０２４５】
なお、図１４のチャートを見ればわかるとおり、この例に示すブロック処理は、第３１サイクルで終了している。すなわち、第３１サイクルでは、ステップＳ２において、図１３に示すデータ順序列Ｑ′の第４８セル内のデータ「０」と、ゼロフラグ順序列Ｚ′の第４８〜第５５セル内のフラグからなる単位ゼロフラグ群「００００００００」と、ＥＯＢフラグ順序列Ｅ′の第４８セル内のフラグ「０」と、が読み込まれる。これらの数値は、図１４のチャートの第３１サイクルの「入力」欄に記載されているとおりである。
【０２４６】
続くステップＳ３の判定では、ＥＯＢフラグ＝０であるため、ステップＳ１１へと進み、出力部５４から、データ「０」と、ゼロランレングス値「０」と、反転ＥＯＢフラグ「１」とが、「ブロック最終出力」として出力される。これらの数値は、図１４のチャートの第３１サイクルの「出力」欄に記載されているとおりである。
【０２４７】
かくして、処理対象となるブロック画素配列に関するブロック処理は、全３１サイクルで完了する。従来の方法であれば、全６４サイクルの処理時間が必要であるので、大幅な時間短縮が図られていることになる。全３１サイクルのうち、２１サイクルにおいて出力処理が行われており、ランレングスバッファ部６０には、合計２１組の出力情報、すなわち、１１ビットのデータ、ゼロランレングス値（０〜１５の範囲内の数値を示す４ビットデータ）、反転ＥＯＢフラグ（１ビットのフラグ）という組合わせを２１組並べた情報が書き込まれることになる。
【０２４８】
こうして、ランレングスバッファ部６０に書き込まれた２１組の出力情報は、図３(c) に示すランレングス処理データＲと同等の情報になる。すなわち、図１４に示すチャートの「出力」欄に示されているデータの数値をＤ、ゼロランレングスの数値をＬとして、個々のサイクルごとに、（０×Ｌ），「Ｄ」の順に配置して並べ、（０×０）の項を省略して記述すれば、第１サイクルの出力は「−３」、第２サイクルの出力はなし、第３サイクルの出力は（０×１），「−４」、第４サイクルの出力は「−２」、第５サイクルの出力は「３」、第６サイクルの出力は「８」、第７サイクルの出力はなし、第８サイクルの出力は（０×１），「−４」、... となるので、これらを並べてゆくと、「−３」，（０×１），「−４」，「−２」，「３」，「８」，（０×１），「−４」，... となり、図３(c) に示すランレングス処理データＲと同等の情報になる。
【０２４９】
なお、図３(c) に示すランレングス処理データＲの最後の情報は（０×１７）になっているが、当該情報は、図１４のチャートの第３１サイクルにおける反転ＥＯＢフラグ「１」に対応する情報ということになる。すなわち、第３０サイクルまでの出力情報により、４７個のデータが符号化されていることが認識でき、第３１サイクルにおける反転ＥＯＢフラグ「１」により、以後のデータがすべて「０」であることが示されているので、ブロック内のデータ総数ｎがｎ＝６４であることを鑑みれば、６４−４７＝１７なる演算により、最後の情報として（０×１７）を得ることができる。
【０２５０】
以上の説明により、§４，§５で述べた具体的な画像符号化装置によるランレングス処理が、正しく機能していることが理解できよう。
【０２５１】
＜＜＜  §７．  本発明の変形例  ＞＞＞
これまで、本発明に係る画像符号化装置を、その基本的な実施形態について述べてきたが、ここでは、この基本的な実施形態のいくつかの変形例を述べておくことにする。
【０２５２】
(1)   ランレングス処理の並列化
既に述べたとおり、従来の画像符号化装置では、ゼロランレングス処理がボトルネックとなり、符号化処理全体の高速化を阻む原因になっていた。本発明では、ゼロランレングスの検出を行う前に、予め、量子化データ配列内の各データについて零か否かを示すゼロフラグを作成しておき、このゼロフラグを参照することにより、まだ読み出していないデータについてのランレングス処理を先行して行うようにしている。このため、一部のデータについては読み飛ばしを行って、ランレングス処理のサイクル数を低減することができるので、符号化処理全体の高速化を図ることができるようになる。
【０２５３】
符号化処理全体を更に高速化するには、ランレングス処理を並列化すればよい。図１１に示す流れ図はブロック処理、すなわち、１つのブロックに関してのランレングス処理の手順を示すものであるが、実際には、前処理部１１からは、複数のブロック画素配列Ｂが順番に出力され、個々のブロックに関して、これまで述べた処理が順番に実行されることになる。そこで、ランレングス処理に必要な構成部分を並列化すれば、複数のブロックに関するランレングス処理を並行して同時に実行することができるようになり、符号化処理全体を更に高速化することが可能になる。
【０２５４】
図１５は、このような考え方に基づいて、ランレングス処理を並行して実行できる構成を採用した変形例を示すブロック図である。この変形例は、図４に示す基本的な実施形態の一部を並列化したものであり、全体的な構成は、図４に示す基本的な実施形態と変わりはない。
【０２５５】
すなわち、前処理部１１、ＤＣＴ処理部１２、量子化処理部１３、量子化バッファ部２０、ゼロフラグ生成部２５については、図４に示す符号化装置の対応する構成要素と全く同じである。また、順序列生成部３０については、出力を複数の順序列バッファ部に分岐させる点を除いて、図４に示す順序列生成部３０と同じものであり、ハフマン符号化部７０については、入力を複数のランレングスバッファ部から行う点を除いて図４に示すハフマン符号化部７０と同じものである。
【０２５６】
この図１５に示す変形例の大きな特徴は、図４に示す符号化装置における順序列バッファ部４０、ランレングス処理部５０、ランレングスバッファ部６０をそれぞれ複数Ｋ組並列させて設けた点である。なお、図示の例は、Ｋ＝２として、それぞれ２組ずつ並列させて設けているが、もちろん、Ｋを３以上に設定して、より多数の組を並列させて設けるようにしてもかまわない。
【０２５７】
図１５に示す変形例の場合、２組の順序列バッファ部４０Ａ，４０Ｂ、２組のランレングス処理部５０Ａ，５０Ｂ、２組のランレングスバッファ部６０Ａ，６０Ｂが、それぞれ並列して設けられている。ここで、順序列バッファ部４０Ａ，４０Ｂは、図４に示す順序列バッファ部４０と全く同一の機能をもった構成要素であり、ランレングス処理部５０Ａ，５０Ｂは、図４に示すランレングス処理部５０と全く同一の機能をもった構成要素であり、ランレングスバッファ部６０Ａ，６０Ｂは、図４に示すランレングスバッファ部６０と全く同一の機能をもった構成要素である。
【０２５８】
この変形例の場合、順序列生成部３０は、生成した順序列を格納する際に、処理対象となるブロック画素配列ごとにＫ組の順序列バッファ部を切り替えて格納する機能を有している。図示するＫ＝２の例では、順序列生成部３０は、ブロック単位で各順序列を生成したら、その格納先として、第１の順序列バッファ部４０Ａと第２の順序列バッファ部４０Ｂとを交互に選択するようにすればよい。たとえば、奇数番目のブロックに関する順序列は第１の順序列バッファ部４０Ａに格納し、偶数番目のブロックに関する順序列は第２の順序列バッファ部４０Ｂに格納する、というような切替動作が行われることになる。
【０２５９】
ここで、第ｋ番目（ｋ＝１〜Ｋ）の順序列バッファ部に格納されている順序列に対して、第ｋ番目のランレングス処理部による処理が行われ、第ｋ番目のランレングス処理部からの出力が第ｋ番目のランレングスバッファ部に格納される、という点に関しては、これまで述べてきた基本的な実施形態と全く同様であるので、順序列生成部３０によって生成された個々のブロック単位の順序列に対して、合計Ｋ系統のランレングス処理が並行して行われることになる。たとえば、図示のようにＫ＝２の例では、奇数番目のブロックに関するランレングス処理は、第１の順序列バッファ部４０Ａ、第１のランレングス処理部５０Ａ、第１のランレングスバッファ部６０Ａという第１の系統で実行され、偶数番目のブロックに関するランレングス処理は、第２の順序列バッファ部４０Ｂ、第２のランレングス処理部５０Ｂ、第２のランレングスバッファ部６０Ｂという第２の系統で実行される。
【０２６０】
一方、ハフマン符号化部７０は、Ｋ組のランレングスバッファ部に格納されている情報を順に読み出しながらハフマン符号化処理を行えばよい。図示のようにＫ＝２の例では、第１のランレングスバッファ部６０Ａに格納されている１ブロック分のランレングス処理データと第２のランレングスバッファ部６０Ｂに格納されている１ブロック分のランレングス処理データとを交互に読み出して連結し、ハフマン符号化処理を行えばよい。
【０２６１】
こうして、処理のボトルネックとなっていたランレングス処理を実行する部分を複数の系統に分けて並列処理させれば、符号化処理全体の処理速度を大幅に向上させることができる。
【０２６２】
図１６は、図１５に示す変形例における処理動作を示すタイミングチャートであり、横軸は左から右へ流れる時間軸を示している。ここで、「block1」，「block2」，「block3」，... と記述された矩形は、８行８列の行列からなる単位ブロックについての処理を表している。まず、前処理部１１では、原画像をブロック画素配列Ｂに分割して、これを順次出力する処理が行われ、これに後続するＤＣＴ処理部１２および量子化処理部１３では、それぞれＤＣＴ処理および量子化処理が実行される。
【０２６３】
ここでは、前処理部１１、ＤＣＴ処理部１２、量子化処理部１３の各スループットを、３データ／１サイクルとした場合を前提として、サイクル数を表記してある。１ブロックのデータ数は６４個であるから、６４／３＝約２２となり、前処理、ＤＣＴ処理、量子化処理は、いずれも約２２サイクル必要な処理になるが、ＤＣＴ処理および量子化処理は、６４個のデータがすべて揃わなくても実行可能であるため、図示のとおり、同一のブロックに対する前処理、ＤＣＴ処理、量子化処理は、時間軸上では部分的に重複して実施することができる。
【０２６４】
一方、順序列生成部３０では、全６４個のデータをジグザク順に並び替えて順序列を生成する処理を行う必要があるため、全６４個のデータが揃ってから、処理を開始する必要がある。もっとも、§２で述べたとおり、順序列生成部３０は、単なる配線や論理和演算回路によって構成することができるので、図示の例では、１サイクルで、全６４個のデータの並び替えが行われ、各順序列が生成されている。このように、ランレングス処理の前に、予め、ゼロフラグ順序列Ｚ′およびＥＯＢフラグ順序列Ｅ′を用意しておく構成を採ったとしても、それが原因で生じる処理時間の遅延は無視しうる程度である。
【０２６５】
こうして生成された各順序列に対して、ランレングス処理が行われることになるが、図１５に示す変形例の場合、第１のランレングス処理部５０Ａと第２のランレングス処理部５０Ｂによる並列処理が可能である。そこで、図１６に示すタイミングチャートでは、まず、第１のランレングス処理部５０Ａにより「block1」に対するランレングス処理を実行し、続いて、第２のランレングス処理部５０Ｂにより「block2」に対するランレングス処理を実行し、... というように、交互にランレングス処理を実行している。
【０２６６】
個々のブロックに対するランレングス処理に必要なサイクル数は、当該ブロック内のデータ値によって様々であるが、ここでは便宜上、図１４に例示した実例のケースを代表例として採用し、いずれのブロックについても３１サイクルを要するという仮定でチャートを作成してある。従来の方法では、６４サイクルを要していたので、大幅な時間短縮が図られている。なお、順序列バッファ部４０で行われるシフト処理は、たとえば「バレルシフタ」等の仕組を利用することにより、シフト量にかかわらず１サイクルの時間で完了するため、図１６のタイミングチャートには現われてこない。
【０２６７】
ハフマン符号化部７０は、ランレングス処理が完了したデータに対して順次ハフマン符号化処理を行うことになるが、第１のランレングス処理部５０Ａによる処理結果と、第２のランレングス処理部５０Ｂによる処理結果とを交互に入力しながら処理を進めることができる。このように、ランレングス処理を並列化する変形例を採用すれば、処理速度を大幅に向上させることが可能になる。
【０２６８】
(2)   ＥＯＢフラグを省略した簡略型の実施形態
図４に示す基本的な実施形態では、順序列生成部３０内にＥＯＢフラグ順序列生成部３３を設け、ＥＯＢフラグ順序列Ｅ′を生成し、ランレングス処理部５０が、このＥＯＢフラグ順序列Ｅ′を参照することにより、処理を途中で中止し、必要なサイクル数の低減を図っていた。図１３に示す実例の場合、ＥＯＢフラグは、第４８番目のセルにおいて、ブロック継続状態「１」からブロック終了状態「０」に転じているため、それ以降のセルに関する処理を省略することができる。
【０２６９】
このように、ＥＯＢフラグを利用すると、後半部分のセルに関する処理を省略することができるので、実用上は、これまで述べてきた実施形態どおり、ＥＯＢフラグを利用したランレングス処理を行うのが好ましい。
【０２７０】
ただ、このＥＯＢフラグを利用して途中で処理を中止するという原理と、複数ｍ個のゼロフラグからなる単位ゼロフラグ群を読み込んで、まだ読み出していないデータについてのランレングス処理を先行して行うようにし、一部のデータについては読み飛ばしを行う、という原理とは、直接的に関係するものではないので、前者の原理を採用せず、後者の原理のみを採用する、という変形例も可能である。
【０２７１】
このような変形例では、順序列バッファ部４０内にＥＯＢフラグ順序列Ｅ′を用意する必要はないので、ＥＯＢフラグ順序列生成部３３を省略することができる。また、ランレングス処理部５０についても、ＥＯＢフラグに関連する処理を省略することができる。
【０２７２】
(3)   中間出力処理を省略した簡略型の実施形態
図１１の流れ図において、ステップＳ８で中間出力処理を行う理由は、前述したとおり、ＪＰＥＧ等の規格によってゼロランレングス値に上限が定められている場合にも柔軟に対処できるようにするためである。別言すれば、本発明の原理上は、必ずしもこの中間出力処理を行う必要はない。
【０２７３】
もちろん、ゼロランレングス値に上限が全くないと、ハードウエア構成上、問題が生じることになるが、８行８列のデータからなるブロックごとの処理で生じるゼロランレングス値は、最大でも６４であるので、ステップＳ８の中間出力処理を行わなくても、ブロック処理終了時にゼロランレングスの出力を行うようにすれば、出力されるゼロランレングス値は所定範囲内に抑えられる。したがって、符号化の規格等によりゼロランレングス値に特別な上限が設けられていない場合には、ステップＳ８の中間出力処理を省略してもかまわない。この場合、ステップＳ７の判定処理も不要になり、中間出力イネーブル指示や中間出力補正指示を行うための機能を省略することができる。
【０２７４】
(4)   データカウンタ部を省略した簡略型の実施形態
§１で説明したとおり、ブロック画素配列Ｂに対して、ＤＣＴ処理および量子化処理を施すことにより得られる量子化データ配列Ｑの右下隅付近には、通常、データ「０」が集まることになる。したがって、これに対してジグザグの並び順で並べ替えを行ったデータ順序列Ｑ′の末尾付近にはデータ「０」が集まることになり、通常は、末尾付近のデータやフラグを読み出すうちに、やがて論理値「０」をもったＥＯＢフラグ（「ブロック終了状態」を示すＥＯＢフラグ）が読み出され、図１１の流れ図において、ステップＳ３からステップＳ１１へと分岐することになる。
【０２７５】
すなわち、比較的低い空間周波数成分しか含んでいない画像を符号化対象とする場合には、データ順序列Ｑ′の後半部分には多数のデータ「０」が集まることになるので、ステップＳ１０において、データカウント値が最終値ｎ（この例の場合、ｎ＝６４）に達する前に、ＥＯＢフラグが「ブロック終了状態」を示すことになり、ステップＳ３からステップＳ１１へと分岐してしまうことになる。
【０２７６】
したがって、比較的低い空間周波数成分しか含んでいない画像を符号化対象とするケースでは、図１０に示すデータカウンタ部５３を省略し、図１１の流れ図において、ステップＳ１０を省略して、ステップＳ９から常にステップＳ２へと進むようにしてもかまわない。この場合、もちろん、データカウンタ部５３に対する入出力も省略することになる。
【０２７７】
＜＜＜  §８．  画像符号化方法としての把握  ＞＞＞
これまで、本発明を画像符号化装置として捉え、その構成および動作を説明したが、ここでは、本発明を画像符号化方法として捉え、その処理手順を説明する。
【０２７８】
本発明に係る画像符号化方法は、所定の画素値をもったｎ個の画素をＩ行Ｊ列に並べることによって構成されるブロック画素配列を有する二次元画像を符号化する画像符号化方法であり、その基本手順は、ＤＣＴ処理段階、量子化処理段階、ゼロフラグ生成段階、データ順序列生成段階、ゼロフラグ順序列生成段階、ランレングス処理段階によって構成される。これらの各段階は、たとえば、半導体集積回路上に形成された回路素子によって実行される。
【０２７９】
ＤＣＴ処理段階では、処理対象となるブロック画素配列に対して、離散コサイン変換を行い、得られたｎ個のＤＣＴ係数をＩ行Ｊ列に並べてなるＤＣＴ係数配列を生成する処理が行われ、量子化処理段階では、ＤＣＴ係数配列に対して、所定の量子化テーブルを用いた量子化処理を行い、得られたｎ個の量子化データをＩ行Ｊ列に並べてなる量子化データ配列を生成する処理が行われる。
【０２８０】
ゼロフラグ生成段階では、この量子化データ配列を構成するｎ個の量子化データのそれぞれについて、「０である」場合には「零状態」、「０でない」場合には「非零状態」を示すゼロフラグを生成し、生成したゼロフラグを量子化データ配列に対応するＩ行Ｊ列の配列に収容することによりゼロフラグ配列を生成する処理が行われる。
【０２８１】
データ順序列生成段階では、量子化データ配列について、空間周波数分布に応じた所定の並び順を定め、量子化データ配列内のｎ個のデータをこの並び順に応じて並べることによりデータ順序列を生成して格納する処理が行われ、ゼロフラグ順序列生成段階では、ゼロフラグ配列内のｎ個のゼロフラグを上記並び順に応じて並べることによりゼロフラグ順序列を生成して格納する処理が行われる。
【０２８２】
そして、ランレングス処理段階では、データ順序列の第ｉ番目のデータと、ゼロフラグ順序列の第ｉ番目〜第（ｉ＋ｍ−１）番目までの複数ｍ個のゼロフラグ（但し、ｉ＞ｎ−ｍ＋１の場合は、第ｉ番目〜第ｎ番目までのゼロフラグ）からなる単位ゼロフラグ群と、を読み出す処理を、パラメータｉを１から所定ステップ数ずつ順次増加させながら繰り返し実行し、読み出した単位ゼロフラグ群を参照することによりデータ順序列内において０が連続して出現する数を示すゼロランレングス値をカウントし、読み出したデータ順序列内のデータおよびカウントしたゼロランレングス値を出力する処理が行われる。このとき、カウントしたゼロランレングス値に応じた数だけデータを読み飛ばすことができるように、上記所定ステップ数の設定が行われる。
【０２８３】
なお、ランレングス処理段階では、読み出した単位ゼロフラグ群について、先頭から現れる「零状態」のフラグの連続数を求める連続数算出処理を行い、この連続数が０の場合にはステップ数を１とし、連続数が１以上の場合には当該連続数をステップ数として、パラメータｉをこのステップ数だけ増加させながら読出処理を繰り返し実行すればよい。また、読み出した単位ゼロフラグ群の先頭のゼロフラグが「零状態」のフラグであった場合には、連続数算出処理で求めた連続数を累積加算する処理を行い、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合には、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、累積値を初期値０に設定する処理を行うようにすればよい。
【０２８４】
また、符号化の規格などにより、ランレングス値に上限が設けられているため、中間出力処理を行う必要がある場合には、ランレングス処理段階において、読み出した単位ゼロフラグ群の先頭のゼロフラグが「非零状態」のフラグであった場合に、連続数の累積値が所定の許容値Ｍ以上になっていたときには、０を示すデータと（Ｍ−１）個の０が連続することを示すゼロランレングス値とを組にして出力するとともに、累積値を許容値Ｍだけ減少させる中間出力処理を、累積値が許容値Ｍ未満になるまで繰り返し実行し、その後、データ順序列から読み出したデータと現時点での連続数の累積値からなるゼロランレングス値とを組にして出力するとともに、累積値を初期値０に設定する処理を行うようにすればよい。
【０２８５】
一方、データの総数を計数して、ブロック処理の完了を認識する方法を採用する場合には、ランレングス処理段階において、データ順序列から読み出したもしくは読み飛ばしたデータの総数を計数する処理を行い、計数された総数が処理対象となるブロック画素配列に含まれる画素数ｎに達していた場合には、処理対象となるブロック画素配列に関する処理を完了すればよい。
【０２８６】
また、ＥＯＢフラグを利用して、ブロック処理の中止を行い、より効率的な処理を行うようにすることもできる。この場合は、ゼロフラグ順序列を構成するｎ個のゼロフラグのそれぞれについて、自己を含めて後続するゼロフラグが、すべて「零状態」を示している場合には「ブロック終了状態」、そうでない場合には「ブロック継続状態」を示すＥＯＢフラグを生成し、生成したｎ個のＥＯＢフラグをゼロフラグ順序列の並び順に応じて並べたＥＯＢフラグ順序列を生成して格納するＥＯＢフラグ順序列生成段階を更に行うようにする。そして、ランレングス処理段階では、データ順序列の第ｉ番目のデータおよび単位ゼロフラグ群を読み出す際に、ＥＯＢフラグ順序列の第ｉ番目のＥＯＢフラグも併せて読み出し、読み出したＥＯＢフラグが「ブロック終了状態」を示している場合には、当該ＥＯＢフラグを出力して、処理対象となるブロック画素配列に関する以後の処理を中止すればよい。
【符号の説明】
【０２８７】
１１：前処理部
１２：ＤＣＴ処理部
１３：量子化処理部
２０：量子化バッファ部
２５：ゼロフラグ生成部
２５−１〜２５−６４：論理和演算回路
３０：順序列生成部
３１：データ順序列生成部
３２：ゼロフラグ順序列生成部
３３：ＥＯＢフラグ順序列生成部
３３−１〜３３−６３：論理和演算回路
３３−６４：信号線
４０：順序列バッファ部
４０Ａ：第１の順序列バッファ部
４０Ｂ：第２の順序列バッファ部
５０：ランレングス処理部
５０Ａ：第１のランレングス処理部
５０Ｂ：第２のランレングス処理部
５１：制御部
５２：ゼロランカウンタ部
５３：データカウンタ部
５４：出力部
６０：ランレングスバッファ部
６０Ａ：第１のランレングスバッファ部
６０Ｂ：第２のランレングスバッファ部
７０：ハフマン符号化部
Ｂ：ブロック画素配列
Ｃ：符号化データ
Ｅ′：ＥＯＢフラグ順序列
Ｋ：ＤＣＴ係数配列
Ｐ：画像データ（ＲＧＢ表色系）
Ｐ′：画像データ（ＹＣｂＣｒ表色系）
Ｐ（Ｃｂ）：画像データのＣｂプレーン
Ｐ（Ｃｒ）：画像データのＣｒプレーン
Ｐ（Ｂ）：画像データのＢ色プレーン
Ｐ（Ｇ）：画像データのＧ色プレーン
Ｐ（Ｒ）：画像データのＲ色プレーン
Ｐ（Ｙ）：画像データの輝度プレーン
Ｑ：量子化データ配列
Ｑ′：データ順序列
Ｒ：ランレングス処理データ
Ｓ１〜Ｓ１１：流れ図の各ステップ
Ｚ：ゼロフラグ配列
Ｚ′：ゼロフラグ順序列
【図１】
2014132705.tif 000003
【図２】
2014132705.tif 000004
【図３】
2014132705.tif 000005
【図４】
2014132705.tif 000006
【図５】
2014132705.tif 000007
【図６】
2014132705.tif 000008
【図７】
2014132705.tif 000009
【図８】
2014132705.tif 000010
【図９】
2014132705.tif 000011
【図１０】
2014132705.tif 000012
【図１１】
2014132705.tif 000013
【図１２】
2014132705.tif 000014
【図１３】
2014132705.tif 000015
【図１４】
2014132705.tif 000016
【図１５】
2014132705.tif 000017
【図１６】
2014132705.tif 000018