(第1実施形態)
以下、図1〜図18に従って第1実施形態を説明する。
図1に示すように、撮像装置1は、撮像部11と、画像処理プロセッサ(ISP:Image Signal Processor)12と、入力部13と、メモリ14と、メモリカード15と、表示デバイス16とを有している。
撮像部11は、撮像光学系21と、撮像素子部22と、アナログフロントエンド(AFE:Analog Front End)23とを有している。
撮像光学系21は、例えば、被写体からの光を集光する複数のレンズ(フォーカスレンズなど)や、これらのレンズを透過した光の量を調整する絞り等を含み、光学的な被写体像を撮像素子部22に導く。撮像素子部22は、例えば、ベイヤ配列のカラーフィルタと、撮像素子とを含む。撮像素子は、例えば、CCD(Charge Coupled Device)イメージセンサである。撮像素子は、カラーフィルタを介して入射する光の量に応じた撮像信号(アナログ信号)を出力する。AFE23は、撮像素子部22から出力されるアナログの撮像信号をデジタルの撮像データGDに変換するA/D変換回路を含み、撮像データGDを画像処理プロセッサ12に出力する。また、AFE23は、画像処理プロセッサ12から供給される制御信号を撮像素子部22に出力する。
画像処理プロセッサ12は、撮像部11から出力される撮像データGD(例えば、RGB形式の画像データ(ベイヤデータ))に対して各種画像処理を施す。例えば、画像処理プロセッサ12は、所定の処理段階で画像データをメモリ14に一時的に格納する。すなわち、メモリ14は作業メモリとして機能する。このメモリ14は、例えば、同期式半導体メモリ(SDRAM:Synchronous Dynamic Random Access Memory)などの書き換え可能なメモリである。また、画像処理プロセッサ12は、メモリ14に格納された各種画像処理後の画像データをメモリカード15に格納したり、表示デバイス16に表示したりする。
入力部13は、ユーザにより操作されるシャッタボタンやメニューボタン等の各種スイッチを有している。この各種スイッチは、例えば、写真撮影、撮影条件の設定や表示方式の設定等を行うために使用される。
メモリカード15は、例えば、コンパクトフラッシュ(登録商標)やSDメモリカード(登録商標)などの携帯型メモリカードである。
表示デバイス16としては、例えば、液晶表示装置(LCD:Liquid Crystal Display)や有機EL(Electronic Luminescence)を用いることができる。このような表示デバイス16は、マトリクス状に配列された複数の表示画素を有している。すなわち、表示デバイス16は、第1の配列方向である水平走査方向(水平方向)と、その水平走査方向と平面視で直交する垂直走査方向(垂直方向)とに配列された複数の表示画素を有している。また、表示デバイス16としては、例えば、電子ビューファインダ(EVF:Electronic View Finder)や、外部接続のためのインターフェース(例えば、HDMI(登録商標):High-Definition Multimedia Interface)などを用いることもできる。
次に、画像処理プロセッサ12の内部構成例を説明する。
画像処理プロセッサ12は、CPU(Central Processing Unit)30と、センサインターフェース(I/F)31と、入力画像補正部32と、色処理部33と、画像処理部34と、コーデック部35と、メモリカードI/F36と、表示I/F37と、DMA調停部38と、メモリコントローラ39と、Q値設定部40とを有している。
CPU30は、画像処理プロセッサ12全体を統括制御する。CPU30は、処理に必要な情報の各処理部への設定及びデータの書き込み/読み出し制御等を行う。CPU30は、撮像素子部22のリセットを指令する制御信号を、AFE23を通じて撮像素子部22に出力する。CPU30は、入力部13の操作に応じて動作モードや各処理において必要な情報(パラメータ)を設定する。
センサI/F31、入力画像補正部32、色処理部33、画像処理部34、コーデック部35、メモリカードI/F36、表示I/F37及びDMA調停部38は、内部バスBUSを介して互いに接続されている。DMA調停部38は、メモリコントローラ39を介してメモリ14と接続されている。
センサI/F31は、撮像部11から出力される撮像データGD(RGB形式の画像データ)を受け取り、その画像データGDをメモリ14に格納する。
入力画像補正部32は、メモリ14から読み出した画像データGDに対して補正処理を施す。そして、入力画像補正部32は、補正後の画像データをメモリ14に格納する。画像データGDに対する補正は、例えば、明るさやコントラストを調整するガンマ補正処理、輝度むらを補正するシェーディング補正処理等である。
色処理部33は、例えば、メモリ14から読み出した補正後の画像データに対して、色空間変換処理を施す。そして、色処理部33は、色空間変換後の画像データをメモリ14に格納するとともに、色空間変換後の画像データをQ値設定部40に出力する。なお、色空間変換処理は、RGB形式の画像データをYCbCr形式の画像データに変換する処理である。
画像処理部34は、メモリ14から読み出した色空間変換後の画像データに対して、色処理部33における処理以外の他の画像処理を施す1つ又は複数の処理部である。画像処理部34は、画像処理後の画像データをメモリ14に格納する。画像処理部34が行う処理は、例えば、画素数を増減する解像度変換処理、画像の輪郭(エッジ)を強調するエッジ強調処理、画像データに含まれるノイズを除去するノイズ除去処理等が含まれる。
コーデック部35は、メモリ14に格納された画像処理後の画像データを読み出し、その画像データを所定の方式(ここでは、JPEG(Joint Photographic Experts Group)方式)により符号化する。具体的には、コーデック部35は、色空間変換処理後の画像データ(又は、画像処理部34による画像処理後の画像データ)に対して、Q値設定部40で設定されたQ値(量子化テーブル)を用いてJPEGによる符号化処理を施す。そして、コーデック部35は、符号化後の画像データ(符号化データ)をメモリ14に格納する。
メモリカードI/F36は、撮像装置1に装着されるメモリカード15と接続される。メモリカードI/F36は、メモリ14に格納されたデータ(例えば、符号化データ)をメモリカード15に格納する。
表示I/F37には、当該撮像装置1に設けられた表示デバイス16が接続されている。表示デバイス16は、撮像装置1の駆動源であるバッテリの残量、撮影モード、撮影フレーム、記憶された画像データの表示等に用いられる。例えば、表示I/F37は、メモリ14に格納されたデータを読み出し、そのデータに基づいて生成した表示データを表示デバイス16に出力する。
センサI/F31と、入力画像補正部32と、色処理部33と、画像処理部34と、コーデック部35と、メモリカードI/F36と、表示I/F37とは、ダイレクトメモリアクセスコントローラ(DMAC:Direct Memory Access Controller)31a〜37aをそれぞれ有している。DMAC31a〜37aは、対応する処理部31〜37が行う処理に応じたアクセス要求を出力する。例えば、センサI/F31は、撮像部11から供給される画像データGDを、メモリ14に格納する。このため、センサI/F31のDMAC31aは、書き込み要求(ライトリクエスト)を出力する。コーデック部35は、メモリ14から画像処理後の画像データを読み出すとともに、符号化後の画像データをメモリ14に格納する。このため、コーデック部35のDMAC35aは、読み出し要求(リードリクエスト)及びライトリクエストを出力する。
DMA調停部38は、各処理部31〜37のDMAC31a〜37aから出力され競合する要求(リクエスト)を、例えば、各処理部31〜37に対応して設定された優先度に従って要求を調停し、1つの処理部に対するアクセスを許可する。アクセスが許可された処理部は、メモリ14に対するアクセスのための制御信号を出力する。例えば読み出し要求の場合、メモリコントローラ39は、制御信号に応じてメモリ14からデータを読み出し、その読み出したデータを要求元の処理部に出力する。また、メモリコントローラ39は、書き込み要求と、その要求元の処理部から出力されるデータをメモリ14に出力し、メモリ14はそのデータを記憶する。
Q値設定部40は、色処理部33から入力する色空間変換後の画像データをソース画像SDとして入力し、そのソース画像SDに基づいて、コーデック部35で用いるQ値(量子化テーブル)を設定する。例えば、Q値設定部40は、ソース画像SDの近接画素同士の画素値の差分(例えば、差分絶対値和)に基づいて、ソース画像SD内の位置毎の高周波成分の度合を予測し、その予測結果からQ値を設定する。そして、Q値設定部40は、設定したQ値をコーデック部35に出力する。
次に、センサI/F31、入力画像補正部32、色処理部33、及びコーデック部35における処理の概要を説明する。
図2に示すステップS1において、まず、撮像部11から出力される撮像データGD(RGB形式の画像データ)がセンサI/F31で受信される。続いて、入力画像補正部32において、センサI/F31で受信された撮像データGDに対して各種の補正処理が施される(ステップS2)。次いで、色処理部33において、上記補正処理後のRGB形式の画像データがYCbCr形式の画像データに変換される(ステップS3)。
このとき、Q値設定部40は、色処理部33による色空間変換処理と並行して、色処理部33から出力されるYCbCr形式の画像データをソース画像SDとして取得する(ステップS4)。
図3に示すように、ソース画像SDは、複数の画素(ここでは、M画素×N画素)が水平方向(行方向:図中の左右方向)及び垂直方向(列方向:図中の上下方向)に2次元状に配列された画像データである。すなわち、ソース画像SDは、複数の画素が2次元の行列状に配列された画像データである。詳述すると、ソース画像SDは、例えば、表示デバイス16の表示画素に対応するM本、ここでは8m本(mは整数)のラインデータL1〜LMを含む。また、各ラインデータL1〜LMは、N個、ここでは8n個(nは整数)の画素データ(画素)を含む。
図4に示すように、上記ソース画像SDは、図中の矢印で示したラスタ順に色処理部33からQ値設定部40に入力される。すなわち、まず、ソース画像SDのラインデータL1におけるN個の画素データが図中左端の画素データから順にQ値設定部40に入力され、続いて、ラインデータL2におけるN個の画素データが図中左端の画素データから順にQ値設定部40に入力される。
続いて、Q値設定部40は、取得したソース画像SDにおける近接画素間の差分を算出する(ステップS5)。例えば、ソース画像SDを所定サイズのブロック(例えば、I×J画素を有するブロック)単位で区切って、そのブロック単位で上記近接画素間の差分を累積する。本例では、図3に示すように、ソース画像SDを最小符号化単位(Minimum Coded Unit:MCU)、つまり8画素×8画素のブロックMB単位で区切って、そのブロックMB単位で上記近接画素間の差分を累積する。そして、種々の段階において、上記近接画素間の差分を、予め設定した閾値と比較する。この方法について、ソース画像SDにおける左上のブロックMBに着目して説明する。なお、説明の便宜上、上記左上のブロックMBを「ブロックMB1」と称する。
まず、図5(a)に示すように、ブロックMB1内の左上の画素、つまり1行1列目の画素を注目画素A1に設定し、その注目画素A1と該注目画素A1の近接画素B1,C1,D1との間の差分を算出する(ステップS5、第1ステップ)。例えば、注目画素A1と近接画素B1,C1,D1との差分絶対値和(SAD値:Sum of Absolute Difference)を算出する。具体的には、2つの画素間(ここでは、注目画素A1と近接画素B1との間、注目画素A1と近接画素C1との間、及び注目画素A1と近接画素D1との間)の各画素値の差分の絶対値を求め、それら差分絶対値の総和を算出する。ここで、本例の近接画素B1,C1,D1は、注目画素A1に隣接する隣接画素ではなく、注目画素A1から1画素離れた画素である。すなわち、図5(a)における近接画素B1はブロックMB1内の1行3列目の画素、近接画素C1はブロックMB1内の3行1列目の画素、近接画素D1はブロックMB1内の3行3列目の画素である。
続いて、Q値設定部40は、注目画素A1と近接画素B1,C1,D1との間の差分絶対値和(以下、SAD値ともいう)と閾値Th1とを比較する(ステップS6)。SAD値と閾値Th1との大小関係を示す比較結果CM1は、水平8画素単位の累積値AM1に累積される(ステップS7)。ここで、閾値Th1は、注目画素A1と近接画素B1,C1,D1とを含む範囲内の高周波成分の度合を判定するための値(例えば、注目画素A1と近接画素B1,C1,D1との間に高周波成分が多く含まれているか否かを判定するための値)であり、例えば、予め実行されたシミュレーション等の結果に基づいて設定される。例えば、閾値Th1は、予め実行されたシミュレーション等に基づき算出された、注目画素A1と近接画素B1,C1,D1との差分の度合と符号化データのサイズとの相関情報に基づいて設定される。
次に、図5(b)に示すように、注目画素A1をブロックMB1内で水平方向に1画素シフト(移動)させる。そして、Q値設定部40は、シフトさせた注目画素A1(ブロックMB1内の1行2列目の画素)とその注目画素A1の近接画素B1,C1,D1との間のSAD値を算出する(ステップS5)。このとき、注目画素A1のシフト動作と併せて、近接画素B1,C1,D1もブロックMB1内で水平方向に1画素シフトされる。このため、近接画素B1はブロックMB1内の1行4列目の画素、近接画素C1はブロックMB1内の3行2列目の画素、近接画素D1はブロックMB1内の3行4列目の画素となる。続いて、Q値設定部40は、算出したSAD値と閾値Th1とを比較する(ステップS6)。そして、Q値設定部40は、算出した比較結果CM1を上記累積値AM1(ここでは、注目画素A1がブロックMB1内の1行1列目の画素である場合の比較結果CM1)に累積する(ステップS7)。
同様に、注目画素A1をブロックMB1内で水平方向に1画素ずつシフトさせる毎にSAD値を算出し(第2ステップ)、そのSAD値と閾値Th1との比較結果CM1を累積値AM1に累積する(ステップS5〜S7、第3ステップ)。そして、図5(c)に示すように、注目画素A1がブロックMB1内の1行6列目の画素になった場合には、その注目画素A1における比較結果CM1を累積値AM1に累積した後に、その累積値AM1を閾値Th2と比較する(ステップS8、第4ステップ)。このときの累積値AM1は、注目画素A1をブロックMB1内の1行1列目の画素から1行6列目の画素までシフトさせた場合の比較結果CM1(閾値Th1との大小比較結果)を累積した値である。ここで、注目画素A1を1行6列目までシフトさせると、ブロックMB1内の1行目の水平8画素(1行1列目から1行8列目までの8画素)が注目画素A1及び近接画素B1の少なくとも一方に利用されたことになる。このため、閾値Th2と比較される累積値AM1は、ブロックMB1内の1行目における水平8画素の画素値に対応する差分(SAD値)と閾値Th1との大小比較結果を反映した値となる。したがって、上記ステップS8では、水平8画素分の累積値AM1が閾値Th2(つまり、水平8画素に対応する閾値)と比較されることになる。そして、Q値設定部40は、累積値AM1と閾値Th2との大小関係を示す比較結果CM2を累積値AM2に累積する(ステップS9、第5ステップ)。これにより、SAD値と閾値Th1との比較結果CM1(例えば、1ビットデータ)を6個累積した累積値AM1(例えば、1バイトデータ)が閾値Th2と比較されて比較結果CM2(例えば、1ビットデータ)に圧縮され、その比較結果CM2が累積値AM2に累積される。
ここで、上記閾値Th2は、ブロックMB内の水平1ライン(ここでは、水平8画素)における高周波成分の度合を判定するための値(例えば、水平8画素に高周波成分が多く含まれているか否かを判定するための値)であり、例えば、予め実行されたシミュレーション等の結果に基づいて設定される。例えば、閾値Th2は、予め実行されたシミュレーション等に基づき算出された、水平8画素における累積値AM1の大きさと符号化データのサイズとの相関情報に基づいて設定される。
次に、図5(d)に示すように、注目画素A1を水平方向に3画素分だけシフトさせる(第6ステップ)。すなわち、注目画素A1をブロックMB1内の6列目の画素までシフトさせた後は、残りの水平2画素(つまり、ブロックMB1内の7列目及び8列目の画素)をスキップし、注目画素A1をブロックMB1の右隣のブロックMBの1行1列目の画素までシフトさせる。換言すると、本例では、ブロックMB1(ブロックMB)内の7列目の画素と8列目の画素とを注目画素A1に設定しない。
上記右隣のブロックMBの1行1列目の画素に注目画素A1が設定されると、そのブロックMBについても上記ステップS4〜S9の処理が実施される。その後も同様に、ソース画像SDの水平1ライン分のブロックMBについてステップS4〜S9の処理が実施される(第7ステップ)。
次に、図6(a)に示すように、ソース画像SDの1行目(つまり、ラインデータL1)における演算処理が終了すると、注目画素A1を垂直方向に1行シフトさせ、さらに左端までシフトさせる。これにより、注目画素A1がブロックMB1の2行1列目の画素に設定される。すると、そのブロックMB1の2行目の画素に対して上記ステップS4〜S9の処理が実施される(第8ステップ)。このとき、ステップS9の処理まで実施されると、ブロックMB1の2行目の水平8画素に対応する累積値AM1が算出され、その累積値AM1と閾値Th2との比較結果CM2が算出される。そして、算出された2行目における比較結果CM2が上記累積値AM2(ここでは、ブロックMB1の1行目における比較結果CM2)に累積される。
その後も同様に、注目画素A1が垂直方向に1行ずつシフトされ、ブロックMB1の3行目における比較結果CM2、4行目における比較結果CM2、及び5行目における比較結果CM2が累積値AM2に順次累積される。そして、図6(b)に示すように、注目画素A1がブロックMB1内の6行6列目の画素に設定された後に、ブロックMB1の6行目における比較結果CM2が累積値AM2に累積されると、その累積値AM2が閾値Th3と比較される(ステップS10、第9ステップ)。このときの累積値AM2は、注目画素A1をブロックMB1内の1行1列目の画素から6行6列目の画素までシフトさせた場合の比較結果CM2(累積値AM1と閾値Th2との大小比較結果)を累積した値である。ここで、注目画素A1を6行6列目の画素までシフトさせると、ブロックMB1内の全ての画素(1行1列目から8行8列目までの64画素)が注目画素A1及び近接画素B1,C1,D1の少なくとも一つに利用されたことになる。このため、閾値Th3と比較される累積値AM2は、ブロックMB1内の全ての画素の画素値に対応する差分(SAD値)を反映した値となる。したがって、上記ステップS10では、1つのブロックMB分の累積値AM2が閾値Th3(つまり、8×8画素のブロックMBに対応する閾値)と比較されたことになる。そして、Q値設定部40は、累積値AM2と閾値Th3との大小関係を示す比較結果CM3を累積値AM3に累積する(ステップS11)。これにより、累積値AM1と閾値Th2との比較結果CM2(例えば、1ビットデータ)を6個累積した累積値AM2(例えば、1バイトデータ)が閾値Th3と比較されて比較結果CM3(例えば、1ビットデータ)に圧縮され、その比較結果CM3が累積値AM3に累積される。
ここで、上記閾値Th3は、1つのブロックMB内における高周波成分の度合を判定するための値(例えば、1つのブロックMBに高周波成分が多く含まれているか否かを判定するための値)であり、例えば、予め実行されたシミュレーション等の結果に基づいて設定される。例えば、閾値Th3は、予め実行されたシミュレーション等に基づき算出された、1つのブロックMBにおける累積値AM2の大きさと符号化データのサイズとの相関情報に基づいて設定される。
続いて、上述したステップS4〜S11の処理により、上記ブロックMB1と同じライン上(ここでは、ラインデータL1〜L8)に存在する全てのブロックMBにおける比較結果CM3が算出される。そして、n個の比較結果CM3が累積値AM3に累積されると、その累積値AM3が閾値Th4と比較される(ステップS12)。このときの累積値AM3は、ソース画像SDの垂直8ラインに存在するn個のブロックMBにおける比較結果CM3(累積値AM2と閾値Th3との大小比較結果)を累積した値である。このため、閾値Th4と比較される累積値AM3は、ソース画像SDの垂直8ラインに存在する全ての画素の画素値に対応する差分(SAD値)を反映した値となる。したがって、上記ステップS12では、垂直8ライン分(n個のブロックMB分)の累積値AM3が閾値Th4(つまり、垂直8ラインの画素に対応する閾値)と比較されたことになる。そして、Q値設定部40は、累積値AM3と閾値Th4との大小関係を示す比較結果CM4を累積値AM4に累積する(ステップS13)。これにより、累積値AM2と閾値Th3との比較結果CM3(例えば、1ビットデータ)をn個累積した累積値AM3(例えば、n/8バイトデータ)が閾値Th4と比較されて比較結果CM4(例えば、1ビットデータ)に圧縮され、その比較結果CM4が累積値AM4に累積される。
ここで、上記閾値Th4は、n個のブロックMB内における高周波成分の度合を判定するための値(例えば、n個のブロックMBに高周波成分が多く含まれているか否かを判定するための値)であり、例えば、予め実行されたシミュレーション等の結果に基づいて設定される。例えば、閾値Th4は、予め実行されたシミュレーション等に基づき算出された、n個のブロックMBにおける累積値AM3の大きさと符号化データのサイズとの相関情報に基づいて設定される。
このようにソース画像SDにおけるラインデータL1〜L8の画素に対する処理が終了すると、図6(c)に示すように、注目画素A1を垂直方向に3行分だけシフトさせ、さらに左端にシフトさせる(第10ステップ)。これにより、ソース画像SD内において、注目画素A1が9行1列目の画素、つまり上記ブロックMB1の図中下のブロックMB2の1行1列目の画素に設定される。すると、ブロックMB2とそのブロックMB2と同じライン(ここでは、ラインデータL9〜L16)上に存在するブロックMBに対してステップS4〜S13の処理が実施される。このとき、ステップS13の処理まで実施されると、ラインデータL9〜L16上に存在するn個のブロックMBにおける比較結果CM3が累積値AM3に累積され、その累積値AM3と閾値Th4との比較結果CM4が算出される。そして、算出された比較結果CM4が、上記累積値AM4(ここでは、ラインデータL1〜L8における比較結果CM4)に累積される。
その後も同様にステップS4〜S13の処理を繰り返し実施し、垂直8ライン単位で比較結果CM4を算出し、それら比較結果CM4を累積値AM4に順次累積する。そして、m個の比較結果CM4が累積値AM4に累積されると、その累積値AM4が閾値Th5と比較される(ステップS14)。このときの累積値AM4は、ソース画像SD内の全てのブロックMBにおける比較結果CM4を累積した値である。すなわち、閾値Th5と比較される累積値AM4は、ソース画像SD内の全ての画素の画素値に対応する差分(SAD値)を反映した値となる。したがって、ステップS14では、ソース画像SD単位、つまりフレームデータ単位の累積値AM4が閾値Th5(つまり、M×N画素のフレームデータに対応する閾値)と比較されたことになる。そして、Q値設定部40は、累積値AM4と閾値Th5との大小関係を示す比較結果CM5を算出する。これにより、累積値AM3と閾値Th4との比較結果CM4(例えば、1ビットデータ)をm個累積した累積値AM4(例えば、n×m/64バイトデータ)が閾値Th5と比較されて比較結果CM5(例えば、1ビットデータ)に圧縮される。
ここで、上記閾値Th5は、ソース画像SD全体における高周波成分の度合を判定するための値(例えば、ソース画像SD全体に高周波成分が多く含まれているか否かを判定するための値)であり、例えば、予め実行されたシミュレーション等の結果に基づいて設定される。例えば、閾値Th5は、予め実行されたシミュレーション等に基づき算出された、フレームデータ単位の累積値AM4の大きさと符号化データのサイズとの相関情報に基づいて設定される。
次に、Q値設定部40は、比較結果CM5に基づいて、Q値(量子化テーブル)を設定する(ステップS15)。例えば、Q値設定部40は、フレームデータ単位の累積値AM4が閾値Th5よりも小さい場合には、予め設定している初期値をQ値に設定する。また、Q値設定部40は、累積値AM4が閾値Th5よりも大きい場合には、Q値を上記初期値よりも小さな値に変更(設定)する。
次に、ステップS14において、コーデック部35は、色空間変換処理後のYCbCr形式の画像データを、上記設定されたQ値を用いてJPEG方式により符号化する。
ここで、図7(a)に示すように、上記ステップS4〜S15の処理、つまりQ値設定部40によるソース画像SDの取得処理及びQ値設定処理は、色処理部33による色空間変換処理と並行して実施される。このため、色処理部33からのYCbCr形式の画像データの出力が完了した後、短時間でQ値を設定することができ、コーデック部35による符号化処理を迅速に開始することができる。したがって、図7(a)及び図7(b)に示すように、仮の符号化処理を実施する従来技術と比べて、符号化処理にかかる時間を短縮することができる。例えば、図7(b)に示すように、従来技術では、色処理部33による色空間変換処理が完了した後に、ソース画像から複数画素を間引いた画像データに対して仮の符号化処理が1回又は複数回(図示の例では、2回)実施されてQ値が最適化される。その後、ソース画像に対して、最適化したQ値を用いて符号化処理が実施される。このため、仮の符号化処理を実施する分だけ、ソース画像に対する実際の符号化処理を開始するタイミングが遅延し、その遅延分だけ符号化処理にかかる時間が増大する。
そして、ステップS16における符号化処理が終了すると、符号化データがメモリ14や表示デバイス16等に転送される(ステップS17)。
次に、図8及び図9に従ってQ値設定部40の内部構成例について説明する。
図8に示すように、Q値設定部40には、色処理部33のバッファ33bからYCbCr形式の画像データがソース画像SDとして入力されるとともに、色処理部33のカウンタ33cからカウント値Hs,Vsが入力される。カウント値Hs,Vsは、色処理部33からラスタ順に入力される画素データのソース画像SDにおける位置情報を示している。具体的には、カウント値Hsは画素データのソース画像SDにおける水平方向の位置情報を示し、カウント値Vsは画素データのソース画像SDにおける垂直方向の位置情報を示している。
カウント値Hs,Vsは、カウンタ41に入力されるとともに、ステートマシン42に入力される。カウンタ41は、カウント値Hs,Vsに基づいて、ブロックMB単位の管理を行うためのカウント値MHs,MVsを生成する。例えば、カウンタ41は、カウント値Hsに基づいて、水平8画素単位でカウント動作を繰り返してカウント値MHsを生成する。すなわち、カウンタ41は、カウント値Hsを入力する度にカウント値MHsを1→2→3→4→5→6→7→8とカウントアップし、カウント値Hsを8回入力する度にカウント値MHsを1にリセットする。また、カウンタ41は、カウント値Vsに基づいて、垂直8ライン単位でカウント動作を繰り返してカウント値MVsを生成する。すなわち、カウンタ41は、カウント値Vsを入力する度にカウント値MVsを1→2→3→4→5→6→7→8とカウントアップし、カウント値Vsを8回入力する度にカウント値MVsを1にリセットする。換言すると、カウント値MHs,MVsは、色処理部33から入力される画素データのブロックMB毎における位置情報を示した値である。そして、カウンタ41は、生成したカウント値MHs,MVsをステートマシン42に出力する。
ステートマシン42は、カウント値Hs,Vs,MHs,MVsに基づいて、現在のステートに応じた制御信号SMを生成する。ステートマシン42は、所定の遷移条件を満たしたときに、所望のステートに遷移する。
ここで、ステートマシン42のステート遷移(状態遷移)について説明する。
図9に示すように、ステートマシン42は、ステートST1〜ステートST8に遷移する。ステートST1は初期状態である。ステートマシン42は、当該Q値設定部40によるQ値設定処理が開始されると、ステートST1からステートST2に遷移する。
ステートマシン42は、ステートST2のときに、「1」のカウント値Hsが入力されるとステートST3に遷移する。すなわち、ステートマシン42は、ステートST2のときに、ソース画像SDにおける各ラインデータL1〜LMの先頭(左端)の画素データがQ値設定部40に入力されるとステートST3に遷移する。
ステートマシン42は、ステートST3のときに、「7」のカウント値MHsが入力されるとステートST4に遷移する。すなわち、ステートマシン42は、ステートST3のときに、各ブロックMBにおける水平7画素目の画素データが入力されるとステートST4に遷移する。
ステートマシン42は、ステートST4のときに、「1」のカウント値MHsが入力されると、ステートST3に遷移する。すなわち、ステートマシン42は、各ブロックMBの水平8画素分の処理が終了する度に、ステートST4からステートST3に戻る。一方、ステートマシン42は、ステートST4のときに、ブランク期間(データ未処理期間)を示す値(ここでは、「B」とする)のカウント値Hsが入力されると、ステートST2に遷移する。すなわち、ステートマシン42は、ソース画像SDの水平1ライン分の処理が終了する度に、ステートST4からステートST2に戻る。
ステートマシン42は、ステートST4のときに、「6」のカウント値MVsが入力され、且つ、「B」のカウント値Hsが入力されると、ステートST5に遷移する。すなわち、ステートマシン42は、ソース画像SDの垂直6ライン分の処理が終了する度に、ステートST4からステートST5に遷移する。
ステートマシン42は、ステートST5のときに、「8」のカウント値MVsが入力され、且つ、「B」のカウント値Hsが入力されると、ステートST6に遷移する。すなわち、ステートマシン42は、ソース画像SDの垂直8ライン分の処理が終了する度に、ステートST5からステートST6に遷移する。
ステートマシン42は、ステートST6に遷移した後、カウント値Vsがソース画像SDの最終のラインデータLMを示す「M」以外である場合には、所定の処理(例えば、累積値AM3と閾値Th4との比較結果CM4を算出する処理)を終了後にステートST7に遷移する。また、ステートマシン42は、ステートST7に遷移した後に所定の処理(例えば、比較結果CM4を累積値AM4に累積する処理)を終了すると、ステートST2に遷移する。
その一方で、ステートマシン42は、ステートST6のときに、「M」のカウント値Vsが入力されている場合には、所定の処理を終了後にステートST8に遷移する。すなわち、ステートマシン42は、ソース画像SDの全画素分の処理が終了するまでは、ステートST6からステートST7を介してステートST2に戻り、ソース画像SDの全画素分の処理が終了した場合にステートST6からステートST8に遷移する。
ステートマシン42は、ステートST8に遷移した後に、所定の処理(例えば、累積値AM4と閾値Th5との比較結果CM5を算出する処理)を終了すると、ステートST1に遷移する。
そして、ステートマシン42は、現在のステート(すなわち、ステートST1〜ステートST8のいずれか1つのステート)に応じた制御信号SMを生成する。なお、制御信号SMは、複数の制御信号をまとめて総称したものである。
図8に示すように、ソース画像SDは、バッファ43に格納される。バッファ43は、例えば、ソース画像SDの垂直3ライン分の画素データを保持することが可能な記憶容量を有している。バッファ43は、保持した画素データの中から、注目画素A1と近接画素B1,C1,D1とを、演算部44に順次出力する。
演算部44は、差分演算器45と、比較器46とを有している。差分演算器45は、注目画素A1と近接画素B1,C1,D1との差分(ここでは、SAD値)を算出し、そのSAD値を比較器46に出力する。比較器46は、SAD値と閾値Th1とを比較し、SAD値と閾値Th1との大小関係を示す比較結果CM1を算出する。例えば、SAD値が閾値Th1よりも小さい場合には比較結果CM1が「0」となり、SAD値が閾値Th1以上の場合には比較結果CM1が「1」となる。
比較結果CM1は、マルチプレクサ47に供給される。マルチプレクサ47には、演算部60から比較結果CM(例えば、比較結果CM2,CM3,CM4)が供給される。そして、マルチプレクサ47は、ステートマシン42からの制御信号SMに基づいて、比較結果CM1及び比較結果CMのいずれか一方を選択し、選択した値を入力値E1として演算部60に出力する。
マルチプレクサ48には、メモリ51〜54から累積値AM1〜AM4が供給される。このマルチプレクサ48は、制御信号SMに基づいて、累積値AM1〜AM4のうちの1つを選択し、選択した値を入力値E2として演算部60に出力する。
演算部60は、加算器61と、比較器62とを有している。加算器61は、マルチプレクサ47から入力される入力値E1と、マルチプレクサ48から入力される入力値E2とを累積加算し、累積値AMを比較器62に出力する。例えば、加算器61は、比較結果CM1(入力値E1)を累積値AM1(入力値E2)に累積加算し、累積加算後の累積値AM1(累積値AM)を比較器62に出力する。
比較器62には、マルチプレクサ49から閾値Thが供給されるとともに、ステートマシン42から制御信号SMが供給される。マルチプレクサ49には、複数(ここでは、4つ)の閾値Th2〜Th5が供給されるとともに、ステートマシン42から制御信号SMが供給される。そして、マルチプレクサ49は、制御信号SMに基づいて、閾値Th2〜Th5のうちの1つを選択し、選択した閾値を閾値Thとして比較器62に出力する。
そして、比較器62は、加算器61からの累積値AMとマルチプレクサ49からの閾値Thとを比較し、累積値AMと閾値Thとの大小関係を示す比較結果CMを算出する。例えば、比較器62は、累積値AM1(累積値AM)と閾値Th2(閾値Th)とを比較し、累積値AM1と閾値Th2との大小関係を示す比較結果CM2(比較結果CM)を算出する。
アンド回路55〜58には、加算器61からの累積値AMが供給されるとともに、制御信号SMが供給される。アンド回路55の出力端子はメモリ51に接続され、アンド回路56の出力端子はメモリ52に接続され、アンド回路57の出力端子はメモリ53に接続され、アンド回路58の出力端子はメモリ54に接続されている。アンド回路55〜58は、Lレベルの制御信号SMに応答してLレベル固定の出力信号をメモリ51〜54にそれぞれ出力する。これにより、メモリ51〜54に格納された累積値AM1〜AM4は「0」にリセットされる。一方、アンド回路55〜58は、Hレベルの制御信号SMに応答して、加算器61からの累積値AMを、接続されるメモリ51〜54に格納する。
メモリ51には、SAD値と閾値Th1との大小関係を示す比較結果CM1を累積加算した累積値AM1が格納される。
メモリ52には、累積値AM1と閾値Th2との大小関係を示す比較結果CM2を累積加算した累積値AM2が格納される。メモリ52は、例えば、n個の累積値AM2を格納可能な記憶容量を有している。本例のメモリ52は、n×m個(つまり、ソース画像SD内の全てのブロックMBの個数)の累積値AM2を格納可能な記憶容量を有している。
図10に示すように、本例のメモリ52は、X軸方向(水平方向)とY軸方向(垂直方向)とに2次元状に配列されたデータ記憶領域を有する配列メモリである。詳述すると、メモリ52は、X軸方向のn個(つまり、ソース画像SDの水平方向に並ぶブロックMBの個数)の記憶領域と、Y軸方向のm個(つまり、ソース画像SDの垂直方向に並ぶブロックMBの個数)の記憶領域とが2次元状に配列された、n×m個の記憶領域を有している。すなわち、メモリ52は、座標(1,1)の記憶領域から座標(n,m)の記憶領域までのn×m個の記憶領域を有している。
このようなメモリ52には、各ブロックMBの累積値AM2が2次元的に格納される。具体的には、累積値AM2は、メモリ52(配列メモリ)の対応する位置、つまり当該累積値AM2の演算対象となるブロックMBのソース画像SD上の位置に対応する座標位置の記憶領域に記憶される。例えば、ソース画像SDの左上のブロックMBに対応する累積値AM2が算出された場合には、その算出された累積値AM2が、メモリ52の座標(1,1)の記憶領域に格納される。同様に、ソース画像SDの右下のブロックMBに対応する累積値AM2が算出された場合には、その算出された累積値AM2が、メモリ52の座標(n,m)の記憶領域に格納される。
メモリ53には、累積値AM2と閾値Th3との大小関係を示す比較結果CM3を累積加算した累積値AM3が格納される。メモリ53は、例えば、n個(つまり、ソース画像SDの水平方向に並ぶブロックMBの個数)の累積値AM3を格納可能な記憶容量を有している。
メモリ54には、累積値AM3と閾値Th4との大小関係を示す比較結果CM4を累積加算した累積値AM4が格納される。メモリ54は、例えば、m個の比較結果CM4が累積加算された累積値AM4を格納可能な記憶容量を有している。
マルチプレクサ50には、ソース画像SD全体の高周波成分の度合を示す累積値AM4と閾値Th5との比較結果CM5が入力される。また、マルチプレクサ50には、2つの設定値Q1,Q2が入力される。マルチプレクサ50は、比較結果CM5に基づいて、2つの設定値Q1,Q2のうちの1つの設定値を選択し、選択した設定値をQ値としてコーデック部35に出力する。
次に、Q値設定部40の動作について説明する。以下では、説明の簡略化のために、比較結果CM1,CM2,CM3,CM4が1ビットデータである場合について説明する。
まず、ソース画像SDのラインデータL1における演算処理について説明する。ここでも、説明の便宜上、ソース画像SDの左上のブロックMBを「ブロックMB1」と称して説明する。
図11に示すように、時刻t1においてQ値設定処理が開始されると、ステートマシン42がステートST1からステートST2に遷移する。その後、時刻t2において、ソース画像SDの左上(1行1列目)の画素データが注目画素A1として差分演算器45に入力される。すると、図5(a)に示した注目画素A1と近接画素B1,C1,D1とのSAD値が差分演算器45で算出され、そのSAD値と閾値Th1とが比較され比較結果CM1が生成される。このとき、カウント値Hs,Vs,MHs,MVsが全て「1」となり、ステートマシン42がステートST2からステートST3に遷移する。すると、ステートマシン42は、比較結果CM1を入力値E1として選択するための制御信号SMをマルチプレクサ47に出力し、累積値AM1を入力値E2として選択するための制御信号SMをマルチプレクサ48に出力する。さらに、ステートマシン42は、比較器62の動作を停止させるための制御信号SMを出力する。このため、演算部60では、比較結果CM1が累積値AM1に累積加算され、加算後の累積値AM1がメモリ51に格納される。ここで、入力値E2として演算部60に入力される累積値AM1は、初期値(ここでは、「0」)である。
次に、ソース画像SDの1行2列目の画素が注目画素A1として演算部44に入力されると(図5(b)参照)、その注目画素A1におけるSAD値が算出され、そのSAD値と閾値Th1との大小関係を示す比較結果CM1が算出される。続いて、算出された比較結果CM1が、メモリ51から読み出された累積値AM1に累積加算され、加算後の累積値AM1がメモリ51に再度格納される。
同様に、注目画素A1をソース画像SDの1行3列目の画素から1行6列目の画素まで1画素ずつシフトさせる度に、比較結果CM1を算出し、比較結果CM1を累積値AM1に累積加算する。このように、水平6画素分の比較結果CM1が累積値AM1に累積されると、水平8画素に対して差分演算が行われ、それら演算結果と閾値Th1との大小比較結果が累積されたことになる。すなわち、ブロックMBの水平6画素分の比較結果CM1が累積された累積値AM1は、ブロックMBの水平8画素における高周波成分の度合を示した値となる。このとき、仮に、累積した6個の比較結果CM1が全て「1」であった場合には、累積値AM1は「6」となる。
続いて、時刻t3において、カウント値MHsが「7」になると、ステートマシン42がステートST3からステートST4に遷移する。このステートST4は、1行7列目の画素及び1行8列目の画素における処理が終了するまで継続される。また、ステートST4のときには、ソース画像SDの画素データが注目画素A1として演算部44に入力されない。すなわち、ソース画像SDの1行7列目の画素及び1行8列目の画素は注目画素A1に設定されない。換言すると、注目画素A1の1画素毎のシフト動作(つまり、SAD値及び比較結果CM1の算出処理)が水平6画素分行われると、注目画素A1のシフト動作が水平2画素分スキップされる。このため、ステートST4のときには、比較結果CM1の生成は行われない。このようなステートST4の期間では、マルチプレクサ49から閾値Th2(水平8画素分の閾値)が閾値Thとして比較器62に供給されるとともに、加算器61から累積値AM1が比較器62に供給される。そして、累積値AM1と閾値Th2とが比較器62で比較され、累積値AM1と閾値Th2との大小関係を示す比較結果CM2が比較結果CMとして出力される。例えば、累積値AM1が閾値Th2よりも小さい場合には比較結果CM2が「0」となり、累積値AM1が閾値Th2以上の場合には比較結果CM2が「1」となる。
次いで、時刻t4において、上記算出された比較結果CM2と、メモリ52(具体的には、メモリ52の座標(1,1)の記憶領域)から読み出された累積値AM2とが加算器61に入力される。そして、加算器61において比較結果CM2が累積値AM2に累積加算され、加算後の累積値AM2がメモリ52の座標(1,1)の記憶領域に格納される。ここで、加算器61に入力される累積値AM2は、初期値(ここでは、「0」)である。
このように本例では、SAD値及び比較結果CM1の算出処理を行わない期間に、累積値AM1と閾値Th2との比較、比較結果CM2を累積値AM2に累積加算、累積値AM2のメモリ52への格納という処理を行っている。
そして、上記加算後の累積値AM2がメモリ52に格納された後に、アンド回路55にLレベルの制御信号SMが供給され、メモリ52に格納されている累積値AM1(つまり、ブロックMB1の1行目の画素データに対応する累積値AM1)が0にリセットされる。この後、メモリ51には、次の水平6画素(ここでは、1行9列目〜1行14列目の画素)に対応する累積値AM1が格納される。このように、ブロックMB内の水平6画素の演算処理が終了する度に、メモリ51には、直前の水平6画素分の比較結果CM1を累積した累積値AM1が格納されることになる。さらに、ブロックMB内の水平8画素の処理が終了する度に、メモリ51に格納された累積値AM1が0にリセットされる。このため、メモリ51には、1ビットデータである比較結果CM1が6個累積された累積値AM1(例えば、3ビットのデータ)が格納される。したがって、メモリ51は、少なくとも3ビットの記憶容量を有していれば十分である。
次に、時刻t5において、カウント値MHsが「1」になると、ステートマシン42がステートST4からステートST3に遷移する。このとき、カウント値Hsが「9」となり、ソース画像SDの1行9列目の画素データが注目画素A1として演算部44に入力され(図5(d)参照)、その注目画素A1に対応する比較結果CM1が生成される。このため、ブロックMB1の右隣のブロックMB(図5(d)参照)における処理が開始されたことになる。その後、上述した時刻t2〜t5と同様の処理が実施される。これにより、比較結果CM2が生成され、その比較結果CM2が、メモリ52の座標(2,1)の記憶領域から読み出された累積値AM2に累積加算される。そして、加算後の累積値AM2は、メモリ52の座標(2,1)の記憶領域に再度格納される。
以後も同様に、ソース画像SDの水平1ライン分の画素データについて演算処理が行われる。そして、ラインデータL1のN列目の画素データを含むブロックMBにおける累積値AM2が算出され、その累積値AM2がメモリ51の座標(n,1)の記憶領域に格納されると、ラインデータL1における演算処理が終了する。その後、時刻t6において、カウント値Hsがブランク期間(データ未処理期間)を示す値「B」になる。すると、ステートマシン42がステートST4からステートST2に遷移し、ソース画像SDのラインデータL2における先頭データの入力を待つ待ち状態となる。
次に、図12に示す時刻t7において、カウント値Hsが「1」になると、ステートマシン42がステートST2からステートST3に遷移する。このとき、カウント値Vsが「2」となり、ソース画像SDの2行1列目の画素データが注目画素A1として演算部44に入力され(図6(a)参照)、その注目画素A1に対応する比較結果CM1が生成される。すなわち、ラインデータL2の先頭データが注目画素A1として入力され、ラインデータL2の演算処理が開始されたことになる。その後、上述した時刻t2〜t5と同様の処理を実施することにより、ブロックMB1の2行目の水平8画素に対応する比較結果CM2が生成される(時刻t8参照)。そして、生成された比較結果CM2が、メモリ52の座標(1,1)の記憶領域から読み出された累積値AM2(ここでは、ブロックMB1の1行目の水平8画素に対応する比較結果CM2)に累積加算され、加算後の累積値AM2がメモリ52の座標(1,1)の記憶領域に再度格納される。
続いて、上述したラインデータL1における演算処理と同様に、ラインデータL2の画素データに対して演算処理が実施される。その後も同様に、ラインデータL3,L4,L5,L6の画素データに対して演算処理が実施される。
そして、図13に示す時刻t9〜t10において、ソース画像SDの6行1列目から6行8列目までの画素(つまり、ブロックMB1における6行目の水平8画素)に対応する比較結果CM2が生成され、その比較結果CM2が累積値AM2に累積加算される。すると、この累積値AM2には、ブロックMB1の1行目の水平8画素に対応する比較結果CM2から6行目の水平8画素に対応する比較結果CM2までの6個の比較結果CM2が累積されたことになる。このように、ブロックMBの6行分の比較結果CM2が累積値AM2に累積されると、ブロックMBの8行分の画素に対して差分演算が行われ、それら演算結果と閾値Th1,Th2との大小比較結果が累積されたことになる。すなわち、ブロックMBの6行分の比較結果CM2が累積された累積値AM2は、1つのブロックMB全体における高周波成分の度合を示した値となる。このとき、仮に、累積した6個の比較結果CM2が全て「1」であった場合には、累積値AM2は「6」となる。そして、この累積値AM2がメモリ52内の座標(1,1)の記憶領域に格納される。このように、メモリ52の各記憶領域には、1ビットデータである比較結果CM2が6個累積された累積値AM2(例えば、3ビットデータ)が格納される。したがって、メモリ52内の各記憶領域は、少なくとも3ビットの記憶容量を有していれば十分である。このため、メモリ52内の各記憶領域の記憶容量を1バイトとした場合には、メモリ52全体の記憶容量はn×mバイトとなる。
また、時刻t11においてラインデータL6における演算処理が終了すると、メモリ52内の座標(1,1)から座標(n,1)までの記憶領域にそれぞれ、対応する位置のブロックMBにおける高周波成分の度合を示す累積値AM2が格納されたことになる。
続いて、上述のようにラインデータL6における演算処理が終了した後(時刻t11参照)、カウント値MVsが「6」となり、且つ、カウント値Hsが「B」となると、ステートマシン42がステートST4からステートST5に遷移する。このステートST5は、ラインデータL7,L8における演算処理が終了するまで継続される。また、ステートST5のときには、ソース画像SDの画素データが注目画素A1として演算部44に入力されない。すなわち、各ブロックMBにおける7行目及び8行目の画素は注目画素A1に設定されない。換言すると、注目画素A1のシフト動作が垂直2ライン分スキップされる。このため、ステートST5のときには、比較結果CM1及び比較結果CM2の生成は行われない。
図14に示すように、ステートST5の期間では、累積値AM2と閾値Th3(8×8画素分の閾値)とが比較され、累積値AM2と閾値Th3との大小関係を示す比較結果CM3が生成される。例えば、累積値AM2が閾値Th3よりも小さい場合には比較結果CM3が「0」となり、累積値AM2が閾値Th3以上の場合には比較結果CM3が「1」となる。
詳述すると、時刻t12において、カウント値Hsが「1」、カウント値Vsが「8」、カウント値MHsが「1」、カウント値MVsが「8」となると、メモリ52の座標(1,1)の記憶領域から読み出された累積値AM2が比較器62に入力される。また、マルチプレクサ49から閾値Th3が比較器62に供給される。そして、累積値AM2と閾値Th3との大小関係を示す比較結果CM3が比較器62で算出される。
続いて、時刻t13において、マルチプレクサ47から上記算出された比較結果CM3が加算器61に供給され、メモリ53から読み出された累積値AM3がマルチプレクサ48から加算器61に供給される。このため、加算器61において、比較結果CM3が累積値AM3に累積加算される。そして、加算後の累積値AM3がメモリ53に再度格納される。ここで、加算器61に入力される累積値AM3は、初期値(ここでは、「0」)である。
次いで、時刻t14において、メモリ52の座標(2,1)の記憶領域から読み出された累積値AM2と閾値Th3との大小関係を示す比較結果CM3が算出される。その後、時刻t15において、上記算出された比較結果CM3が、メモリ53から読み出された累積値AM3に累積加算され、加算後の累積値AM3がメモリ53に再度格納される。
このように、ブロックMB単位毎に累積値AM2から算出された比較結果CM3が、累積値AM3に累積加算される。すなわち、本例では、図3に示すようにソース画像SD全体(1フレーム全体)をブロックMB(ここでは、MCU)単位で分割管理し、ブロックMB内の画素値の差分の度合(高周波成分の度合)を示す比較結果CM3が累積値AM3に累積加算される。
その後も同様に、メモリ52の座標(3,1)〜座標(n,1)の記憶領域に格納された累積値AM2の各々と閾値Th3との大小関係を示すn−2個の比較結果CM3が算出され、それらn−2個の比較結果CM3が累積値AM3に累積加算される。すると、この累積値AM3には、n個の比較結果CM3が累積されたことになる。このように、n個の比較結果CM3が累積値AM3に累積されると、ソース画像SDの垂直8ライン分の画素に対して差分演算が行われ、それら演算結果と閾値Th1〜Th3との大小比較結果が累積されたことになる。すなわち、n個の比較結果CM3が累積された累積値AM3は、ブロックMBを水平1ライン分並べた範囲(ソース画像SDの垂直8ライン)における高周波成分の度合を示した値となる。このとき、仮に、累積したn個の比較結果CM3が全て「1」であった場合には、累積値AM3が「n」となる。
このように本例では、SAD値及び比較結果CM1,CM2の算出処理を行わない期間に、累積値AM2と閾値Th3との比較、比較結果CM3を累積値AM3に累積加算、累積値AM3のメモリ53への格納という処理を行っている。
次に、時刻t16において、カウント値MVsが「8」、カウント値Hsが「B」になると、ステートマシン42がステートST5からステートST6に遷移する。このステートST6の期間では、マルチプレクサ49から閾値Th4(垂直8ライン分の閾値、つまり、n個のブロックMB分の閾値)が比較器62に供給されるとともに、メモリ53から読み出された累積値AM3がマルチプレクサ48から比較器62に供給される。そして、累積値AM3と閾値Th4とが比較器62で比較され、それらの大小関係を示す比較結果CM4が算出される。例えば、累積値AM3が閾値Th4よりも小さい場合には比較結果CM4が「0」となり、累積値AM3が閾値Th4以上の場合には比較結果CM4が「1」となる。
次いで、時刻t17において、ステートマシン42がステートST6からステートST7に遷移する。このステートST7の期間では、上記算出された比較結果CM4がマルチプレクサ47から加算器61に供給され、メモリ54から読み出された累積値AM4がマルチプレクサ48から加算器61に供給される。このため、加算器61において比較結果CM4が累積値AM4に累積加算される。そして、加算後の累積値AM4がメモリ54に再度格納される。ここで、加算器61に入力される累積値AM4は、初期値(ここでは、「0」)である。
このように本例では、垂直8ラインの画素に対する演算処理後のブランク期間(データ未処理期間)に、累積値AM3と閾値Th4との比較、比較結果CM4を累積値AM4に累積加算、累積値AM4のメモリ54への格納という処理を行っている。
そして、上記加算後の累積値AM4がメモリ54に格納された後に、アンド回路57にLレベルの制御信号SMが供給され、メモリ53に格納されている累積値AM3(つまり、ラインデータL1〜L8の画素データに対応する累積値AM3)が0にリセットされる。この後、メモリ53には、次の垂直8ライン(ここでは、ラインデータL9〜L16)の画素データに対応する累積値AM3が格納される。このように、ソース画像SDの垂直8ライン単位の演算処理が終了する度に、メモリ53には、直前の垂直8ライン分の比較結果CM3を累積した累積値AM3が格納されることになる。さらに、垂直8ライン単位の演算処理が終了する度に、メモリ53に格納された累積値AM3が0にリセットされる。このため、メモリ53には、1ビットデータである比較結果CM3がn個累積された累積値AM3が格納される。したがって、メモリ53は、少なくともn/8バイトの記憶容量を有していれば十分である。
その後、ステートマシン42がステートST7からステートST2に遷移し、ソース画像SDのラインデータL9における先頭データの入力を待つ待ち状態となる。
次に、図15に示す時刻t18において、カウント値Hsが「1」になると、ステートマシン42がステートST2からステートST3に遷移する。このとき、カウント値Vsが「9」となり、ソース画像SDの9行1列目の画素データが注目画素A1として演算部44に入力される(図6(c)参照)。すなわち、ブロックMB1の下のブロックMB(ラインデータ)における処理が開始されたことになる。その後、図11〜図14で説明した処理と同様の処理を実施することにより、メモリ52内の座標(1,2)から座標(n,2)までの記憶領域にそれぞれ、対応する位置のブロックMBの累積値AM2が格納される。また、ラインデータL9〜L16の画素データに対応する累積値AM3が算出され、その累積値AM3と閾値Th4との大小関係を示す比較結果CM4が算出される。そして、算出された比較結果CM4が、メモリ54から読み出された累積値AM4に累積加算され、加算後の累積値AM4がメモリ54に再度格納される。
以後も同様に、ソース画像SDの垂直8ライン単位で演算処理が実施され、その演算処理が終了する度に、垂直8ライン分の比較結果CM4が累積値AM4に累積加算される。
そして、図16の時刻t19において、ラインデータLMにおける演算処理が終了してブランク期間になると、ステートマシン42がステートST5からステートST6に遷移する。このステートST6の期間では、ラインデータLMを含む垂直8ライン分の累積値AM3と閾値Th4との大小関係を示す比較結果CM4が算出される。
次いで、時刻t20において、ステートマシン42がステートST6からステートST8に遷移する。このステートST8の期間では、上記算出された比較結果CM4が、メモリ54から読み出された累積値AM4に累積加算され、加算後の累積値AM4が比較器62に入力される。これにより、累積値AM4には、m個の比較結果CM4が累積されたことになる。このように、m個の第4比較結果CM4が累積値AM4に累積されると、ソース画像SD内の全ての画素に対して差分演算が行われ、それら演算結果と閾値Th1〜Th4との大小比較結果が累積されたことになる。すなわち、m個の比較結果CM4が累積された累積値AM4は、ソース画像SD全体における高周波成分の度合を示した値となる。そして、この累積値AM4がメモリ54に格納される。このように、メモリ54には、1ビットデータである比較結果CM4がm個累積された累積値AM4が格納される。したがって、メモリ54は、少なくともm/8バイトの記憶容量を有していれば十分である。
また、ステートST8の期間では、マルチプレクサ49から閾値Th5(M×N画素分の閾値、つまりn×m個のブロックMB分の閾値)が比較器62に供給される。そして、累積値AM4と閾値Th5とが比較器62で比較され、それらの大小関係を示す比較結果CM5がマルチプレクサ50に出力される。
例えば、累積値AM4は、累積したm個の比較結果CM4が全て「1」であった場合には「m」となる。このような累積値AM4が閾値Th5以上の場合には、比較結果CM5が「1」となる。すると、マルチプレクサ50において設定値Q2が選択され、その設定値Q2がQ値(量子化テーブル)としてコーデック部35に出力される(時刻t21参照)。すなわち、累積値AM4が閾値Th5以上の場合には、ソース画像SDにおける画素間の変動が大きい、つまり高周波成分の度合が大きいと判断され、初期値である設定値Q1よりも小さい設定値Q2がQ値に設定される。その一方で、上記累積値AM4が閾値Th5よりも小さい場合には、比較結果CM5が「0」となる。すると、マルチプレクサ50において設定値Q1が選択され、その設定値Q1がQ値としてコーデック部35に出力される。すなわち、累積値AM4が閾値Th5よりも小さい場合には、ソース画像SDにおける画素間の変動が小さい、つまり高周波成分の度合いが小さいと判断され、初期値である設定値Q1がQ値に設定される。
次に、図11〜図16で説明した処理によりQ値が設定された後に、画像データGDの一部がトリミングされ、そのトリミングされた画像データに対して符号化処理が行われる場合のQ値設定部40の動作について説明する。以下では、説明の簡略化のために、nを「6」、mを「4」として説明する。
例えば、図17に示すように、ソース画像SDにおける2行2列目から2行5列目までの4個のブロックMBと、3行2列目から3行5列目までの4個のブロックMBとを合わせた8個のブロックMBに含まれる画素データがトリミングされる。このとき、メモリ52の各記憶領域には、トリミング前のソース画像SDにおける累積値AM2(対応する位置のブロックMBの累積値AM2)が格納されている。
そこで、図18に示すように、メモリ52における上記トリミングされた8個のブロックMBに対応する位置の記憶領域、つまり座標(2,2)、(3,2)、(4,2)、(5,2)、(2,3)、(3,3)、(4,3)、(5,3)の記憶領域に格納された累積値AM2を利用する。
詳述すると、まず、メモリ52の座標(2,2)の記憶領域から累積値AM2が読み出され、その累積値AM2が閾値Th3と比較される。そして、累積値AM2と閾値Th3との大小関係を示す比較結果CM3が、メモリ53から読み出された累積値AM3(ここでは、初期値の「0」)に累積加算される。この加算後の累積値AM3がメモリ53に再度格納される。その後も同様に、メモリ52の座標(3,2)、(4,2)、(5,2)の記憶領域から累積値AM2が順次読み出され、それら累積値AM2と閾値Th3との比較結果CM3が上記累積値AM3に順次加算される。このように、トリミング後のソース画像SDにおける垂直8ライン分の比較結果CM3が累積値AM3に累積加算されると、その累積値AM3が閾値Th4と比較される。なお、閾値Th4は、トリミング後のソース画像SDにおける水平方向に並んだ画素数(ブロックMB数)に応じて、トリミング前の値から変更されている。
次に、累積値AM3と閾値Th4との大小関係を示す比較結果CM4が、メモリ54から読み出された累積値AM4(ここでは、初期値の「0」)に累積加算される。この加算後の累積値AM4がメモリ54に再度格納される。
以後も同様に、メモリ52の座標(2,3)、(3,3)、(4,3)、(5,3)の記憶領域から累積値AM2が順次読み出され、それら累積値AM2と閾値Th3との比較結果CM3が累積値AM3に順次加算される。そして、4個の比較結果CM3が累積値AM3に加算されると、その累積値AM3と閾値Th4との大小関係を示す比較結果CM4が上記累積値AM4に累積加算される。
以上説明したように、トリミングされた全てのブロックMBに対応する累積値AM2を利用して累積値AM4が算出されると、その累積値AM4が閾値Th5と比較され、それらの大小関係を示す比較結果CM5が算出される。そして、算出された比較結果CM5に基づいて、設定値Q1,Q2のいずれか一方の設定値がQ値としてコーデック部35に出力される。なお、上記閾値Th5は、トリミング後のソース画像SDにおけるブロックMBの個数に応じて、トリミング前の値から変更されている。
このようにして、トリミング前にメモリ52に格納された累積値AM2を利用することにより、トリミング後の画像データに対するQ値を設定することができる。
以上説明した本実施形態によれば、以下の効果を奏することができる。
(1)ソース画像SDにおける画素間の画素値の差分と閾値Th1とを比較し、その比較結果CM1をソース画像SD全体で累積した累積値AM4と閾値Th5とを比較し、それら累積値AM4と閾値Th5の比較結果CM5に基づいてQ値を設定するようにした。これにより、仮の符号化処理を行うことなく、ソース画像SDにおける画素値の差分(画素間の変動の大きさ)に基づいてQ値を設定することができる。このため、仮の符号化処理を実施する場合に比べて、符号化処理にかかる処理時間を短縮することができ、符号化処理に費やすメモリ帯域を減らすことができる。
(2)さらに、Q値設定部40によるQ値設定処理を、色処理部33による色空間変換処理と並行して行うようにしたため、符号化処理に費やす時間の増大を好適に抑制することができる。
(3)ところで、上記従来技術では、ソース画像から所定の画素を間引いた画像データに対して仮の符号化処理を行うため、その間引いた画素に高周波成分が含まれている場合には、Q値を適切に設定することができない。これに対し、本例では、ソース画像SDから画素を間引くことなく、ソース画像SDにおける全ての画素における差分に基づいてQ値を設定するようにした。このため、ソース画像SD全体における高周波成分の度合に応じてQ値を適切に設定することができる。
(4)注目画素A1から水平方向にP画素(ここでは、1画素)離れた画素を近接画素B1に設定し、注目画素A1から垂直方向にP画素(ここでは、1画素)離れた画素を近接画素C1に設定し、注目画素A1から斜め方向にP画素(ここでは、1画素)離れた画素を近接画素D1に設定するようにした。すなわち、近接画素B1,C1,D1を、注目画素A1に隣接する隣接画素ではなく、注目画素A1から1画素以上離れた画素に設定するようにした。これにより、注目画素A1と近接画素B1,C1,D1との間の画素値の差分を算出することによって、ソース画像SDにおける高周波成分の度合を適切に取得することができる。
詳述すると、図19に示すように、被写体が自然(ここでは、木)である自然画像の場合には、通常、輪郭部分において徐々に画素値が変化するため、隣接画素間では画素値の変動が小さい。このため、自然画像である場合には、隣接画素間の差分を取得してもその差分が比較的小さな値となり、自然画像における高周波成分の度合を適切に取得することができない。これに対し、本例では、注目画素A1とその注目画素A1から1画素以上離れた近接画素B1,C1,D1との間の差分を算出するようにした。これにより、自然画像である場合にも、輪郭部分における大きなレベル変動を得ることができ、ソース画像SD(自然画像)における高周波成分の度合を適切に取得することができる。
(5)さらに、各ブロックMBにおける水平I画素(ここでは、水平8画素)の差分を算出する際に、(I−P+1)回(ここでは、6回)の差分演算を行うようにした。また、ソース画像SDの垂直Jライン(ここでは、垂直8ライン)分の差分を算出する際に、(J−P+1)ライン(ここでは、6ライン)分の差分演算を行うようにした。これにより、隣接画素間の差分を算出する場合に比べて、差分演算の回数を減らすことができる。
(6)ソース画像SDにおける画素間の画素値の差分と閾値Th1との大小関係を示す比較結果CM1が複数個累積された累積値AM1をメモリ51に格納した。このように、画素値の差分(SAD値)をメモリ51に格納するのではなく、比較結果CM1(例えば、1ビットデータ)が複数個累積された累積値AM1をメモリ51に格納するようにした。これにより、メモリ51における記憶容量を小さくすることができる。
さらに、累積値AM1と閾値Th2との大小関係を示す比較結果CM2が複数個累積された累積値AM2をメモリ52に格納し、累積値AM2と閾値Th3との大小関係を示す比較結果CM3が複数個累積された累積値AM3をメモリ53に格納するようにした。また、累積値AM3と閾値Th4との大小関係を示す比較結果CM4が複数個累積された累積値AM4をメモリ54に格納するようにした。このように、比較結果CM1〜CM3の累積結果である累積値AM1〜AM3を閾値Th2〜Th4とそれぞれ比較することで、複数の段階でデータ量を圧縮し、その圧縮されたデータ(比較結果CM2〜CM4)の累積結果をメモリ52〜54にそれぞれ格納するようにした。これにより、画素値の差分(SAD値)をそのままメモリに格納する場合に比べて、メモリ51〜54における記憶容量を小さくすることができる。
例えば、8n×8m画素からなるソース画像SD全体における隣接画素同士の差分を算出する場合(比較例)には、差分演算が(8n−1)×(8m−1)回行われるため、1つのSAD値をAバイトとすると、A×(8n−1)×(8m−1)バイトの記憶容量が必要になる。これに対し、本例では、説明の簡略化のため最低の記憶容量を1バイトとすると、メモリ51の記憶容量が1バイト、メモリ52の記憶容量がn×mバイト、メモリ53の記憶容量がn/8バイト、メモリ54の記憶容量がm/8バイトを有していれば十分である。以下に、本例と比較例との記憶容量を具体的に比較した例について説明する。
ソース画像SDのサイズを4000×3000画素とし、1つのSAD値を2バイトとすると、n=500、m=375、A=2となる。このため、比較例では、約24000Kバイトの記憶容量が必要となる。これに対し、本例では、メモリ51の記憶容量が1バイト、メモリ52の記憶容量が約188Kバイト、メモリ53の記憶容量が約63バイト、メモリ54の記憶容量が約47バイトとなり、メモリ51〜54の合計の記憶容量が約188Kバイトとなる。このため、本例では、比較例に比べて、メモリ51〜54における記憶容量を大幅に小さくすることができる。
(7)比較結果CM1と累積値AM1との加算演算、比較結果CM2と累積値AM2との加算演算、比較結果CM3と累積値AM3との加算演算、比較結果CM4と累積値AM4との加算演算を1つの加算器61で行うようにした。また、累積値AM1と閾値Th2との比較演算、累積値AM2と閾値Th3との比較演算、累積値AM3と閾値Th4との比較演算、累積値AM4と閾値Th5との比較演算を1つの比較器62で行うようにした。このように、1つの加算器61を複数の加算演算処理で共用するようにし、1つの比較器62を複数の比較演算処理で共用するようにした。これにより、Q値設定部40の回路規模の増大を好適に抑制することができる。
(8)画像データGDの一部がトリミングされた場合に、トリミングされたブロックMBに対応する位置のメモリ52の記憶領域に格納された累積値AM2を利用して、Q値を再度設定するようにした。これにより、トリミング後の画像データにおけるSAD値を再度算出する場合に比べて、Q値設定処理にかかる時間を減らすことができ、Q値設定処理に費やすメモリ帯域を減らすことができる。ひいては、トリミングした画像データに対する符号化処理にかかる時間を減らすことができ、符号化処理に費やすメモリ帯域を減らすことができる。
(他の実施形態)
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
・上記実施形態では、複数の段階(ここでは、注目画素A1、水平8画素単位、ブロックMB単位、垂直8ライン単位、フレームデータ単位)でSAD値及び累積値AM1〜AM4を閾値Th1〜Th5と比較し、比較結果CM1〜CM5を算出するようにした。すなわち、上記実施形態では、5つの段階でデータ量を圧縮するようにした。これに限らず、例えば、6つ以上の段階でデータ量を圧縮するようにしてもよいし、4つ以下の段階でデータ量を圧縮するようにしてもよい。
例えば、4つの段階(注目画素A1、水平8画素単位、ブロックMB単位、フレームデータ単位)でデータ量を圧縮するようにしてもよい。この場合には、ブロックMB単位の累積値AM2と閾値Th3との大小関係を示す比較結果CM3が累積値AM4に累積される。そして、n×m個の比較結果CM3が累積値AM4に累積されると、その累積値AM4が閾値Th5と比較されて比較結果CM5が算出される。
また、2つの段階(注目画素A1、フレームデータ単位)でデータ量を圧縮するようにしてもよい。この場合には、SAD値と閾値Th1との大小関係を示す比較結果CM1が累積値AM4に累積される。このとき、ブロックMB単位での累積値の管理が行われない。このため、ソース画像SD全体において、(N−2)×(M−2)個のSAD値が算出され、(N−2)×(M−2)個の比較結果CM1が算出される。したがって、この場合には、(N−2)×(M−2)個の比較結果CM1が累積値AM4に累積されると、その累積値AM4が閾値Th5と比較されて比較結果CM5が算出される。
・上記実施形態では、近接画素B1,C1,D1を、注目画素A1から1画素離れた画素に設定するようにした。これに限らず、例えば、近接画素B1,C1,D1を、注目画素A1から2画素以上離れた画素に設定するようにしてもよいし、注目画素A1に隣接する隣接画素に設定するようにしてもよい。
・上記実施形態の差分演算において、近接画素D1を省略するようにしてもよい。
・上記実施形態では、メモリ52を、n×m個の記憶領域を有する配列メモリとしたが、これに限定されない。例えば、メモリ52を、1つの累積値AM2を格納可能な記憶容量を有するメモリとしてもよい。
・上記実施形態では、閾値Th1〜Th5を1つの閾値としたが、閾値Th1〜Th5を複数の閾値に変更してもよい。
・上記実施形態における比較結果CM1〜CM5及び累積値AM1〜AM4のデータサイズは特に限定されない。例えば、上記実施形態では、比較結果CM1〜CM5を1ビットデータとしたが、比較結果CM1〜CM5のデータサイズを2ビット以上としてもよい。
・上記実施形態におけるメモリ51〜54の記憶容量は特に限定されない。
・上記実施形態におけるブロックMBのサイズは特に限定されない。
・上記実施形態では、比較結果CM5に基づいて、2つの設定値Q1,Q2からQ値を設定するようにしたが、3つ以上の設定値からQ値を設定するようにしてもよい。
・上記実施形態では、1つの加算器61を複数の加算演算処理で共用するようにしたが、複数の加算演算処理にそれぞれ対応する加算器を設けるようにしてもよい。すなわち、4種類の加算演算処理がある場合に、4つの加算器を設けるようにしてもよい。
・上記実施形態では、1つの比較器62を複数の比較演算処理で共用するようにしたが、複数の比較演算処理にそれぞれ対応する比較器を設けるようにしてもよい。すなわち、4種類の比較演算処理がある場合に、4つの比較器を設けるようにしてもよい。
・上記実施形態では、色空間変換処理後の画像データに基づいてQ値を設定するようにした。これに限らず、色空間変換処理以外の画像処理後(例えば、解像度変換処理後やエッジ強調処理後)の画像データに基づいてQ値を設定するようにしてもよい。
・上記実施形態では、色空間変換処理後の画像データに対して符号化処理を施すようにした。これに限らず、色空間変換処理以外の画像処理、つまり画像処理部34による画像処理後の画像データに対して符号化処理を施すようにしてもよい。この場合には、Q値設定部40によるQ値設定処理が、色空間変換処理及び画像処理部34による画像処理と並行して実施されることになる。
以上の様々な実施の形態をまとめると、以下のようになる。
(付記1)
複数の画素が互いに直交する垂直方向及び水平方向に2次元状に配列された入力画像の注目画素と前記注目画素の近接画素との間の差分を算出する差分演算器と、
前記差分と第1閾値とを比較して第1比較結果を算出する第1比較器と、
前記第1比較結果を前記入力画像全体で累積した第1累積値と、第2閾値とを比較して第2比較結果を算出する第2比較器と、
前記第2比較結果に基づいて量子化テーブルを設定する設定回路と、
前記量子化テーブルに基づいて前記入力画像を符号化する符号化処理部と、
を有することを特徴とする画像処理装置。
(付記2)
前記第2比較器は、前記第1比較結果をI×J画素(I及びJは1以上の整数)を有するブロック毎に累積した第2累積値と、第3閾値とを比較して第3比較結果を算出するとともに、前記第3比較結果を前記入力画像全体で累積した前記第1累積値と前記第2閾値とを比較して前記第2比較結果を算出することを特徴とする付記1に記載の画像処理装置。
(付記3)
前記第2比較器は、
前記第1比較結果を前記入力画像における水平方向のI画素単位で累積した第3累積値と、第4閾値とを比較して第4比較結果を算出し、
前記第4比較結果を前記ブロックにおける垂直方向のJライン単位で累積した前記第2累積値と、前記第3閾値とを比較して前記第3比較結果を算出し、
前記第3比較結果を前記入力画像における垂直方向のJライン単位で累積した第4累積値と、第5閾値とを比較して第5比較結果を算出し、
前記第5比較結果を前記入力画像全体で累積した前記第1累積値と前記第2閾値とを比較して前記第2比較結果を算出することを特徴とする付記2に記載の画像処理装置。
(付記4)
前記第2累積値を格納する記憶部を有し、
前記記憶部は、前記入力画像がn×m個(n及びmは1以上の整数)の前記ブロックから構成される場合に、n×m個の記憶領域が2次元状に配列された配列メモリであることを特徴とする付記2又は3に記載の画像処理装置。
(付記5)
前記第2閾値及び前記第5閾値は、前記入力画像の画像サイズに応じて変更可能な閾値であることを特徴とする付記3に記載の画像処理装置。
(付記6)
前記近接画素は、前記注目画素から1画素以上離れた画素であることを特徴とする付記1〜5のいずれか一項に記載の画像処理装置。
(付記7)
複数の画素が互いに直交する垂直方向と水平方向に2次元状に配列された入力画像を入力するステップと、
前記入力画像の注目画素と前記注目画素の近接画素との間の差分を算出するステップと、
前記算出した差分と第1閾値とを比較して第1比較結果を算出するステップと、
前記第1比較結果を前記入力画像全体で累積して第1累積値を算出するステップと、
前記第1累積値と第2閾値とを比較して第2比較結果を算出するステップと、
前記第2比較結果に基づいて量子化テーブルを設定するステップと、
前記量子化テーブルに基づいて前記入力画像を符号化するステップと、
を有することを特徴とする画像処理方法。
(付記8)
前記第1累積値を算出するステップは、
前記第1比較結果をI×J画素(I及びJは1以上の整数)を有するブロック毎に累積して第2累積値を算出するステップと、
前記第2累積値と第3閾値とを比較して第3比較結果を算出するステップと、
前記第3比較結果を前記入力画像全体で累積して前記第1累積値を算出するステップと、
を有することを特徴とする付記7に記載の画像処理方法。
(付記9)
前記差分を算出するステップと、前記第1比較結果を算出するステップと、前記第2累積値を算出するステップと、前記第3比較結果を算出するステップとは、
前記各ブロックの1行1列目の画素を注目画素に設定し、前記注目画素と、前記注目画素から水平方向にP(Pは1以上の整数)画素以上離れた第1近接画素、及び前記注目画素から垂直方向にP画素以上離れた第2近接画素との差分を算出する第1ステップと、
前記注目画素を水平方向に1画素ずつ移動させて前記差分を算出する第2ステップと、
前記差分を算出する度に、前記第1比較結果を第3累積値に累積する第3ステップと、
(I−P+1)画素単位の前記第1比較結果が前記第3累積値に累積される度に、前記第3累積値と第4閾値とを比較して第4比較結果を算出する第4ステップと、
前記第4比較結果を前記第2累積値に累積する第5ステップと、
前記注目画素を水平方向に(I−P+1)画素移動させる度に、前記注目画素を水平方向に(P+2)画素移動させて前記差分を算出する第6ステップと、
前記入力画像の水平方向の1ライン分の画素に対して前記第1ステップから前記第5ステップまでを繰り返す第7ステップと、
前記注目画素を垂直方向に1ライン移動させる度に、前記第1ステップから前記第6ステップまでを繰り返す第8ステップと、
(J−P+1)ライン単位の前記第4比較結果が前記第2累積値に加算される度に、前記第2累積値と前記第3閾値とを比較して前記第3比較結果を算出する第9ステップと、
前記注目画素を垂直方向に(J−P+1)ライン移動させる度に、前記注目画素を垂直方向に(P+2)ライン移動させて前記第1ステップから前記第9ステップまでを繰り返す第10ステップと、
を有することを特徴とする付記8に記載の画像処理方法。
(付記10)
画像データに対して所定の画像処理を施すステップを有し、
前記入力画像を入力するステップでは、前記所定の画像処理が施された画像データを前記入力画像として入力し、
前記所定の画像処理を施すステップと、前記入力画像を入力するステップ、及び前記差分を算出するステップ、及び前記第1比較結果を算出するステップ、及び前記第1累積値を算出するステップ、及び前記第2比較結果を算出するステップ、及び前記量子化テーブルを設定するステップとを並行して実施することを特徴とする付記7〜9のいずれか一項に記載の画像処理方法。
(付記11)
前記入力画像がn×m個(n及びmは1以上の整数)の前記ブロックから構成される場合に、前記ブロック単位の第2累積値を、n×m個の記憶領域が2次元状に配列された配列メモリの対応する位置に格納するステップを有し、
全ての前記ブロックに対応する前記第2累積値が前記配列メモリに格納された後に、前記入力画像の一部がトリミングされた場合には、トリミングされたブロックに対応する位置の前記配列メモリの記憶領域から前記第2累積値を読み出し、読み出した前記第2累積値と前記第3閾値とを比較して第3比較結果を算出し、前記第3比較結果をトリミング後の入力画像全体で累積して前記第1累積値を算出することを特徴とする付記8又は9に記載の画像処理方法。
(付記12)
撮像光学系と、前記撮像光学系を通過した光に応じた画像データを生成する撮像素子とを含む撮像部と、前記画像データに対して1又は複数の画像処理を施す画像処理装置とを有し、
前記画像処理装置は、
前記画像データを補正する画像補正部と、
前記補正後の画像データに対して所定の画像処理を施す画像処理部と、
前記所定の画像処理が施された画像データを入力画像として入力し、前記入力画像に基づいて、量子化テーブルを設定する設定部と、
前記量子化テーブルに基づいて、前記所定の画像処理が施された画像データを符号化する符号化処理部と、を有し、
前記設定部は、
複数の画素が互いに直交する垂直方向及び水平方向に2次元状に配列された前記入力画像の注目画素と前記注目画素の近接画素との間の差分を算出する差分演算器と、
前記差分と第1閾値とを比較して第1比較結果を算出する第1比較器と、
前記第1比較結果を前記入力画像全体で累積した第1累積値と、第2閾値とを比較して第2比較結果を算出する第2比較器と、
前記第2比較結果に基づいて量子化テーブルを設定する設定回路と、を有することを特徴とする撮像装置。