以下、図1〜図32に従って一実施形態を説明する。
図1に示す撮像装置10は、例えば、デジタルスチルカメラである。撮像装置10は、撮像部11と、画像処理プロセッサ(ISP:Image Signal Processor)12と、画像処理プロセッサ12の外部に設けられた外部メモリ13と、入力部14と、メモリカード15と、表示部16とを有している。
撮像部11は、撮像素子11Aと、アナログ−デジタル変換回路(A/D変換回路)11Bとを有している。撮像素子11Aは、例えば、CCD(Charge Coupled Device)イメージセンサやCMOS(Complementary Metal Oxide Semiconductor)イメージセンサである。撮像素子11Aは、例えば、ベイヤ配列のカラーフィルタを介して入射する光の量に応じた撮像信号(アナログ信号)を出力する。A/D変換回路11Bは、撮像素子11Aから出力されるアナログの撮像信号をデジタルの画像データに変換して画像処理プロセッサ12に出力する。なお、A/D変換回路11Bからは、撮像素子11Aにより撮像された1画面(1フレーム)の画像データがフレーム毎に出力される。
画像処理プロセッサ12は、撮像部11から出力される撮像データ(例えば、RGB形式の画像データ(ベイヤデータ))に対して各種画像処理を施す。例えば、画像処理プロセッサ12は、所定の処理段階で画像データを外部メモリ13に一時的に格納する。すなわち、外部メモリ13は作業メモリとして機能する。この外部メモリ13は、例えば、同期式半導体メモリ(SDRAM:Synchronous Dynamic Random Access Memory)などの書き換え可能なメモリである。また、画像処理プロセッサ12は、外部メモリ13に格納された各種画像処理後の画像データをメモリカード15に格納したり、表示部16に表示したりする。
入力部14は、ユーザにより操作されるシャッタボタンやメニューボタン等の各種スイッチを有している。この各種スイッチは、例えば、写真撮影、撮影条件の設定、表示方式の設定、外部メモリ13に記憶した画像データに対する処理の設定等を行うために使用される。
メモリカード15は、例えば、コンパクトフラッシュ(登録商標)やSDメモリカード(登録商標)などの携帯型メモリカードである。
表示部16は、例えば、撮影した画像を確認するモニタとして利用される。表示部16としては、例えば、液晶表示装置(LCD:Liquid Crystal Display)や有機EL(Electronic Luminescence)を用いることができる。また、表示部16としては、例えば、電子ビューファインダ(EVF:Electronic View Finder)や、外部接続のためのインターフェース(例えば、HDMI(登録商標):High-Definition Multimedia Interface)を用いることができる。
次に、画像処理プロセッサ12の内部構成例について説明する。
画像処理プロセッサ12は、プリプロセス処理部21と、画像処理回路22と、中央処理装置(CPU:Central Processing Unit)23と、メモリカードインターフェース(I/F)24と、表示I/F25と、調停回路26とを有している。これらプリプロセス処理部21、画像処理回路22、CPU23、メモリカードI/F24、表示I/F25及び調停回路26は、共有バス27を介して互いに接続されている。なお、共有バス27は、アドレスバス、コントロールバス及びデータバスを有している。
プリプロセス処理部21は、撮像部11から入力される1フレームの画像データに対して、例えば、ホワイトバランス調整、ゲイン調整、欠陥信号の補正等の前処理を施す。プリプロセス処理部21は、処理後の画像データを外部メモリ13に格納する。
画像処理回路22は、外部メモリ13からプリプロセス処理部21により前処理された1フレームの画像データ(入力画像)を複数のブロックに分割して読み出し、各種の画像処理を施す。画像処理回路22は、画像処理後の画像データ(出力画像)を外部メモリ13に格納する。
CPU23は、画像処理プロセッサ12全体を統括制御する。CPU23は、例えば、入力部14の操作により設定される撮像装置10の動作モード等に応じて、各処理に必要な情報(パラメータ)の各処理部への設定や、データの書き込み/読み出し制御等を行う。また、CPU23は、例えば、撮像装置10の動作モード等に応じて、画像処理回路22の画像データに対する演算又は変換などの処理等を変更する。
メモリカードI/F24は、撮像装置10に装着される上記メモリカード15と接続される。メモリカードI/F24は、メモリカード15に対するデータの入出力を実行する。例えば、CPU23は、外部メモリ13から画像データを読み出し、その画像データをメモリカードI/F24を介してメモリカード15に格納する。
表示I/F25は、撮像装置10に設けられた上記表示部16と接続される。表示I/F25は、例えば、外部メモリ13に格納された画像データを読み出し、その画像データに基づいて生成した表示データを表示部16に出力する。
プリプロセス処理部21、画像処理回路22、メモリカードI/F24及び表示I/F25は、外部メモリ13にデータを書き込む、又は外部メモリ13からデータを読み出すために共有バス27の使用権を要求するための要求を調停回路26に出力する。調停回路26は、プリプロセス処理部21、画像処理回路22、メモリカードI/F24及び表示I/F25等の各処理部から出力され競合する要求を、例えば、各処理部に対応して設定された優先度に従って調停し、1つの処理部に対して共有バス27の使用を許可する。共有バス27の使用が許可された処理部は、外部メモリ13に対するアクセスのための制御信号を出力する。例えば、読み出し要求の場合、調停回路26は、制御信号に応じて外部メモリ13からデータを読み出し、その読み出したデータを要求元の処理部に出力する。また、書き込み要求の場合、調停回路26は、書き込み要求と、その要求元の処理部から出力されるデータを外部メモリ13に出力し、外部メモリ13はそのデータを記憶する。
次に、画像処理回路22の内部構成例について説明する。
図2に示すように、画像処理回路22は、画像処理部30と、制御部40と、内蔵メモリ50と、内部バス60とを有している。
画像処理部30は、ブレンド処理部31と、フィルタ処理部32と、解像度変換処理部33と、コーデック処理部34とを有している。各処理部31〜34は、内部バス60を介して互いに接続されるとともに、内部バス60を介して制御部40と接続されている。なお、内部バス60は、アドレスバス、コントロールバス及びデータバスを有している。
図2に従って、各処理部31〜34が画像データに対して行う処理の一例について説明する。
ブレンド処理部31は、例えば、外部メモリ13から複数の画像データを読み出し、それら複数の画像データを混合(ブレンド)して1つの画像データを生成するブレンド処理を実行する。例えば、ブレンド処理部31は、異なる露光量で被写体を撮像することにより得られた複数の画像データを合成するハイダイナミックレンジ(HDR:High Dynamic Range)合成を実行する。そして、ブレンド処理部31は、例えば、制御部40を介してブレンド処理後の画像データを内蔵メモリ50の所定の領域に格納する。なお、ブレンド処理部31におけるブレンド処理としては、HDR合成に限らず、例えば、ノイズ除去を実行するものであってもよい。
フィルタ処理部32は、例えば、内蔵メモリ50に格納されたブレンド処理後の画像データに含まれるノイズを除去するフィルタ処理を実行する。また、フィルタ処理部32は、例えば、内蔵メモリ50に格納されたブレンド処理後の画像データに対して画像の輪郭(エッジ)を強調するフィルタ処理を実行する。そして、フィルタ処理部32は、フィルタ処理後の画像データを内蔵メモリ50の所定の領域に格納する。
解像度変換処理部33は、例えば、フィルタ処理部32によりフィルタ処理された画像データの画像サイズ(解像度)を拡大又は縮小する解像度変換(リサイズ)処理を実行する。解像度変換処理部33は、例えば、解像度変換処理後の画像データを外部メモリ13に格納する。
コーデック処理部34は、外部メモリ13に格納された解像度変換処理後の画像データを読み出し、その画像データを所定の方式(例えば、JPEG(Joint Photographic Experts Group)方式)により符号化する。コーデック処理部34は、符号化後の画像データを外部メモリ13に格納する。
各処理部31〜34は、上記共有バス27を介して調停回路26及びCPU23等と接続されている。各処理部31〜34は、外部メモリ13をアクセスするための要求(書き込み要求又は読み出し要求)を、共有バス27を通じて調停回路26に出力する。
なお、画像処理部30に含まれる処理部31〜34及び各処理部31〜34の処理内容は一例を示すものであり、画像処理部30が含む処理部の種類や処理内容は、適宜変更してもよい。
CPU23は、動作モード(撮影モード)等に応じた所定の処理を実行するために、画像処理回路22に対してパラメータ等の設定情報を出力する。この設定情報は、例えば、画像処理部30内の各処理部31〜34が画像データに対してパイプライン処理を行う順番及び回数や、各処理部31〜34で処理された画像データ(中間画像)を格納する内蔵メモリ50の領域を指定する情報等を含む。また、設定情報は、各処理部31〜34における処理単位を指定する情報等を含む。
各処理部31〜34は、外部メモリ13に格納された入力画像IPを、CPU23からの設定情報に基づくサイズに分割したブロックとして入力し、そのブロックに対して画像処理を実行する。各処理部31〜34は、画像処理後のブロックを、制御部40を介して内蔵メモリ50の所定の領域に格納する。このとき、制御部40は、各処理部31〜34から入力される画像処理後のブロックを、CPU23から入力される設定情報等に基づく内蔵メモリ50の領域に順次格納する制御を実行する。また、各処理部31〜34は、内蔵メモリ50に格納された中間画像を読み出し、その中間画像に対して画像処理を実行する。このとき、制御部40は、各処理部31〜34から入力される座標情報やCPU23から入力される設定情報等に基づく内蔵メモリ50の領域から中間画像を順次読み出す制御を実行する。
次に、制御部40の内部構成例と併せて、画像処理回路22における処理の一例について説明する。
図2及び図3に示すように、制御部40は、切替回路41と、調停部42と、アドレス演算器43と、内蔵メモリ制御部44とを有している。
切替回路41は、CPU23からの設定情報に基づいて、各処理部31〜34が画像データに対してパイプライン処理を行う順番や回数を切り替える。例えば、図3に示した例における切替回路41は、ブレンド処理部31→フィルタ処理部32→解像度変換処理部33という順番でパイプライン処理が実施されるように制御する。なお、図3に示した例では、コーデック処理部34はパイプライン処理に含まれていない。
パイプライン処理における最も上流の処理部(ここでは、ブレンド処理部31)は、外部メモリ13に格納された入力画像IPを、所定のサイズに分割したブロックとして入力し、そのブロックに対して画像処理を実行する。本例のブレンド処理部31は、入力画像IP1内のブロックに含まれる画像データと、入力画像IP2内のブロックに含まれる画像データとを外部メモリ13から読み出し、それら2つの画像データに対してブレンド処理を実行する。
ここで、外部メモリ13に格納された入力画像IP(入力画像IP1,IP2)について説明する。
図4に示す入力画像IPは、例えば、ブレンド処理が施される一部の部分画像IPaが複数のブロックBLKに分割されて処理される。そして、ブレンド処理後の画像データ(部分画像IPa)が、ブレンド処理部31から出力される。すなわち、ブレンド処理の施された部分画像IPaが図5に示す中間画像MP1としてブレンド処理部31から出力される。このため、中間画像MP1は、上記ブロックBLKと同じ大きさのブロックBKに分割され、そのブロックBKの単位でブレンド処理部31から順次出力される。すなわち、ブレンド処理部31からは、中間画像MP1が、その中間画像MP1を水平方向(行方向、図中左右方向)及び水平方向と直交する垂直方向(列方向、図中上下方向)に分割したブロックBKの単位で順次出力される。
ここで、図5に示した中間画像MP1は、複数の画素(ここでは、24画素×24画素)が水平方向及び垂直方向に2次元状に配列された画像データである。そして、中間画像MP1では、所定のサイズのブロックBKが水平方向に6個配列され、ブロックBKが垂直方向に6個配列されている。なお、図5では、水平方向に並ぶブロックBKのブロック位置を水平位置H(H=0〜5)、垂直方向に並ぶブロックBKのブロック位置を垂直位置V(V=0〜5)としたときに、各ブロックBKを「BKVH」として示している。なお、以下の説明では、ブロックBKVH(つまり、ブロックBK00〜BK05,BK10〜BK15,BK20〜BK25,BK30〜BK35,BK40〜BK45,BK50〜BK55)を総称する場合には、ブロックBKと称する。また、以下の説明では、中間画像MP1における水平方向の座標をX座標、中間画像MP1における垂直方向の座標をY座標としたときに、中間画像MP1内の各画素データを、座標(X座標,Y座標)の画素データと称する。
複数のブロックBKでは、水平方向の画素数(サイズ)を異なるサイズに設定することが可能である。例えば、中間画像MP1の水平方向の最初のブロックBK、つまり水平位置H=0に配列されたブロックBK(ブロックBK00,BK10,BK20,BK30,BK40,BK50)の水平サイズHS0は、他のブロックBKの水平サイズHS1よりも大きい値に設定されている。図5の例では、水平サイズHS0が6画素に設定され、水平サイズHS1が4画素に設定されている。なお、中間画像MP1の水平方向の最後のブロックBK、つまり水平位置H=5に配列されたブロックBK(例えば、ブロックBK05)の水平サイズHS2は、同じ水平ライン(例えば、垂直位置V=0)に配列された他のブロックBK(例えば、ブロックBK00〜BK04)に含まれていない余りの画素数(ここでは、2画素)となる。
また、複数のブロックBKでは、垂直方向の画素数(サイズ)を異なるサイズに設定することが可能である。例えば、中間画像MP1の垂直方向の最初のブロックBK、つまり垂直位置V=0に配列されたブロックBK(つまり、ブロックBK00〜BK05)の垂直サイズVS0は、他のブロックBKの垂直サイズVS1よりも大きい値に設定されている。なお、中間画像MP1の垂直方向の最後のブロックBK、つまり垂直位置V=5に配列されたブロックBK(例えば、ブロックBK50)の垂直サイズVS2は、同じ垂直ライン(例えば、水平位置H=0)に配列された他のブロックBK(例えば、ブロックBK00,BK10,BK20,BK30,BK40)に含まれていない余りの画素数(ここでは、2画素)となる。
このように、各ブロックBKは、中間画像MP1全体の水平方向の画素数(ここでは、24画素)よりも少ない画素が水平方向に配列され、中間画像MP1全体の垂直方向の画素数(ここでは、24画素)よりも少ない画素が垂直方向に配列された短冊状(矩形状)の領域となっている。
複数のブロックBKは、図中に矢印で示すように、水平方向の図中左から右、及び垂直方向の図中上から下に向かってラスタースキャンの順序に従って順次出力される。具体的には、複数のブロックBKは、ブロックBK00→BK01→BK02→BK03→BK04→BK05という順番で順次出力され、続いて、ブロックBK10→BK11→BK12→BK13→BK14→BK15という順番で順次出力される。このように、複数のブロックBKに対する処理順序は、最初に進む処理方向が水平方向となる処理順序である。さらに、各ブロックBKに含まれる複数の画素は、上述したラスタースキャンの順序と同様に左上から右下に向かって順次処理される。具体的には、ブロックBK00では、座標(0,0)から座標(5,0)まで水平方向に沿って座標を1画素ずつシフトさせて画素データが順次出力される。続いて、垂直方向に沿って座標を1画素分シフトさせ、座標(0,1)から座標(5,1)の画素データが順次出力される。以後も同様に、座標(0,2)から座標(5,2)の画素データ、座標(0,3)から座標(5,3)の画素データ、座標(0,4)から座標(5,4)の画素データ、座標(0,5)から座標(5,5)の画素データが順次出力される。
図3に示すように、処理部31〜34は、それぞれの処理タイミングに応じて内蔵メモリ50をアクセスするための要求(書き込み要求又は読み出し要求)を含む各種信号を調停部42に出力する。調停部42は、処理部31〜34の要求を調停し、調停結果に応じて1つの処理部に対してアクセス許可を与える。
調停部42は、ライト調停部42Aと、リード調停部42Bとを有している。ライト調停部42Aは、処理部31〜34から出力され競合する書き込み要求を、例えば、各処理部31〜34に対応して設定された優先度に従って調停し、1つの処理部に対して内蔵メモリ50へのライトアクセスを許可する。ライト調停部42Aによりライトアクセスが許可された処理部は、内蔵メモリ50に対するライトアクセスのための制御信号(各種コマンドやアドレス等)及び処理済の画像データ(例えば、中間画像)をライト調停部42Aに出力する。ライト調停部42Aは、調停結果に応じた書き込み要求と、上記ライトアクセスが許可された処理部からの制御信号及び中間画像とを、アドレス演算器43を介して内蔵メモリ制御部44に出力する。
また、リード調停部42Bは、処理部31〜34から出力され競合する読み出し要求を、例えば、各処理部31〜34に対応して設定された優先度に従って調停し、1つの処理部に対して内蔵メモリ50へのリードアクセスを許可する。リードアクセスが許可された処理部は、内蔵メモリ50に対するリードアクセスのための制御信号(各種コマンドやアドレス等)をリード調停部42Bに出力する。リード調停部42Bは、調停結果に応じた1つの読み出し要求と、上記リードアクセスが許可された処理部からの制御信号を内蔵メモリ制御部44に出力する。
図3に示した例において、ブレンド処理部31がライト調停部42Aからライトアクセスの許可を受けると、ブレンド処理後の中間画像MP1(図5参照)及び制御信号がブレンド処理部31からライト調停部42Aに出力される。すると、ライト調停部42Aから、ブレンド処理部31からの制御信号及び中間画像MP1が、アドレス演算器43及び内蔵メモリ制御部44を介して内蔵メモリ50に出力される。そして、中間画像MP1が内蔵メモリ50の所定の領域(ここでは、バッファ領域51)に格納される。
なお、バッファ領域51から読み出された中間画像MP1に対してフィルタ処理が施されると、そのフィルタ処理後の画像データ(中間画像MP2)が内蔵メモリ50の所定の領域(ここでは、バッファ領域52)に格納される。すなわち、本例の内蔵メモリ50は、バッファ領域51とバッファ領域52とを有している。
アドレス演算器43は、CPU23からの設定情報に基づいて、調停部42から入力される処理対象の画素データの座標位置から、当該処理対象の画素データを格納する内蔵メモリ50のアドレスADDを算出する。詳述すると、上記設定情報には、バッファ領域51及びバッファ領域52の水平サイズH1と、バッファ領域51及びバッファ領域52の垂直サイズV1とが含まれる。さらに、上記設定情報には、バッファ領域51及びバッファ領域52の開始アドレスがアドレスオフセットofsとして含まれている。そして、アドレス演算器43は、上記設定情報に基づいて、処理対象の画素データの中間画像MP1,MP2におけるX座標及びY座標から、以下の式を用いて内蔵メモリ50のアドレスADDに算出する。
ADD=(H1×m+n)+ofs …(1)
上記式1における剰余mは、処理対象の画素データのY座標を垂直サイズV1で除算したときの剰余である。また、式1における剰余nは、処理対象の画素データのX座標を水平サイズH1で除算したときの剰余である。そして、アドレス演算器43は、内蔵メモリ50のアドレスADDと、書き込み要求又は読み出し要求とを内蔵メモリ制御部44に出力する。
このように、CPU23からの設定情報に基づいてアドレスADDが算出されることにより、内蔵メモリ50の所定の領域がバッファ領域51及びバッファ領域52に割り当てられる。換言すると、CPU23は、撮像装置10の動作モード等(例えば、画像処理回路22で入力画像に対して実施される処理内容)に応じて、バッファ領域51及びバッファ領域52のサイズを設定する。
内蔵メモリ制御部44は、書き込み要求の場合、要求元の処理部から出力された中間画像MP1,MP2を、アドレス演算器43で算出されたアドレスADDにより指定される内蔵メモリ50の領域に格納する。また、内蔵メモリ制御部44は、読み出し要求の場合、アドレス演算器43で算出されたアドレスADDにより指定される内蔵メモリ50の領域から中間画像MP1,MP2を読み出し、その読み出した中間画像MP1,MP2を要求元の処理部に出力する。
例えば、図3に示した例において、ブレンド処理部31がライトアクセスの許可を受けると、内蔵メモリ制御部44は、ブレンド処理部31から出力されるブレンド処理後の中間画像MP1を内蔵メモリ50のバッファ領域51に格納する。このとき、ブレンド処理部31は、ブレンド処理が終了した画素データの中間画像MP1におけるXY座標(X座標及びY座標)を処理済座標FC1として下流のフィルタ処理部32に出力する。
フィルタ処理部32は、上流のブレンド処理部31から入力される処理済座標FC1が、CPU23からの設定情報により設定される所定の座標まで進むと、内蔵メモリ50のバッファ領域51から中間画像MP1を読み出すための読み出し要求をリード調停部42Bに出力する。フィルタ処理部32がリード調停部42Bからリードアクセスの許可を受けると、フィルタ処理部32から制御信号が出力され、その制御信号がリード調停部42Bを介してアドレス演算器43に出力される。すると、アドレス演算器43では、処理対象の画素データの中間画像MP1におけるXY座標から、その画素データが格納されている内蔵メモリ50のアドレスADDが上記式1から算出される。そして、内蔵メモリ制御部44は、アドレスADDで指定される内蔵メモリ50の領域から中間画像MP1を読み出し、読み出した中間画像MP1をフィルタ処理部32に出力する。
フィルタ処理部32は、バッファ領域51から読み出した中間画像MP1に対して所定のフィルタ処理を実行する。このとき、フィルタ処理部32は、中間画像MP1を、所定のサイズに分割したブロックとして入力し、そのブロックに対して画像処理を実行する。そして、フィルタ処理部32は、ライト調停部42Aからライトアクセスの許可を受けると、フィルタ処理後の画像データを図6に示す中間画像MP2としてライト調停部42Aに出力する。このとき、フィルタ処理部32は、中間画像MP2を、その中間画像MP2を水平方向及び垂直方向に分割したブロックBLの単位で順次出力する。その後、アドレス演算器43及び内蔵メモリ制御部44の制御によって中間画像MP2が内蔵メモリ50のバッファ領域52に格納される。このとき、フィルタ処理部32は、フィルタ処理が終了した画素データの中間画像MP2におけるXY座標を処理済座標FC2として下流の解像度変換処理部33に出力する。また、フィルタ処理部32は、フィルタ処理の実行に際して不要となった中間画像MP1の画素データのXY座標を不要座標NC1として上流のブレンド処理部31に出力する。なお、ブレンド処理部31では、フィルタ処理部32からの不要座標NC1に基づいて、その不要座標NC1の画素データが格納されたバッファ領域51の領域に対する上書きが許可される。
ここで、フィルタ処理部32から出力される中間画像MP2について説明する。
図6に示した中間画像MP2は、複数の画素(ここでは、24画素×24画素)が水平方向及び垂直方向に2次元状に配列された画像データである。すなわち、中間画像MP2は、中間画像MP1と同じサイズの画像データである。そして、中間画像MP2では、所定のサイズのブロックBLが水平方向に6個配列され、ブロックBLが垂直方向に6個配列されている。なお、図6では、水平方向に並ぶブロックBLのブロック位置を水平位置H(H=0〜5)、垂直方向に並ぶブロックBLのブロック位置を垂直位置V(V=0〜5)としたときに、各ブロックBLを「BLVH」として示している。なお、以下の説明では、ブロックBLVH(つまり、ブロックBL00〜BL05,BL10〜BL15,BL20〜BL25,BL30〜BL35,BL40〜BL45,BL50〜BL55)を総称する場合には、ブロックBLと称する。また、以下の説明では、中間画像MP2における水平方向の座標をX座標、中間画像MP2における垂直方向の座標をY座標としたときに、中間画像MP2内の各画素データを、座標(X座標,Y座標)の画素データと称する。
複数のブロックBLでは、水平方向の画素数(サイズ)を異なるサイズに設定することが可能であり、垂直方向の画素数(サイズ)を異なるサイズに設定することが可能である。但し、図6に示した例では、全てのブロックBLが同じサイズに設定されている。すなわち、中間画像MP2の水平方向の最初のブロックBL(つまり、ブロックBL00,BL10,BL20,BL30,BL40,BL50)の水平サイズHS10と、他のブロックBLの水平サイズHS11とが全て4画素に設定されている。なお、本例では、中間画像MP2の水平方向の最後のブロックBL(つまり、ブロックBL05,BL15,BL25,BL35,BL45,BL55)の水平サイズHS12も4画素になっている。また、中間画像MP2の垂直方向の最初のブロックBL(つまり、ブロックBL00〜BL05)の垂直サイズVS10と、他のブロックBLの垂直サイズVS11とが全て4画素に設定されている。なお、本例では、中間画像MP2の垂直方向の最後のブロックBL(つまり、ブロックBL50〜BL55)の垂直サイズVS12も4画素になっている。
このように、各ブロックBLは、中間画像MP2全体の水平方向の画素数(ここでは、24画素)よりも少ない画素が水平方向に配列され、中間画像MP2全体の垂直方向の画素数(ここでは、24画素)よりも少ない画素が垂直方向に配列された短冊状(矩形状)の領域となっている。
複数のブロックBLは、図中に矢印で示すように、水平方向の図中左から右、及び垂直方向の図中上から下に向かってラスタースキャンの順序に従って順次出力される。具体的には、複数のブロックBLは、ブロックBL00→BL01→BL02→BL03→BL04→BL05という順番で順次出力され、続いて、ブロックBL10→BL11→BL12→BL13→BL14→BL15という順番で順次出力される。さらに、各ブロックBLに含まれる複数の画素は、上述したラスタースキャンの順序と同様に左上から右下に向かって順次処理される。具体的には、ブロックBL00では、座標(0,0)から座標(3,0)まで水平方向に沿って座標を1画素ずつシフトさせて画素データが順次出力される。続いて、垂直方向に沿って座標を1画素分シフトさせ、座標(0,1)から座標(3,1)の画素データが順次出力される。以後も同様に、座標(0,2)から座標(3,2)の画素データ、座標(0,3)から座標(3,3)の画素データが順次出力される。
図3に示すように、解像度変換処理部33は、上流のフィルタ処理部32から入力される処理済座標FC2が、CPU23からの設定情報により設定される所定の座標まで進むと、内蔵メモリ50のバッファ領域52から中間画像MP2を読み出すための読み出し要求をリード調停部42Bに出力する。解像度変換処理部33がリード調停部42Bからリードアクセスの許可を受けると、解像度変換処理部33から制御信号が出力され、その制御信号がリード調停部42Bを介してアドレス演算器43に出力される。すると、アドレス演算器43では、処理対象の画素データの中間画像MP2におけるXY座標から、その画素データが格納されている内蔵メモリ50のアドレスADDが算出される。そして、内蔵メモリ制御部44は、アドレスADDで指定される内蔵メモリ50の領域から中間画像MP2を読み出し、読み出した中間画像MP2を解像度変換処理部33に出力する。
解像度変換処理部33は、バッファ領域52から読み出した中間画像MP2に対して解像度変換処理(拡大処理又は縮小処理)を実行する。このとき、解像度変換処理部33は、中間画像MP2を、所定のサイズに分割したブロックとして入力し、そのブロックに対して画像処理を実行する。例えば、解像度変換処理部33は、バッファ領域52に格納したときと同様の順序で、中間画像MP2をバッファ領域52から読み出す。具体的には、解像度変換処理部33は、図6に示した中間画像MP2を、ブロックBL00→BL01→BL02→BL03→BL04→BL05という順番で順次入力し、続いて、ブロックBL10→BL11→BL12→BL13→BL14→BL15という順番で順次入力する。解像度変換処理部33は、入力したブロックBL毎に所定の解像度変換処理を実行する。
そして、解像度変換処理部33は、調停部42(図2参照)から外部メモリ13に対するライトアクセスの許可を受けると、解像度変換処理後の画像データを出力画像OPとして外部メモリ13に格納する。このとき、解像度変換処理部33は、解像度変換処理の実行に際して不要となった中間画像MP2の画素データのXY座標を不要座標NC2として上流のフィルタ処理部32に出力する。なお、フィルタ処理部32では、解像度変換処理部33からの不要座標NC2に基づいて、その不要座標NC2の画素データが格納されたバッファ領域52に対する上書きが許可される。
なお、本実施形態において、画像処理プロセッサ12は画像処理装置の一例、外部メモリ13は外部メモリの一例、CPU23は制御回路の一例、制御部40は制御部の一例、内蔵メモリ50はメモリ部の一例、水平方向は第1方向の一例、垂直方向は第2方向の一例である。
次に、図5〜図30に従って、画像処理回路22の動作について説明する。ここでは、3つの具体例を挙げつつ、画像処理回路22の動作について説明する。
(第1の具体例)
まず、図5〜図17に従って、第1の具体例における画像処理回路22の動作について説明する。
図7に示した第1の具体例の画像処理回路22では、図3に示した例と同様に、ブレンド処理部31→フィルタ処理部32→解像度変換処理部33という順番でパイプライン処理が実行される。このとき、ブレンド処理部31から出力されるブレンド処理後の中間画像MP1、つまり図5に示した中間画像MP1は、図中矢印で示した順番で内蔵メモリ50のバッファ領域51に格納される。また、フィルタ処理部32では、バッファ領域51から読み出された中間画像MP1に対して、フィルタサイズが5画素×5画素に設定されたフィルタ処理が実行される。このフィルタ処理部32から出力されるフィルタ処理後の中間画像MP2、つまり図6に示した中間画像MP2は、図中矢印で示した順番で内蔵メモリ50のバッファ領域52に格納される。そして、解像度変換処理部33では、バッファ領域52から読み出された中間画像MP2に対して、バイキュービック法を用いて、拡大率が1/3.9倍に設定された解像度変換処理(縮小処理)が実行される。この解像度変換処理部33から出力される解像度変換処理後の出力画像OPは、外部メモリ13の所定の領域に格納される。
図8(c)に示すように、本例の内蔵メモリ50では、ブレンド処理後の中間画像MP1が格納されるバッファ領域51と、フィルタ処理後の中間画像MP2が格納されるバッファ領域52とが連続した領域に割り当てられている。
図8(a)に示すように、バッファ領域51は、192画素分のデータを格納可能なメモリ領域である。具体的には、内蔵メモリ50のアドレス「0」からアドレス「191」までの領域がバッファ領域51となる。このとき、バッファ領域51の水平サイズH1は、中間画像MP1全体の水平方向の画素数(ここでは、24画素)が格納可能なサイズに設定されている。また、バッファ領域51の垂直サイズV1は、垂直方向の8画素のデータが格納可能なサイズに設定されている。すなわち、本例のバッファ領域51は、中間画像MP1の水平8ライン分の画素データを格納可能なサイズに設定されている。
バッファ領域51は、短冊状の複数個の短冊バッファA0〜A5を有している。各短冊バッファA0〜A5の垂直方向のサイズは、バッファ領域51の垂直サイズV1と同一のサイズに設定されている。各短冊バッファA0〜A5の水平方向のサイズは、対応するブロックBK(図5参照)の水平方向のサイズと同一のサイズに設定されている。具体的には、バッファ領域51の先頭(最も左側)に配置された短冊バッファA0の水平方向のサイズは、中間画像MP1の水平位置H=0に配列されたブロックBK(例えば、ブロックBK00)の水平方向のサイズ(ここでは、6画素)を格納可能なサイズに設定されている。同様に、短冊バッファA1〜A4の水平方向のサイズは、対応するブロックBK01〜BK04の水平方向のサイズ(ここでは、4画素)を格納可能なサイズに設定されている。バッファ領域51の最後(最も右側)に配置された短冊バッファA1の水平方向のサイズは、中間画像MP1の水平位置H=5に配列されたブロックBK(例えば、ブロックBK05)の水平方向のサイズ(ここでは、2画素)を格納可能なサイズに設定されている。
さらに、上記アドレス演算器43(図3参照)で式1を用いてアドレスADDが算出し、そのアドレスADDで指定される内蔵メモリ50の領域に中間画像MP1を格納することにより、各短冊バッファA0〜A5には、対応するブロックBKの画素データが循環的に格納される。具体的には、短冊バッファA0には、中間画像MP1における水平位置H=0であるブロックBK(つまり、ブロックBK00,BK10,BK20,BK30,BK40,BK50)の画素データが循環的に格納される。同様に、短冊バッファA1には水平位置H=1であるブロックBKの画素データが循環的に格納され、短冊バッファA2には水平位置H=2であるブロックBKの画素データが循環的に格納され、短冊バッファA3には水平位置H=3であるブロックBKの画素データが循環的に格納される。また、短冊バッファA4には水平位置H=4であるブロックBKの画素データが循環的に格納され、短冊バッファA5には水平位置H=5であるブロックBKの画素データが循環的に格納される。
図8(b)に示すように、本例のバッファ領域52は、120画素分のデータを格納可能なメモリ領域である。具体的には、内蔵メモリ50のアドレス「192」からアドレス「311」までの領域がバッファ領域52となる。すなわち、バッファ領域52は、バッファ領域51に続くアドレス「192」から120画素分のデータが格納可能な領域に設定されている。このとき、バッファ領域52の水平サイズH1は、中間画像MP2全体の水平方向の画素数(ここでは、24画素)が格納可能なサイズに設定されている。また、バッファ領域52の垂直サイズV1は、垂直方向の5画素分の画素データが格納可能なサイズに設定されている。すなわち、本例のバッファ領域52は、中間画像MP2の水平5ライン分の画素データを格納可能なサイズに設定されている。
バッファ領域52は、短冊状の複数個の短冊バッファB0〜B5を有している。各短冊バッファB0〜B5の垂直方向のサイズは、バッファ領域52の垂直サイズV1と同一のサイズに設定されている。各短冊バッファB0〜B5の水平方向のサイズは、対応するブロックBL00〜BL05(図6参照)の水平方向のサイズと同一のサイズに設定されている。ここで、本例では、ブロックBL00〜BL05の水平方向のサイズが全て4画素であるため、短冊バッファB0〜B5の水平方向のサイズが全て4画素を格納可能なサイズに設定されている。
さらに、上記アドレス演算器43(図3参照)で式1を用いてアドレスADDが算出され、そのアドレスADDで指定される内蔵メモリ50の領域に中間画像MP2が格納されることにより、各短冊バッファB0〜B5には、対応するブロックBLの画素データが循環的に格納される。具体的には、短冊バッファB0には、中間画像MP2における水平位置H=0であるブロックBL(つまり、ブロックBL00,BL10,BL20,BL30,BL40,BL50)の画素データが循環的に格納される。同様に、短冊バッファB1には水平位置H=1であるブロックBLの画素データが循環的に格納され、短冊バッファB2には水平位置H=2であるブロックBLの画素データが循環的に格納され、短冊バッファB3には水平位置H=3であるブロックBLの画素データが循環的に格納される。また、短冊バッファB4には水平位置H=4であるブロックBLの画素データが循環的に格納され、短冊バッファB5には水平位置H=5であるブロックBLの画素データが循環的に格納される。
図8(d)に示すように、解像度変換処理部33から出力される出力画像OPが格納される外部メモリ13の領域は、例えば、7画素×7画素のデータを格納可能なメモリ領域が確保されている。
次に、バッファ領域51及びバッファ領域52を上述したサイズに設定した理由、及び中間画像MP1,MP2のブロックBK,BLを上述したサイズに設定した理由について説明する。
まず、図9(a)に示すように、本例の解像度変換処理部33で実行されるバイキュービック法は、画素値を求めるべき着目点近傍の16画素(4画素×4画素)の入力画素値(図中の破線枠参照)に基づいて3次の多項式を計算し、その着目点の画素値(つまり、解像度変換後の画素値)を求める方法である。このため、解像度変換処理部33で解像度変換処理を実行するためには、垂直方向に並ぶ4画素分の画素値と水平方向に並ぶ4画素分の画素値が必要となる。すなわち、解像度変換処理部33で解像度変換処理を実行するためには、バッファ領域52から中間画像MP2の垂直4画素×水平4画素分の画素データを読み出す必要がある。このため、中間画像MP2のブロックBLのサイズは、解像度変換処理部33における1回の解像度変換処理に必要な数の画素値を含むサイズ(ここでは、4画素×4画素)に設定されている。換言すると、出力画像OPの1つのブロック(ここでは、1画素分)の画素データが解像度変換処理部33から出力可能なように、ブロックBLのサイズが設定されている。
さらに、当該解像度変換処理における拡大率が1/3.9倍のように1/4倍よりも大きくなると、例えば、座標(0,0)の出力画素値を算出する際に使用した入力画素値の一部が、座標(0,1)の出力画素値を算出する際に重複して使用される場合がある。具体的には、入力画像の座標(0,0)〜(3,3)の16画素の画素値に基づいて出力画像の座標(0,0)の画素値が算出され、入力画像の座標(0,3)〜(3,6)の16画素の画素値に基づいて出力画像の座標(0,1)の画素値が算出される。すなわち、図示の例では、入力画像の座標(0,3)〜(3,3)の4画素の画素値、つまり演算対象の入力画素値のうち水平1ライン分の画素値が、出力画像の座標(0,0)の画素値と座標(0,1)の画素値を算出する際に重複して使用される。以下の説明では、このように垂直方向に隣接して並ぶ出力画像の画素値を算出する際に重複して使用される水平ライン(糊代部分)を「垂直重複ライン」と称する。なお、拡大率が1/3.9倍のバイキュービック法では、垂直重複ラインが1ラインとなる。
以上説明したように、解像度変換処理部33における処理で垂直重複ラインが必要である場合には、中間画像MP2が格納されるバッファ領域52の水平サイズH1は、中間画像MP2全体の水平方向のサイズと等しくなるように設定される。これは、解像度変換処理部33において、図6に示すように、中間画像MP2をブロックBL00→BL01→…→BL05→BL10という順番で処理する際に、ブロックBL10に対して処理するときにブロックBL00の一部(つまり、垂直重複ライン)のデータが必要になるためである。すなわち、ブロックBL10に対する処理を実行するまで、ブロックBL00の一部のデータをバッファ領域52に格納しておく必要があるため、バッファ領域52の水平サイズH1が中間画像MP2全体の水平方向のサイズと等しいサイズに設定されている。また、バッファ領域52の垂直サイズV1は、ブロックBLの垂直サイズVS11(ここでは、4ライン)に、垂直重複ライン(ここでは、1ライン)を加えたライン数(ここでは、5ライン)を格納可能なサイズに設定される。これは、解像度変換処理部33において、中間画像MP2をブロックBL00→BL01→…→BL05→BL10という順番で処理する際に、ブロックBL10に対して処理するときにブロックBL00の一部(つまり、垂直重複ライン)のデータがブロックBL10の画素データによって上書きされないようにするためである。
また、図9(b)に示すように、本例のフィルタ処理部32で実行されるフィルタ処理は、画素値を求めるべき着目点の入力画素(黒丸参照)と、その周辺の周辺画素である24画素の入力画素値(図中の破線枠参照)とに基づいて、上記着目点の画素値(つまり、フィルタ処理後の画素値)を求める方法である。このため、フィルタ処理部32でフィルタ処理を実行するためには、垂直方向に並ぶ5画素分の画素値と水平方向に並ぶ5画素分の画素値が必要となる。すなわち、フィルタ処理部32でフィルタ処理を実行するためには、バッファ領域51から中間画像MP1の垂直5画素×水平5画素分の画素データを読み出す必要がある。さらに、図9(b)に示すように、フィルタサイズが5×5のフィルタ処理では、垂直重複ラインが2ラインとなる。
以上説明したフィルタ処理部32の上流のブレンド処理部31から出力される中間画像MP1のブロックBKのサイズは、フィルタ処理部32からブロックBL毎に中間画像MP2を出力可能なサイズに設定される。具体的には、図5に示した中間画像MP1のブロックBKの垂直サイズVS1及び水平サイズHS1は、ブレンド処理部31の下流のフィルタ処理部32から出力されるブロックBLの垂直サイズVS11及び水平サイズHS11とそれぞれ同じサイズに設定される。また、ブロックBKの垂直サイズVS0及び水平サイズHS0は、垂直サイズVS1及び水平サイズHS1(つまり、ブロックBLの垂直サイズVS11及び水平サイズHS11)に、下流のフィルタ処理における垂直重複ライン(ここでは、2ライン)を加えたサイズに設定される。
そして、上述のようにフィルタ処理部32における処理で垂直重複ラインが必要である場合には、中間画像MP1が格納されるバッファ領域51の水平サイズH1は、中間画像MP1全体の水平方向のサイズと等しくなるように設定される。また、バッファ領域51の垂直サイズV1は、ブレンド処理部31から出力されるブロックBKの垂直サイズVS1(ここでは、4ライン)に、フィルタ処理における垂直重複ライン(ここでは、2ライン)を加えたライン数(ここでは、6ライン)以上のライン数を格納可能なサイズに設定される。本例のバッファ領域51の垂直サイズV1は、上述した6ラインに、更にマージンとして2ラインを加えたライン数、つまり8ラインを格納可能なサイズに設定されている。
次に、中間画像MP1,MP2の内蔵メモリ50への格納方法について詳述する。
図7に示したブレンド処理部31は、外部メモリ13から2つの入力画像IP、つまり入力画像IP1及び入力画像IP2を読み出し、それら2つの入力画像IP1,IP2を混合して中間画像MP1を生成するブレンド処理を実行する。なお、ブレンド処理は、2つの入力画像IP1,IP2の対応する画素同士を入力画素としてブレンド演算するため、注目画素の周辺の周辺画素はブレンド演算に不要である。
詳述すると、図7に示したパイプライン処理が開始されると、ブレンド処理部31は、まず、中間画像MP1の左上のブロックBK00に対応する入力画像IP1,IP2に対してブレンド処理を実行する。そして、ブレンド処理部31は、ブレンド処理後の画像データ、つまり中間画像MP1をブロックBKの単位で出力し、そのブロックBKをバッファ領域51に格納する。具体的には、図5に示すように、ブレンド処理部31は、まず、ブロックBK00内の座標(0,0)〜座標(5,0)までのブレンド処理後の画素データを内蔵メモリ50のバッファ領域51に格納する。このとき、ブレンド処理部31からは、ブレンド処理後の画素データと併せて、その画素データの中間画像MP1におけるXY座標が出力される。そして、アドレス演算器43では、ブレンド処理部31からのXY座標に基づいて、上述した式1を用いて内蔵メモリ50のアドレスADDが算出され、そのアドレスADDで指定される内蔵メモリ50の領域にブレンド処理後の画素データが格納される。なお、本例の式1では、バッファ領域51の水平サイズH1が「24」、バッファ領域51の垂直サイズV1が「8」、バッファ領域51の開始アドレス、つまりアドレスオフセットofsが「0」となる。
図10は、中間画像MP1の各画素データのXY座標と、内蔵メモリ50(バッファ領域51)のアドレスADDとの対応を示した図である。図10では、中間画像MP1内に示した数字が内蔵メモリ50(バッファ領域51)のアドレスADDを示している。
図10に示すように、中間画像MP1の座標(0,0)の画素データは、内蔵メモリ50のアドレス「0」に格納される。同様に、中間画像MP1の座標(1,0)、(2,0)、(3,0)、(4,0)、(5,0)の画素データは、内蔵メモリ50のアドレス「1」、「2」、「3」、「4」、「5」に順次格納される。すなわち、図12(a)に示すように、ブロックBK00の1ライン目の画素データは、バッファ領域51の短冊バッファA0の1ライン目に順次格納される。
ブロックBK00の1ライン目の画素データの出力が終了すると、続いて、ブロックBK00の2ライン目に対応する入力画像IP1,IP2に対するブレンド処理が実行される。すると、図10に示すように、中間画像MP1の座標(0,1)、(1,1)、(2,1)、(3,1)、(4,1)、(5,1)の画素データが、内蔵メモリ50のアドレス「24」、「25」、「26」、「27」、「28」、「29」に順次格納される。すなわち、ブロックBK00の2ライン目の画素データは、短冊バッファA0の2ライン目の先頭のアドレス「24」から順に格納される。以後も同様に、ブロックBK00の3ライン目の画素データが、短冊バッファA0の3ライン目の先頭のアドレス「48」から順に格納される。なお、以下では、説明の便宜上、中間画像MP1における処理対象の画素データに対応する入力画像に対してブレンド処理を実行し、上記処理対象の画素データをバッファ領域51に格納する一連の処理を、単に「中間画像MP1における処理対象の画素データの処理」ともいう。
図12(a)に示すように、ブロックBK00の3ライン目の最後の座標(5,2)の画素データがバッファ領域51に格納されると(図中白丸参照)、フィルタ処理部32によるフィルタ処理が開始される。すなわち、フィルタ処理部32は、例えば、ブレンド処理部31から処理済座標FC1として座標(5,2)が入力されると、リード調停部42Bに読み出し要求を発行し、バッファ領域51からの中間画像MP1の読み出しを開始する。フィルタ処理部32は、バッファ領域51に格納されたブロックBK00の1〜3ライン目の画素データを読み出し、それら1〜3ライン目の画素データに対してフィルタ処理を実行する。このとき、フィルタ処理部32によるフィルタ処理では、注目画素を中心として5画素×5画素の画素データが必要であるため、Y座標=0より上側の水平ラインの画素データはY座標=0の画素データで代用し、X座標=0よりも左側の垂直ラインの画素データはX座標=0の画素データで代用する。
このようなフィルタ処理が実行されると、中間画像MP2のブロックBL00の1ライン目の画素データがバッファ領域52に格納される。このとき、フィルタ処理部32からは、フィルタ処理後の画素データと併せて、その画素データの中間画像MP2におけるXY座標が出力される。そして、アドレス演算器43では、フィルタ処理部32からのXY座標に基づいて、上述した式1を用いて内蔵メモリ50のアドレスADDが算出され、そのアドレスADDで指定される内蔵メモリ50の領域にフィルタ処理後の画素データが格納される。なお、本例の式1では、バッファ領域52の水平サイズH1が「24」、バッファ領域52の垂直サイズV1が「5」、バッファ領域52の開始アドレス、つまりアドレスオフセットofsが「192」となる。
図11は、中間画像MP2の各画素データのXY座標と、内蔵メモリ50(バッファ領域52)のアドレスADDとの対応を示した図である。図11では、中間画像MP2内に示した数字が内蔵メモリ50(バッファ領域52)のアドレスADDを示している。
図11に示すように、中間画像MP2の座標(0,0)の画素データは、内蔵メモリ50のアドレス「192」に格納される。同様に、中間画像MP2の座標(1,0)、(2,0)、(3,0)の画素データは、内蔵メモリ50のアドレス「193」、「194」、「195」に順次格納される。すなわち、図12(a)に示すように、ブロックBL00の1ライン目の画素データは、バッファ領域52の短冊バッファB0の1ライン目に順次格納される。なお、以下では、説明の便宜上、中間画像MP2における処理対象の画素データに対応する入力画像に対してフィルタ処理を実行し、上記処理対象の画素データをバッファ領域52に格納する一連の処理を、単に「中間画像MP2における処理対象の画素データの処理」ともいう。
続いて、図12(b)に示すように、ブロックBK00の4ライン目の処理が終了すると(図中三角参照)、ブロックBK00の1〜4ライン目の画素データを用いてフィルタ処理が実行される。これにより、ブロックBL00の2ライン目の画素データが短冊バッファB0の2ライン目に格納される。同様に、ブロックBK00の5ライン目の処理が終了すると(四角参照)、ブロックBK00の1〜5ライン目の画素データを用いてフィルタ処理が実行される。これにより、ブロックBL00の3ライン目の画素データが短冊バッファB0の3ライン目に格納される。ここで、ブロックBL00の3ライン目の最後の座標(3,2)の画素データがバッファ領域52に格納されると、これ以降のフィルタ処理においてブロックBK00の1ライン目の画素データは不要となる。このため、フィルタ処理部32は、ブロックBK00の1ライン目の最後の座標(5,0)を不要座標NC1としてブレンド処理部31に出力する。そして、ブレンド処理部31は、不要座標NC1として座標(5,0)が入力されると、ブロックBK00の1ライン目の画素データが格納されている短冊バッファA0の1ライン目の領域に対する上書きを許可する。
その後も同様に、ブロックBK00の6ライン目(最終ライン)の処理が終了すると(菱形参照)、ブロックBK00の2〜6ライン目の画素データを用いてフィルタ処理が実行される。これにより、ブロックBL00の4ライン目(最終ライン)の画素データが短冊バッファB0の4ライン目に順次格納される。このとき、ブレンド処理部31は、不要座標NC1として座標(5,1)が入力されると、ブロックBK00の2ライン目の画素データが格納されている短冊バッファA0の2ライン目の領域に対する上書きを許可する。なお、これ以降の処理では、中間画像MP2の水平位置H=0のブロックBL00,BL10,BL20,BL30,BL40,BL50の1ライン分の画素データが短冊バッファB0に格納される毎に、短冊バッファA0の1ライン分の領域に対する上書きが許可される。
このように、ブロックBK00の全画素データのバッファ領域51への格納が終了すると、ブロックBL00の全ての画素データに対する処理を実行することができる。そして、ブロックBL00の最終ラインの最後の座標(3,3)の画素データがバッファ領域52に格納されると(黒丸参照)、解像度変換処理部33による解像度変換処理が開始される。すなわち、解像度変換処理部33は、フィルタ処理部32から処理済座標FC2として例えば座標(3,3)が入力されると、リード調停部42Bに読み出し要求を発行し、バッファ領域52からの中間画像MP2の読み出しを開始する。解像度変換処理部33は、バッファ領域52に格納されたブロックBL00の1〜4ライン目の画素データを読み出し、それら1〜4ライン目の画素データを用いて解像度変換処理を実行する。これにより、出力画像OPの座標(0,0)の画素データが解像度変換処理部33から出力され、その画素データが外部メモリ13に格納される。ここで、出力画像OPの座標(0,0)の画素データが外部メモリ13に格納されると、これ以降の解像度変換処理においてブロックBL00の1〜3ライン目の画素データは不要となる。このため、解像度変換処理部33は、ブロックBL00の3ライン目の最後の座標(3,2)を不要座標NC2としてフィルタ処理部32に出力する。そして、フィルタ処理部32は、不要座標NC2として座標(3,2)が入力されると、ブロックBL00の1〜3ライン目の画素データが格納されている短冊バッファB0の1〜3ライン目の領域に対する上書きを許可する。
以上説明した動作により、中間画像MP1の左上のブロックBK00、中間画像MP2の左上のブロックBL00及び出力画像OPの座標(0,0)の画素データの処理が完了する。なお、以上説明した処理では、出力画像OPの座標(0,0)の画素データの出力が可能なように、ブロックBL00のサイズが設定され、そのブロックBL00の全ての画素データの出力が可能なように、ブロックBK00のサイズが設定されている。
続いて、図13に示すように、ブロックBK00の処理が終了すると、ブロックBK00の右隣のブロックBK01の1ライン目の処理が開始され、その1ライン目の画素データが短冊バッファA1の1ライン目に格納される。次いで、ブロックBK01の2,3ライン目の処理が終了すると(図中白丸参照)、ブロックBL00の右隣のブロックBL01の1ライン目の処理が開始され、その1ライン目の画素データが短冊バッファB1の1ライン目に格納される。その後、ブロックBK01の最終ラインの処理が終了し、ブロックBL01の最終ラインの処理が終了すると、出力画像OPの座標(1,0)の画素データの処理が開始される。以後も同様に、ブロックBK00と同じ垂直位置V=0に配列されたブロックBK02,BK03,BK04,BK05がこの順番でバッファ領域51(短冊バッファA2,A3,A4,A5)に順次格納される。この処理と並行して、ブロックBL00と同じ垂直位置V=0に配列されたブロックBL02,BL03,BL04,BL05がこの順番でバッファ領域52(短冊バッファB2,B3,B4,B5)に順次格納される。さらに、これらの処理と並行して、出力画像OPの1ライン目の画素データ、つまり座標(2,0)、(3,0)、(4,0)、(5,0)、(6,0)の画素データがこの順番で外部メモリ13に順次格納される。
なお、上述したブロックBK00,BK01に対する処理と、ブロックBL00,BL01に対する処理と、出力画像OPの座標(0,0)、(0,1)の画素データに対する処理とは、処理済座標FC1,FC2及び不要座標NC1,NC2に基づいて並行して実行される。
次に、図14(a)に示すように、ブロックBK05の処理が終了すると、中間画像MP1の2段目先頭(つまり、垂直位置V=1及び水平位置H=0)のブロックBK10の1ライン目の処理が実行される。これにより、ブロックBK10の1ライン目の画素データが、バッファ領域51の短冊バッファA0の7ライン目に順次格納される。すなわち、ブロックBK10の1ライン目の画素データは、ブロックBK00の最終ラインが格納された領域(ここでは、短冊バッファA0の6ライン目)の直下の領域(ここでは、短冊バッファA0の7ライン目)に格納される。
ブロックBK10の1ライン目の処理が終了すると(図中白丸参照)、中間画像MP2の2段目先頭(つまり、垂直位置V=1及び水平位置H=0)のブロックBL10の1ライン目の処理が開始される。詳述すると、フィルタ処理部32は、短冊バッファA0の3〜7ライン目の領域に格納された中間画像MP1の3〜7ライン目の画素データを読み出す。すなわち、フィルタ処理部32は、ブロックBK00の3〜6ライン目の画素データと、ブロックBK10の1ライン目の画素データとを読み出す。そして、フィルタ処理部32は、読み出した画素データを用いてフィルタ処理を実行する。これにより、ブロックBL10の1ライン目の画素データがフィルタ処理部32から出力され、それら画素データが短冊バッファB0の5ライン目に順次格納される。すなわち、ブロックBL10の1ライン目の画素データは、ブロックBL00の最終ラインが格納された領域(ここでは、短冊バッファB0の4ライン目)の直下の領域(ここでは、短冊バッファB0の5ライン目)に格納される。
続いて、図14(b)に示すように、ブロックBL10に対する処理と並行して、ブロックBK10の2ライン目の処理が開始され、その2ライン目の画素データが短冊バッファA0の8ライン目の領域に格納される。次いで、ブロックBK10の2ライン目の処理が終了すると(三角参照)、ブロックBL10の2ライン目の処理が開始され、その2ライン目の画素データがバッファ領域52に格納される。具体的には、ブロックBL10の2ライン目(中間画像MP2の6ライン目)の画素データは、短冊バッファB0の1ライン目に順次格納される。すなわち、ブロックBL10の2ライン目の画素データは、ブロックBL00の1ライン目の画素データが格納されていた短冊バッファB0の1ライン目に上書きされる。ここで、解像度変換処理部33から出力画像OPの座標(0,0)が出力された時点(図12(b)参照)で、短冊バッファB0の1ライン目に対する上書きが許可されているため、待ち時間を設けることなく、ブロックBL10の画素データを短冊バッファB0に格納することができる。
このように、図8(b)に示した短冊バッファB0では、アドレス「192」〜「195」→「216」〜「219」→「240」〜「243」→「264」〜「267」→「288」〜「291」の順に画素データが格納された後、アドレス「192」に戻って画素データが格納される。すなわち、短冊バッファB0では、終端(アドレス「291」)と始端(アドレス「192」)とが連結され、終端に画素データが格納された後に続けて始端に画素データが格納される。このような短冊バッファB0は、中間画像MP2における水平位置H=0のブロックBL00,BL10,BL20,BL30,BL40,BL50の画素データが循環的に格納されるリングバッファとして機能する。
次いで、図15に示すように、ブレンド処理部31からブロックBK10の3ライン目の処理が実行されると、その3ライン目の画素データが短冊バッファA0の1ライン目に順次格納される。すなわち、ブロックBK10の3ライン目の画素データは、ブロックBK00の1ライン目の画素データが格納されていた短冊バッファA0の1ライン目に上書きされる。ここで、フィルタ処理部32から不要座標NC1として座標(5,0)が出力された時点(図12(a)参照)で、短冊バッファA0の1ライン目に対する上書きが許可されている。このため、待ち時間を設けることなく、ブロックBK10の画素データを短冊バッファA0に格納することができる。
このように、図8(a)に示した短冊バッファA0では、アドレス「0」〜「5」→「24」〜「29」→「48」〜「53」→「72」〜「77」→「96」〜「101」→「120」〜「125」→「144」〜「149」→「168」〜「173」に順に画素データが格納された後、アドレス「0」に戻って画素データが格納される。すなわち、短冊バッファA0では、終端(アドレス「173」)と始端(アドレス「0」)とが連結され、終端に画素データが格納された後に続けて始端に画素データが格納される。このような短冊バッファA0は、中間画像MP1における水平位置H=0のブロックBK00,BK10,BK20,BK30,BK40,BK50の画素データが循環的に格納されるリングバッファとして機能する。
以後も同様に、図15に示すように、ブロックBK10の最終ライン(4ライン目)の画素データが短冊バッファA0の2ライン目に格納される。それらの処理と並行して、ブロックBL10の3,4ライン目の画素データが短冊バッファB0の2,3ライン目に格納される。そして、ブロックBL10の4ライン目の画素データが短冊バッファB0に格納されると(黒丸参照)、出力画像OPの座標(0,1)の画素データに対する処理が開始される。詳述すると、解像度変換処理部33は、短冊バッファB0の4,5ライン目及び1,2ライン目に格納された中間画像MP2の4〜7ライン目の画素データを読み出す。すなわち、解像度変換処理部33は、ブロックBL00の4ライン目の画素データと、ブロックBL10の1〜3ライン目の画素データとを読み出す。そして、解像度変換処理部33は、読み出した画素データを用いて解像度変換処理を実行する。これにより、出力画像OPの座標(0,1)の画素データが解像度変換処理部33から出力され、その画素データが外部メモリ13に格納される。
以上説明した動作により、中間画像MP1の2段目先頭のブロックBK10、中間画像MP2の2段目先頭のブロックBL10及び出力画像OPの座標(0,1)の画素データの処理が完了する。このとき、図15に示すように、短冊バッファA0には、ブロックBK10の1〜4ライン目の画素データと併せて、ブロックBK00の3〜6ライン目の画素データが格納されている。ここで、ブロックBK00の6ライン目の画素データは、垂直方向に隣接するブロックBL10,BL20の処理で重複して使用される画素データである。このため、短冊バッファA0では、ブロックBK00,BK10が循環的に格納されるが、垂直方向に隣接するブロックBL10,BL20の処理で重複して使用される画素データは上書きされずに残るようになっている。これは、ブロックBKのサイズとバッファ領域51の垂直サイズV1とを上述のように設定したためである。
以後も同様に、図16(a)に示すように、ブロックBK10と同じ垂直位置V=1に配列されたブロックBK11,BK12,BK13,BK14,BK15がこの順番で短冊バッファA1,A2,A3,A4,A5に順次格納される。この処理と並行して、ブロックBL10と同じ垂直位置V=1に配列されたブロックBL11,BL12,BL13,BL14,BL15がこの順番で短冊バッファB1,B2,B3,B4,B5に順次格納される。さらに、これらの処理と並行して、出力画像OPの2ライン目の画素データ、つまり座標(1,1)、(2,1)、(3,1)、(4,1)、(5,1)、(6,1)の画素データがこの順番で外部メモリ13に順次格納される。
このとき、短冊バッファA1〜A5の6,7ライン目には、ブロックBK11〜BK15の1,2ライン目の画素データがそれぞれ格納され、短冊バッファA1〜A5の1,2ライン目には、ブロックBK11〜BK15の3,4ライン目の画素データがそれぞれ格納される。また、短冊バッファB1〜B5の5ライン目には、ブロックBL11〜BL15の1ライン目の画素データがそれぞれ格納され、短冊バッファB1〜B5の1〜3ライン目には、ブロックBL11〜BL15の2〜4ライン目の画素データがそれぞれ格納される。
次に、図16(b)に示すように、ブロックBK15の処理が終了すると、中間画像MP1の3段目先頭(つまり、垂直位置V=2及び水平位置H=0)のブロックBK20の処理が実行される。これにより、ブロックBK20の画素データが短冊バッファA0の3〜6ライン目に順次格納される。
また、ブロックBK20の1ライン目の処理が終了した後、ブロックBK20の処理と並行して、中間画像MP2の3段目先頭のブロックBL20の処理が開始される。そして、ブロックBL20の1,2ライン目の画素データが短冊バッファB0の4,5ライン目に順次格納され、ブロックBL20の3,4ライン目の画素データが短冊バッファB0の1,2ライン目に順次格納される。なお、ブロックBL20の処理が終了した後、出力画像OPの座標(0,2)の画素データが外部メモリ13に格納される。
図17に示すように、以後も同様に、ブロックBK20と同じ垂直位置V=2に配列されたブロックBK21,BK22,BK23,BK24,BK25がこの順番で短冊バッファA1,A2,A3,A4,A5に順次格納される。この処理と並行して、ブロックBL20と同じ垂直位置V=2に配列されたブロックBL21,BL22,BL23,BL24,BL25がこの順番で短冊バッファB1,B2,B3,B4,B5に順次格納される。さらに、これらの処理と並行して、出力画像OPの3ライン目の画素データ、つまり座標(1,2)、(2,2)、(3,2)、(4,2)、(5,2)、(6,2)の画素データがこの順番で外部メモリ13に順次格納される。
このとき、短冊バッファA1〜A5の3〜6ライン目には、ブロックBK21〜BK25の1〜4ライン目の画素データがそれぞれ格納される。また、短冊バッファB1〜B5の4,5ライン目には、ブロックBL21〜BL25の1,2ライン目の画素データがそれぞれ格納され、短冊バッファB1〜B5の1,2ライン目には、ブロックBL21〜BL25の3,4ライン目の画素データがそれぞれ格納される。
図示は省略するが、以後も同様に、中間画像MP1の垂直位置V=3,4,5に配列されたブロックBK30〜BK35,BK40〜BK45,BK50〜BK55の処理が実行される。これらの処理と並行して、中間画像MP2の垂直位置V=3,4,5に配列されたブロックBL30〜BL35,BL40〜BL45,BL50〜BL55の処理が実行される。
このとき、短冊バッファA0にはブロックBK30,BK40,BK50が循環的に格納され、短冊バッファA1にはブロックBK31,BK41,BK51が循環的に格納され、短冊バッファA2にはブロックBK32,BK42,BK52が循環的に格納される。また、短冊バッファA3にはブロックBK33,BK43,BK53が循環的に格納され、短冊バッファA4にはブロックBK34,BK44,BK54が循環的に格納され、短冊バッファA5にはブロックBK35,BK45,BK55が循環的に格納される。
一方、短冊バッファB0にはブロックBL31,BL41,BL51が循環的に格納され、短冊バッファB2にはブロックBL32,BL42,BL52が循環的に格納される。また、短冊バッファB3にはブロックBL33,BL43,BL53が循環的に格納され、短冊バッファB4にはブロックBL34,BL44,BL54が循環的に格納され、短冊バッファB5にはブロックBL35,BL45,BL55が循環的に格納される。
以上説明したように、本例のパイプライン処理では、上流の処理部(例えば、ブレンド処理部31)から処理済座標(例えば、処理済座標FC1)としてXY座標が出力され、そのXY座標に基づいて下流の処理部(例えば、フィルタ処理部32)における画像処理が実行される。これにより、下流の処理部における待ち時間を従来技術に比べて短くすることができる。例えば、ブレンド処理部31によるブレンド処理とフィルタ処理部32によるフィルタ処理を、従来の方法でパイプライン処理を行った場合には、中間画像MP1の3ライン目の最後の画素データに対するブレンド処理が終了したときにはじめて、フィルタ処理部32が中間画像MP1の左上の画素データを読み出すことができる。すなわち、従来の方法では、座標(23,2)の画素データに対するブレンド処理が終了するまで、ブロックBK00の左上の画素データに対するフィルタ処理を実施することができない。これに対し、本例では、処理済座標として、水平方向の座標(X座標)と垂直方向の座標(Y座標)を利用するため、ブロックBK00の3ライン目の最後の画素データ、つまり座標(5,2)の画素データに対するブレンド処理が終了したときに、ブロックBK00の左上の画素データに対するフィルタ処理を開始することができる。すなわち、従来の方法に比べて、120画素の画素データ(具体的には、ブロックBK00の4〜6ライン目の画素データ、ブロックBK01〜BK04の画素データ、及びブロックBK05の1〜3ライン目の画素データ)に対してフィルタ処理を実行する時間分だけ、フィルタ処理部32における待ち時間を短くすることができる。
なお、詳細な説明は省略するが、本例のパイプライン処理におけるフィルタ処理部32と解像度変換処理部33との関係においても同様のことがいえる。
また、バッファ領域52は、複数個の短冊バッファB0〜B5を有し、それら短冊バッファB0〜B5に対応するブロックBLの画素データを循環的に格納するようにした。換言すると、アドレス演算器43において、式1を用いてアドレスADDを算出することにより、ブロックBLの画素データを対応する短冊バッファB0〜B5に循環的に格納するようにした。そして、この式1を用いてアドレスADDを算出することにより、バッファ領域52の垂直サイズV1を、ブロックBLの垂直方向のサイズ(ここでは、4ライン)に、下流の解像度変換処理における垂直重複ライン(ここでは、1ライン)を加えたサイズに設定することができる。
ここで、処理対象の画素データのX座標及びY座標に基づいて、下記式
中間画像MP2の水平サイズ×Y座標+X座標 …(2)
から算出した演算結果の下位ビットを抽出することにより、内蔵メモリ50のアドレスを算出する比較例について説明する。この場合には、中間画像MP2を格納するバッファ領域としては、水平サイズが中間画像MP2の水平サイズと等しいサイズと、垂直サイズがブロックBLの垂直サイズを2倍したサイズ(ここでは、8ライン)とが必要になる。
これに対し、本例では、上述したように、バッファ領域52の垂直サイズV1を5ラインに設定することができる。このため、式1を用いてアドレスADDを算出することにより(短冊バッファB0〜B5毎にリングバッファとして機能させることにより)、内蔵メモリ50のメモリ容量を小さくすることができる。
なお、バッファ領域51(短冊バッファA0〜A5)についても、バッファ領域52(短冊バッファB0〜B5)と同様のことがいえる。
さらに、中間画像MP2のブロックBLのサイズを、出力画像OPの1つのブロック(ここでは、1画素の画素データ)を出力可能なサイズに設定するようにした。また、バッファ領域52の垂直サイズV1を、ブロックBLの垂直サイズVS11(ここでは、4ライン)に、下流の解像度変換処理における垂直重複ライン(ここでは、1ライン)を加えたサイズに設定するようにした。これにより、例えば、短冊バッファB0にブロックBL00,BL10を循環的に格納した際に、垂直方向に隣接する出力画像OPの座標(0,1)、(0,2)の画素データに対する処理で重複して使用される画素データを短冊バッファB0内に確実に残すことができる。
同様に、中間画像MP1のブロックBKのサイズを、中間画像MP2をブロックBL毎に出力可能なサイズに設定し、バッファ領域51の垂直サイズV1を、ブロックBKの垂直サイズVS1(ここでは、4ライン)に、下流のフィルタ処理における垂直重複ライン(ここでは、2ライン)を加えたサイズ以上のサイズに設定するようにした。これにより、例えば、短冊バッファA0にブロックBK00,BK10を循環的に格納した際に、垂直方向に隣接するブロックBL10,BL20に対する処理で重複して使用される画素データを短冊バッファA0内に確実に残すことができる。
(第2の具体例)
次に、図18〜図25に従って、第2の具体例における画像処理回路22の動作について説明する。
第2の具体例の画像処理回路22では、図7に示した第1の具体例と同様に、ブレンド処理部31→フィルタ処理部32→解像度変換処理部33という順番でパイプライン処理が実行される。但し、解像度変換処理部33では、バッファ領域52から読み出された中間画像MP2に対して、バイキュービック法を用いて、拡大率が1/4倍に設定された解像度変換処理(縮小処理)が実行される。この解像度変換処理における拡大率が第1の具体例とは異なる。以下、第1の具体例との相違点を中心に説明する。
図18(c)に示すように、本例の内蔵メモリ50では、ブレンド処理後の中間画像MP1が格納されるバッファ領域51と、フィルタ処理後の中間画像MP2が格納されるバッファ領域52とが連続した領域に割り当てられている。
図18(a)に示すように、バッファ領域51は、144画素分のデータを格納可能なメモリ領域である。具体的には、内蔵メモリ50のアドレス「0」からアドレス「143」までの領域がバッファ領域51となる。このとき、バッファ領域51の水平サイズH1は、中間画像MP1全体の水平方向の画素数(ここでは、24画素)が格納可能なサイズに設定されている。また、バッファ領域51の垂直サイズV1は、垂直方向の6画素分の画素データが格納可能なサイズに設定されている。具体的には、バッファ領域51の垂直サイズV1は、フィルタ処理部32から出力されるブロックBKの垂直サイズVS1(ここでは、4ライン)に、フィルタ処理における垂直重複ライン(ここでは、2ライン)を加えたライン数(ここでは、6ライン)を格納可能なサイズに設定される。すなわち、本例のバッファ領域51のサイズは、必要最小限のサイズに設定されている。
バッファ領域51は、第1の具体例と同様に、短冊状の複数個の短冊バッファA0〜A5を有している。各短冊バッファA0〜A5の水平方向のサイズは、対応するブロックBK00〜BK05の水平方向のサイズと同一のサイズに設定されている。
図18(b)に示すように、本例のバッファ領域52は、32画素分のデータを格納可能なメモリ領域である。具体的には、内蔵メモリ50のアドレス「144」からアドレス「175」までの領域がバッファ領域52となる。すなわち、バッファ領域52は、バッファ領域51に続くアドレス「144」から32画素分のデータが格納可能な領域に設定されている。このとき、バッファ領域52の水平サイズH1は、中間画像MP2全体の水平方向の画素数(ここでは、24画素)よりも小さい画素数(ここでは、8画素)が格納可能なサイズに設定されている。また、バッファ領域52の垂直サイズV1は、4画素分のデータが格納可能なサイズに設定されている。
バッファ領域52は、短冊状の複数個の短冊バッファB0,B1を有している。各短冊バッファB0,B1の水平方向のサイズは、中間画像MP2のブロックBLの水平方向のサイズと同一のサイズに設定されている。これら短冊バッファB0,B1には、多数のブロックBLの画素データが循環的に格納される。
次に、バッファ領域52を上述したサイズに設定した理由について説明する。
まず、図19に示すように、バイキュービック法を用いて、拡大率が1/4倍に設定された解像度変換処理では、入力画像の座標(0,0)〜(3,3)の16画素を用いて出力画像の座標(0,0)の画素値が算出される。また、上記解像度変換処理では、入力画像の座標(0,4)〜(3,7)の16画素を用いて出力画像の座標(0,1)の画素値が算出される。すなわち、拡大率が1/4倍である場合には、垂直重複ラインを必要としない。この場合には、バッファ領域52の水平サイズH1は、中間画像MP2全体の水平方向のサイズよりも小さいサイズに設定することができる。本例のバッファ領域52の水平サイズH1は、解像度変換処理部33における1回の解像度変換処理で必要な水平方向の画素数(ここでは、4画素)よりも多い画素数(ここでは、8画素)を格納可能なサイズに設定される。また、本例のバッファ領域52の垂直サイズV1は、ブロックBLの垂直サイズVS11(ここでは、4画素)と同一のサイズに設定される。すなわち、本例のバッファ領域52は、中間画像MP2の2個分のブロックBLの画素データを格納可能なサイズに設定される。これは、解像度変換処理部33において、中間画像MP2の各ブロックBLを処理する際に、時間的に前に処理したブロックBLのデータを必要としないために、各短冊バッファB0,B1に対して別の画素データを順次上書きすることができるためである。但し、バッファ領域52のサイズは、パイプライン処理における上流の処理部との処理速度差の変動を吸収できるサイズであれば特に限定されず、例えば、ブロックBLのサイズの倍数である必要はない。
次に、図20〜図25に従って、中間画像MP1,MP2の内蔵メモリ50への格納方法について詳述する。なお、図20は、中間画像MP1の各画素データのXY座標と、内蔵メモリ50(バッファ領域51)のアドレスADDとの対応を示した図である。図20では、中間画像MP1内に示した数字が内蔵メモリ50(バッファ領域51)のアドレスADDを示している。また、図21は、中間画像MP2の各画素データのXY座標と、内蔵メモリ50(バッファ領域52)のアドレスADDとの対応を示した図である。図21では、中間画像MP2内に示した数字が内蔵メモリ50(バッファ領域52)のアドレスADDを示している。
図22(a)に示すように、まず、中間画像MP1のブロックBK00の1〜3ライン目の処理が実行され、それら1〜3ライン目の画素データがバッファ領域51の短冊バッファA0の1〜3ライン目に格納される。ブロックBK00の3ライン目の処理が終了すると(図中白丸参照)、中間画像MP2のブロックBL00の1ライン目の処理が実行され、その1ライン目の画素データがバッファ領域52の短冊バッファB0の1ライン目に格納される。以後も同様に、ブロックBK00の4〜6ライン目の処理と、ブロックBL00の2〜4ライン目の処理とが並行して実行される。そして、ブロックBL00の4ライン目(最終ライン)の処理が終了すると(図中黒丸参照)、出力画像OPの座標(0,0)の画素データに対する処理が実行され、その画素データが外部メモリ13に格納される。
ここで、中間画像MP2のブロックBL00の最後の画素データがバッファ領域52に格納されると、これ以降のフィルタ処理においてブロックBK00の2ライン目の画素データは不要となる。このため、ブレンド処理部31は、フィルタ処理部32からの不要座標NC1(ここでは、座標(5,1))に基づいて、ブロックBK00の1〜2ライン目の画素データが格納されている短冊バッファA0の座標(0,0)、(0,1)、(1,0)、(1,1)の領域に対する上書きを許可する。
また、出力画像OPの座標(0,0)の画素データが外部メモリ13に格納されると、これ以降の解像度変換処理においてブロックBL00の1〜4ライン目の画素データは不要となる。このため、解像度変換処理部33は、ブロックBL00の4ライン目の最後の座標(3,3)を不要座標NC2としてフィルタ処理部32に出力する。そして、フィルタ処理部32は、解像度変換処理部33からの不要座標NC2に基づいて、ブロックBL00の1〜4ライン目の画素データが格納されている短冊バッファB0の全領域に対する上書きを許可する。
続いて、図22(b)に示すように、ブロックBK01の1〜6ライン目の処理と、ブロックBL01の1〜4ライン目の処理とが並行して実行される。これにより、ブロックBK01の1〜6ライン目の画素データがバッファ領域51の短冊バッファA1の1〜6ライン目に格納され、ブロックBL01の1〜4ライン目の画素データがバッファ領域52の短冊バッファB1の1〜4ライン目に格納される。そして、ブロックBL01の最終ラインの処理が終了すると(図中黒丸参照)、出力画像OPの座標(1,0)の画素データに対する処理が実行され、その画素データが外部メモリ13に格納される。ここで、出力画像OPの座標(1,0)の画素データが外部メモリ13に格納されると、これ以降の解像度変換処理においてブロックBL01の1〜4ライン目の画素データは不要となる。このため、フィルタ処理部32は、解像度変換処理部33からの不要座標NC2(ここでは、座標(7,3))に基づいて、ブロックBL01の画素データが格納されている短冊バッファB1の全領域に対する上書きを許可する。
次いで、図23(a)に示すように、中間画像MP1のブロックBK02の1〜3ライン目の処理が実行され、それら1〜3ライン目の画素データが短冊バッファA2の1〜3ライン目に格納される。ブロックBK02の3ライン目の処理が終了すると(図中白丸参照)、中間画像MP2のブロックBL02の1ライン目の処理が実行される。これにより、ブロックBL02の1ライン目の画素データは、短冊バッファB0の1ライン目に順次格納される。すなわち、ブロックBL02の1ライン目の画素データは、ブロックBL00の1ライン目の画素データが格納されていた短冊バッファB0の1ライン目に上書きされる。ここで、解像度変換処理部33から出力画像OPの座標(0,0)が出力された時点(図22(a)参照)で、短冊バッファB0の全領域に対する上書きが許可されているため、待ち時間を設けることなく、ブロックBL10の画素データを短冊バッファB0に格納することができる。
続いて、図23(b)に示すように、ブロックBK02の4〜6ライン目の処理と、ブロックBL02の2〜4ライン目の処理が並行して実行される。これにより、ブロックBL02の2〜4ライン目の画素データが、短冊バッファB0の2〜4ライン目に上書きされる。このように、短冊バッファB0,B1には、中間画像MP2の各ブロックBLが交互に格納される。
以後も同様に、図24(a)に示すように、中間画像MP1の垂直位置V=0に配列されたブロックBK03,BK04,BK05がこの順番で短冊バッファA3,A4,A5に順次格納される。この処理と並行して、中間画像MP2の垂直位置V=0に配列されたブロックBL03,BL04,BL05の処理が実行される。これにより、まず、ブロックBL03の画素データが短冊バッファB1に格納される。続いて、ブロックBL04の画素データが短冊バッファB0に格納され、ブロックBL05の画素データが短冊バッファB1に格納される。このため、図24(a)に示すように、ブロックBL05の処理が終了すると、短冊バッファB0,B1にそれぞれブロックBL04,BL05の画素データが格納された状態となる。さらに、これらの処理と並行して、出力画像OPの座標(3,0)、(4,0)、(5,0)の画素データがこの順番で外部メモリ13に順次格納される。
次に、図24(b)に示すように、ブロックBK05の処理が終了すると、中間画像MP1の2段目先頭のブロックBK10の処理が実行される。これにより、まず、ブロックBK10の1ライン目の画素データが、ブロックBK00の1ライン目の画素データが格納されていた短冊バッファA0の1ライン目に格納される。このとき、短冊バッファA0の1ライン目に対する上書きが、ブロックBK10の処理を開始する前に既に許可されている。このため、待ち時間を設けることなく、ブロックBK10の画素データを短冊バッファA0に格納することができる。このように、短冊バッファA0には、第1の具体例と同様に、ブロックBK00,BK10の画素データが循環的に格納される。
ブロックBK10の1ライン目の処理が終了すると(図中白丸参照)、中間画像MP2の2段目先頭のブロックBL10の1ライン目の処理が開始される。詳述すると、フィルタ処理部32は、短冊バッファA0の3〜6ライン目と1ライン目の領域に格納された中間画像MP1の3〜7ライン目(つまり、ブロックBK00の3〜6ライン目及びブロックBK10の1ライン目)の画素データを読み出す。そして、フィルタ処理部32は、読み出した画素データを用いてフィルタ処理を実行する。これにより、ブロックBL10の1ライン目の画素データがフィルタ処理部32から出力され、それら画素データが短冊バッファB0の1ライン目に順次格納される。
ここで、中間画像MP2のブロックBL10の1ライン目の処理が終了すると、これ以降のフィルタ処理においてブロックBK00の3ライン目の画素データは不要となるため、ブロックBK00の3ライン目の画素データが格納されている短冊バッファA0の3ライン目の領域に対する上書きが許可される。
以後も同様に、ブロックBK10の処理と、ブロックBL10の処理とが並行に実行される。これにより、ブロックBK10の2〜4ライン目が短冊バッファA0の2〜4ライン目に格納され、ブロックBL10の2〜4ライン目が短冊バッファB0の2〜4ライン目に格納される。そして、ブロックBL10の4ライン目の画素データが短冊バッファB0に格納されると(黒丸参照)、出力画像OPの座標(0,1)の画素データに対する処理が実行され、その画素データが外部メモリ13に格納される。
以上説明した動作により、中間画像MP1の2段目先頭のブロックBK10、中間画像MP2の2段目先頭のブロックBL10及び出力画像OPの座標(0,1)の画素データの処理が完了する。このとき、図24(b)に示すように、短冊バッファA0には、ブロックBK10の1〜4ライン目の画素データと併せて、ブロックBK00の5,6ライン目の画素データが格納されている。このため、短冊バッファA0では、ブロックBK00,BK10が循環的に格納されるが、垂直方向に隣接するブロックBL10,BL20の処理で重複して使用される、ブロックBK00の6ライン目の画素データは上書きされずに残るようになっている。
なお、中間画像MP2のブロックBLのバッファ領域52への格納方法は、以降の処理でも同様であるため、以下の説明では省略する。
続いて、図25(a)に示すように、ブロックBK10と同じ垂直位置V=1に配列されたブロックBK11,BK12,BK13,BK14,BK15がこの順番で短冊バッファA1,A2,A3,A4,A5に順次格納される。このとき、短冊バッファA1〜A5の1〜4ライン目には、ブロックBK11〜BK15の1〜4ライン目の画素データがそれぞれ格納される。
次に、図25(b)に示すように、ブロックBK15の処理が終了すると、中間画像MP1の垂直位置V=2に配列されたブロックBK20,BK21,BK22,BK23,BK24,BK25の処理が順に実行される。これにより、ブロックBK20〜BK25の画素データが、短冊バッファA0〜A5の5,6ライン目及び1,2ライン目にそれぞれ格納される。
図示は省略するが、以後も同様に、中間画像MP1の垂直位置V=3,4,5に配列されたブロックBK30〜BK35,BK40〜BK45,BK50〜BK55の処理が実行される。
以上説明したように、本例のパイプライン処理では、下流の処理部(例えば、フィルタ処理部32)から不要座標(例えば、不要座標NC1)としてXY座標が出力され、そのXY座標に基づいて上流の処理部(例えば、ブレンド処理部31)においてバッファ領域(例えば、バッファ領域51)の上書きが許可される。これにより、上流の処理部における待ち時間を短くすることができる。例えば、下流の処理部からのライン番号の通知に基づいて、上流の処理部においてバッファ領域の上書きを許可する場合には、中間画像MP2の各ラインの処理が終了するまでバッファ領域の対応するラインへの上書きが許可されない。これに対し、本例では、不要座標として、水平方向の座標(X座標)と垂直方向の座標(Y座標)を利用する。このため、例えば、ブロックBLの各ラインの終了に基づいて、バッファ領域51の対応する領域への上書きが許可される。
バッファ領域52についても同様に、出力画像OPの各画素データの処理終了毎に、その画素データに対応する領域の上書きが許可される。これにより、バッファ領域52の水平サイズH1を、中間画像MP2の水平方向のサイズ(ここでは、24画素)よりも小さいサイズ(ここでは、8画素)に設定することができる。この結果、内蔵メモリ50のメモリ容量を小さくすることができる。
なお、以上説明した第1の具体例及び第2の具体例において、ブレンド処理部31は第1処理部の一例、フィルタ処理部32は第2処理部の一例、解像度変換処理部33は第3処理部の一例である。また、中間画像MP1は第1中間画像の一例、中間画像MP2は第2画像処理後の画像データ及び第2中間画像の一例、出力画像OPは第3画像処理後の画像データの一例、入力画像IP,IP1,IP2は所定の画像データの一例である。また、ブロックBKは第1ブロックの一例、ブロックBLは第2ブロックの一例、出力画像OPの各画素データは第3ブロックの一例、バッファ領域51は第1バッファ領域の一例、バッファ領域52は第2バッファ領域の一例である。また、ブレンド処理部31によるブレンド処理は第1画像処理の一例、フィルタ処理部32によるフィルタ処理は第2画像処理の一例、解像度変換処理部33による解像度変換処理は第3画像処理の一例である。
(第3の具体例)
次に、図26〜図30に従って、第3の具体例における画像処理回路22の動作について説明する。
図26に示した第3の具体例の画像処理回路22では、フィルタ処理部32→解像度変換処理部33という順番でパイプライン処理が実行される。このとき、フィルタ処理部32は、外部メモリ13から読み出した入力画像IPに対して、フィルタサイズが5画素×5画素に設定されたフィルタ処理を実行する。フィルタ処理部32は、フィルタ処理後の中間画像MPを所定サイズのブロックの単位で内蔵メモリ50のバッファ領域51に格納する。続いて、解像度変換処理部33は、バッファ領域51から読み出した中間画像MPに対して、バイリニア法を用いて、拡大率が1/2倍に設定された解像度変換処理(縮小処理)を実行する。そして、解像度変換処理部33は、解像度変換処理後の画像データを出力画像OPとして外部メモリ13に格納する。
ここで、フィルタ処理部32から出力される中間画像MPについて説明する。
図27(a)に示した中間画像MPは、複数の画素(ここでは、12画素×12画素)が水平方向及び垂直方向に2次元状に配列された画像データである。中間画像MPでは、所定のサイズのブロックbが水平方向に6個配列され、ブロックbが垂直方向に6個配列されている。なお、図27(a)では、水平位置H(H=0〜5)及び垂直位置V(V=0〜5)を用いて、各ブロックbを「bVH」として示している。なお、以下の説明では、ブロックbVH(つまり、ブロックb00〜b05,b10〜b15,b20〜b25,b30〜b35,b40〜b45,b50〜b55)を総称する場合には、ブロックbと称する。また、以下の説明では、中間画像MPにおける水平方向の座標をX座標、中間画像MPにおける垂直方向の座標をY座標としたときに、中間画像MP内の各画素データを、座標(X座標,Y座標)の画素データと称する。
複数のブロックbでは、水平方向の画素数(サイズ)を異なるサイズに設定することが可能であり、垂直方向の画素数(サイズ)を異なるサイズに設定することが可能である。但し、図27(a)に示した例では、全てのブロックbが同じサイズ(ここでは、2画素×2画素)に設定されている。このブロックbのサイズは、下流の解像度変換処理部33からブロック(ここでは、1画素データ)毎に出力画像OPを出力可能なサイズに設定されている。
このように、複数のブロックbは、中間画像MPが水平方向及び垂直方向に分割されたものである。すなわち、各ブロックbは、中間画像MP全体の水平方向の画素数(ここでは、12画素)よりも少ない画素が水平方向に配列され、中間画像MP全体の垂直方向の画素数(ここでは、12画素)よりも少ない画素が垂直方向に配列された短冊状(矩形状)の領域となっている。
中間画像MPは、ブロックbの単位でフィルタ処理部32から順次出力される。例えば、複数のブロックbは、図27(b)に矢印で示すように、水平方向の図中左から右、及び垂直方向の図中上から下に向かってラスタースキャンの順序に従って順次出力される。具体的には、複数のブロックbは、ブロックb00→b01→b02→…→b05という順番で順次出力され、続いて、ブロックb10→b11→b12→…→b15という順番で順次出力される。さらに、各ブロックbに含まれる複数の画素は、上述したラスタースキャンの順序と同様に左上から右下に向かって順次処理される。具体的には、ブロックb00では、座標(0,0)→座標(1,0)の画素データが順次出力され、続いて、垂直方向に沿って座標を1画素分シフトさせ、座標(0,1)→座標(1,1)の画素データが順次出力される。
図28に示すように、バッファ領域51は、8画素分のデータを格納可能なメモリ領域である。具体的には、内蔵メモリ50のアドレス「0」からアドレス「8」までの領域がバッファ領域51となる。このとき、バッファ領域51の水平サイズH1は、中間画像MP全体の水平方向の画素数(ここでは、12画素)よりも小さい画素数(ここでは、4画素)が格納可能なサイズに設定されている。また、バッファ領域51の垂直サイズV1は、垂直方向の2画素分のデータが格納可能なサイズに設定されている。
バッファ領域51は、短冊状の複数個の短冊バッファA0,A1を有している。各短冊バッファA0,A1の垂直方向のサイズは、バッファ領域51の垂直サイズV1と同一のサイズに設定されている。また、各短冊バッファA0,A1の水平方向のサイズは、中間画像MPのブロックbの水平方向のサイズ(ここでは、2画素)と同一のサイズに設定されている。これら短冊バッファA0,A1には、多数のブロックbの画素データが循環的に格納される。
次に、バッファ領域51を上述したサイズに設定した理由について説明する。
まず、図29に示すように、バイリニア法を用いて、拡大率が1/2倍に設定された解像度変換処理では、入力画像の座標(0,0)〜(1,1)の4画素を用いて出力画像の座標(0,0)の画素値が算出される。また、上記解像度変換処理では、入力画像の座標(0,2)〜(1,3)の4画素を用いて出力画像の座標(0,1)の画素値が算出される。すなわち、拡大率が1/2倍である場合には、垂直重複ラインを必要としない。この場合には、バッファ領域51の水平サイズH1は、中間画像MP全体の水平方向のサイズよりも小さいサイズに設定することができる。例えば、バッファ領域51の水平サイズH1は、ブロックbの水平方向のサイズ(ここでは、2画素)よりも多い画素数(ここでは、4画素)を格納可能なサイズに設定される。また、本例のバッファ領域51の垂直サイズV1は、ブロックbの垂直方向のサイズ(ここでは、2画素)を格納可能なサイズに設定される。すなわち、本例のバッファ領域51は、中間画像MPの2個分のブロックbの画素データを格納可能なサイズに設定される。但し、バッファ領域51のサイズは、パイプライン処理における上流の処理部との処理速度差の変動を吸収できるサイズであれば特に限定されず、例えば、ブロックbのサイズの倍数である必要はない。
次に、図26〜図30に従って、中間画像MPの内蔵メモリ50への格納方法について詳述する。
図26に示したパイプライン処理が開始されると、フィルタ処理部32は、まず、中間画像MPの左上のブロックb00に対応する入力画像IPを外部メモリ13から読み出し、その入力画像IPに対してフィルタ処理を実行する。そして、フィルタ処理部32は、フィルタ処理後の画像データ、つまり中間画像MPをブロックbの単位で出力し、そのブロックbをバッファ領域51に格納する。具体的には、図30に示すように、フィルタ処理部32は、まず、ブロックb00内の座標(0,0)〜座標(1,0)までのフィルタ処理後の画素データをバッファ領域51に格納する。このとき、フィルタ処理部32からは、フィルタ処理後の画素データと併せて、その画素データの中間画像MPにおけるXY座標が出力される。そして、アドレス演算器43では、フィルタ処理部32からのXY座標に基づいて、上述した式1を用いて内蔵メモリ50のアドレスADDが算出され、そのアドレスADDで指定される内蔵メモリ50の領域にフィルタ処理後の画素データが格納される。なお、本例の式1では、バッファ領域51の水平サイズH1が「4」、バッファ領域51の垂直サイズV1が「2」、バッファ領域51の開始アドレス、つまりアドレスオフセットofsが「0」となる。
図27(c)は、中間画像MPの各画素データのXY座標と、内蔵メモリ50(バッファ領域51)のアドレスADDとの対応を示した図である。図27(c)では、中間画像MP内に示した数字が内蔵メモリ50(バッファ領域51)のアドレスADDを示している。
図27(c)に示すように、中間画像MPの座標(0,0)、(1,0)の画素データは、内蔵メモリ50のアドレス「0」、「1」に順次格納される。すなわち、図30(a)に示すように、ブロックb00の1ライン目の画素データは、バッファ領域51の短冊バッファA0の1ライン目に格納される。続いて、ブロックb00の1ライン目の処理が終了すると、ブロックb00の2ライン目の処理が実行される。これにより、ブロックb00の2ライン目の画素データが、短冊バッファA0の2ライン目に格納される。
次いで、ブロックb00の2ライン目の処理が終了すると(図中黒丸参照)、解像度変換処理部33による解像度変換処理が開始される。すなわち、解像度変換処理部33は、フィルタ処理部32から処理済座標FC2として例えば座標(1,1)が入力されると、リード調停部42Bに読み出し要求を発行し、バッファ領域51からの中間画像MPの読み出しを開始する。解像度変換処理部33は、バッファ領域51に格納されたブロックb00の1,2ライン目の画素データを読み出し、それら1,2ライン目の画素データを用いて解像度変換処理を実行する。これにより、出力画像OPの座標(0,0)の画素データが解像度変換処理部33から出力され、その画素データが外部メモリ13に格納される。ここで、出力画像OPの座標(0,0)の画素データが外部メモリ13に格納されると、これ以降の解像度変換処理においてブロックb00の1,2ライン目の画素データは不要となる。このため、解像度変換処理部33は、ブロックb00の2ライン目の最後の座標(1,1)を不要座標NC2としてフィルタ処理部32に出力する。そして、フィルタ処理部32は、不要座標NC2として座標(1,1)が入力されると、ブロックb00の1,2ライン目の画素データが格納されている短冊バッファA0の全領域に対する上書きを許可する。
また、ブロックb00の処理が終了すると、ブロックb01の処理が実行される。これにより、ブロックb01の1,2ライン目の画素データがバッファ領域51の短冊バッファA1の1,2ライン目に順次格納される。そして、ブロックb01の最終ラインの処理が終了すると(図中黒丸参照)、出力画像OPの座標(1,0)の画素データに対する処理が実行され、その画素データが外部メモリ13に格納される。ここで、出力画像OPの座標(1,0)の画素データが外部メモリ13に格納されると、これ以降の解像度変換処理においてブロックb01の1,2ライン目の画素データは不要となる。このため、フィルタ処理部32は、解像度変換処理部33からの不要座標NC2(ここでは、座標(3,1))に基づいて、ブロックb01の画素データが格納されている短冊バッファA1の全領域に対する上書きを許可する。
また、図30(b)に示すように、ブロックb01の処理が終了すると、ブロックb02の処理が実行される。これにより、ブロックb02の1,2ライン目の画素データが短冊バッファA0の1,2ライン目に順次格納される。すなわち、ブロックb02の画素データは、ブロックb00の画素データが格納されていた短冊バッファA0に上書きされる。ここで、解像度変換処理部33から出力画像OPの座標(0,0)が出力された時点(図30(a)参照)で、短冊バッファA0の全領域に対する上書きが許可されているため、待ち時間を設けることなく、ブロックb02の画素データを短冊バッファA0に格納することができる。
図示は省略するが、以後も同様に、中間画像MPの各ブロックbに対して処理が実行され、各ブロックbの画素データが短冊バッファA1→A0→A1→A0の順番に循環的に格納される。
なお、以上説明した第3の具体例において、フィルタ処理部32は第1処理部の一例、解像度変換処理部33は第2処理部の一例、中間画像MPは中間画像の一例、出力画像OPは第2画像処理後の画像データの一例である。また、ブロックbは第1ブロックの一例、出力画像OPの各画素データは第2ブロックの一例、バッファ領域51はバッファ領域の一例、フィルタ処理部32によるフィルタ処理は第1画像処理の一例、解像度変換処理部33による解像度変換処理は第2画像処理の一例である。
以上説明した本実施形態によれば、以下の効果を奏することができる。
(1)パイプライン処理において、上流の処理部から処理済座標FC1,FC2としてXY座標を出力し、そのXY座標に基づいて下流の処理部における画像処理を開始するようにした。これにより、下流の処理部における待ち時間を従来技術に比べて短くすることができる。例えば、従来技術では、図31に示すように、図中破線丸で示した画素データに対して上流の処理部による処理が終了するまでは、図中三角で示した画素データに対する下流の処理部による処理を実行することができない。これに対し、本例では、図中白丸で示した画素データに対して上流の処理部による処理が終了すると、図中三角で示した画素データに対する下流の処理部による処理を開始することができる。
(2)パイプライン処理において、下流の処理部から不要座標NC1,NC2としてXY座標を出力し、そのXY座標に基づいて上流の処理部においてバッファ領域の上書きを許可するようにした。これにより、上流の処理部における待ち時間を短くすることができる。
(3)式1を用いてバッファ領域のアドレスADDを算出し、そのアドレスADDに中間画像を格納するようにした。これにより、中間画像を格納するためのバッファ領域のサイズを小さくすることができる。この結果、内蔵メモリ50のメモリ容量を小さくすることができる。
(4)ところで、上記式2を用いて内蔵メモリ50のアドレスを算出し、そのアドレスに中間画像を格納する場合には、バッファ領域が2のべき乗単位のサイズに制限されてしまう。これに対し、本例では、任意サイズのバッファ領域51,52(短冊バッファA0〜A5,B0〜B5)をリングバッファとして機能させるためのアドレス演算、つまり式1を用いて内蔵メモリ50のアドレスADDを算出するため、バッファ領域51,52のサイズは2のべき乗単位のサイズに制約されない。これにより、バッファ領域51,52のサイズ選択の自由度を向上させることができる。すなわち、図32(a)及び図32(b)に示すように、内蔵メモリ50の分割方法の自由度を向上させることができ、内蔵メモリ50の分割位置を自由に設定することができる。
(5)また、式1では、中間画像MP1,MP2毎に、内蔵メモリ50の開始アドレスをアドレスオフセットofsとして加算するようにした。これにより、例えば各バッファ領域51,52が2のべき乗単位のサイズでない場合であっても、複数のバッファ領域51,52を連続した領域に割り当てることができる。したがって、各バッファ領域51,52のサイズに制限されることなく、内蔵メモリ50のメモリ容量を効率的に使用することができる。
(6)画像処理部30における処理内容に応じて、バッファ領域51,52のサイズとブロックBK,BLのサイズを適宜調整するようにした。
例えば、上流のブレンド処理部31から出力される各ブロックBKのサイズを、下流のフィルタ処理部32から各ブロックBLを出力可能なサイズに設定するようにした。また、バッファ領域51の垂直サイズV1を、ブロックBKの垂直サイズVS1に、下流のフィルタ処理における垂直重複ラインを加えたサイズに設定するようにした。これにより、例えば、短冊バッファA0にブロックBK00,BK10を循環的に格納した際に、垂直方向に隣接するブロックBL10,BL20に対する処理で重複して使用される画素データを短冊バッファA0内に確実に残すことができる。
(他の実施形態)
なお、上記実施形態は、これを適宜変更した以下の態様にて実施することもできる。
・上記実施形態における不要座標NC1,NC2の出力を省略してもよい。
・上記実施形態の式1において、アドレスオフセットofsの加算を省略してもよい。この場合には、例えば、各処理部31〜34から出力される中間画像を、中間画像毎に予め設定された固定の領域に格納するようにしてもよい。
・上記実施形態では、中間画像の全てを内蔵メモリ50に格納するようにした。これに限らず、例えば中間画像の一部を外部メモリ13に格納するようにしてもよい。
・上記実施形態において、CPU23における処理内容の少なくとも一部を他の処理部(例えば、制御部40等)にて処理するようにしてもよい。
・上記実施形態の各処理部31〜34における処理順序は一例であり、適宜変更可能である。例えば、図5に示す中間画像MP1を右下から左上に向かって処理してもよい。この場合、最初に処理するブロックを、例えば、右下のブロックBK55とする。また、上記実施形態では、例えば、複数のブロックBKに対する処理順序を、最初に進む処理方向が水平方向となる処理順序としたが、最初に進む処理方向が垂直方向となる処理順序であってもよい。