【文献】
関 海克、外2名,“画像処理による歪曲収差補正とパノラマ画像”,RICOH TECHNICAL REPORT,株式会社リコー,1997年 9月25日,No.23,pp.45-52
(58)【調査した分野】(Int.Cl.,DB名)
前記併合手段は、前記矩形領域の頂点に対する、前記入力画像上での対応位置を通る直線であって、所定角度の傾きを有した直線を前記参照領域上に仮想的に規定し、前記直線によって前記参照領域を分断して得られる2つの領域のうち、面積の小さい領域を前記参照領域から除外する請求項3に記載の画像処理装置。
【発明を実施するための形態】
【0016】
以下、実施形態について図面を参照して説明する。
【0017】
<1.実施形態>
[1−1.構成概要]
図1は、本発明の実施形態に係る画像処理装置1Aの構成を示す概略図である。当該画像処理装置1Aは、例えば、パーソナルコンピュータ(PC)、携帯情報端末機等において実現される。
【0018】
図1に示されるように、画像処理装置1Aは、いずれも基板上に集積回路として構成された、第1処理回路2および第2処理回路3を備えている。
【0019】
第1処理回路2は、レンズデータ記憶部21と画像データ記憶部22とを有している。画像データ記憶部22は、複数の画像データを記憶可能な容量を有する画像メモリ(例えば、DRAM)であり、画像処理装置1Aに入力された入力画像の画像データGDを記憶する。レンズデータ記憶部21には、入力された画像データGDを撮像した撮像装置のレンズに関するレンズデータが記憶されている。レンズデータとしては、例えば、レンズの収差に起因した画像の歪みに関する情報(「歪み情報」とも称する)が記憶されている。歪み情報についての詳細は、後述する。
【0020】
第2処理回路3は、画像処理回路として構成され、画像データ記憶部22に保存された画像データGDに対して、各種の画像処理を施す。特に、本実施形態の第2処理回路3は、入力された画像データGDに対して、画像の歪みを補正する処理(「歪み補正処理」とも称する)を施す歪み補正部30を有している。
【0021】
ここで、歪み補正処理の概略について説明する。
図2は、歪み補正処理の様子を示す図であり、
図2には、樽型の歪曲収差を有する入力画像IGと、歪み補正処理後の出力画像UGとが示されている。なお、入力画像IGには、歪曲収差による被写体の歪みが破線によって示されている。
【0022】
図2に示されるように、画像処理装置1Aで実行される歪み補正処理は、出力画像UGを複数の領域に分割して得られる矩形領域(「画素ブロック」または単に「ブロック」とも称する)BKにおいて、連続して並ぶ複数の矩形領域を一つの処理単位として行われる。
【0023】
例えば、連続して並ぶ2つのブロックBK1,BK2が歪み補正処理を施す対象領域(「実行対象領域」とも称する)BR(
図2中のハッチング領域)に含まれる場合を想定する。この場合、入力画像IGにおいて当該2つのブロックBK1,BK2それぞれに対応する対応ブロック(「対応領域」とも称する)TB1,TB2を内包する領域RN(後述の読出領域)から読み出された画像データを用いて、ブロックBK1,BK2の各画素の画素値が算出される。
【0024】
なお、ブロックBKの大きさは、画像処理装置1Aによって自動で設定される態様としてもよく、ユーザによって指定可能な態様としてもよい。本実施形態では、ブロックBKが縦8画素、横8画素のブロック、すなわち8×8の画素を有するブロックである場合を例にして説明する。また、ここでは、実行対象領域BRに含まれるブロックを実行対象ブロックBTとも称する。
【0025】
図1の説明に戻って、第2処理回路3は、メモリ間のデータ転送を制御するDMAC(ダイレクトメモリアクセスコントローラ)35,36をさらに有している。画像処理装置1Aでは、第1処理回路2と第2処理回路3との間のバスを介したデータ転送は、CPUの代わりに当該DMAC35,36からの制御信号に応じて行われる。
【0026】
[1−2.歪み補正処理]
ここで、画像処理装置1Aで実行される、画像の歪み補正処理について説明する。
図3は、画像処理装置1Aにおける歪み補正部30の詳細構成を示す図である。
図4は、画素値記憶部307の詳細構成を示す図である。
図5は、歪み補正処理の処理工程と歪み補正部30の構成との対応関係を示す図である。
図6は、出力画像UGにおけるブロックBK1と、入力画像IGにおいて当該ブロックBK1に対応する対応ブロックTB1との関係を示す図である。
図7は、オフセット処理と参照領域特定処理とを説明するための図である。
図8は、相対座標算出処理を説明するための図である。
図9は、相対座標系で表された各対応相対位置と連想メモリ303の記憶状態との関係を示す図である。
【0027】
図3に示されるように、歪み補正部30は、相対座標取得部301と、レンズデータ読出制御部302と、連想メモリ303(CAM:Content Addressable Memory)と、参照領域特定部304と、読出領域決定部305と、読出位置特定部306と、画素値記憶部307と、画素値算出部308と、出力データ記憶部309とを有している。
【0028】
相対座標取得部301は、出力画像UGにおいて、歪み補正処理の実行対象領域BRに含まれる各実行対象ブロックBT中の各画素の入力画像IG上での対応位置を取得する機能を有している。
【0029】
レンズデータ読出制御部302は、DMAC35を介して、レンズデータ記憶部21に記憶されたデータの読出を制御する。
【0030】
連想メモリ303は、情報を記憶する記憶機能(第1記憶手段)と、記憶した全情報の中から、指定された情報と一致する情報を検索し、指定された情報と一致する情報を発見した場合は、当該一致する情報を記憶する番地(アドレス)を出力する検索機能とを有している。
【0031】
参照領域特定部304は、入力画像IGにおいて、実行対象ブロックBTに対応する対応ブロックを内包する最小の矩形領域を参照領域FRとして、対応ブロックごとに特定する機能を有している。
【0032】
読出領域決定部305は、各対応ブロックの参照領域FRを併合(マージ)する併合手段として機能し、画像データ記憶部22に記憶された入力画像IGにおける読出領域RNを決定する。
【0033】
また、読出領域決定部305は、入力画像IG上の読出領域RNに含まれる画像データを、DMAC36を介して、画像データ記憶部22から読み出す読出制御手段としても機能する。
【0034】
読出位置特定部306は、画像データ記憶部22から読み出された画素の読出位置を読出領域決定部305からの情報に基づいてカウントする機能を有している。
【0035】
画素値記憶部307は、
図4に示されるように、所定画素分の画素値を記憶可能なラインメモリ371と、画素値を一時的に記憶可能なレジスタRG1,RG2と、第1メモリLM1、第2メモリLM2、第3メモリLM3および第4メモリLM4で構成されるローカルメモリLMとを有している。このような構成を有する画素値記憶部307は、画像データ記憶部22から読み出された画像データの中から、歪み補正に用いる画素の画素値を記憶する機能を有している。
【0036】
画素値算出部308は、画素値記憶部307に記憶された歪み補正用の画素の画素値を用いた補間演算を行って、出力画像中の画素の画素値を算出する。
【0037】
当該画素値算出部308と、上述の連想メモリ303、読出位置特定部306、および画素値記憶部307とは、互い協働して動作し、入力画像IG上の読出領域RNから読み出された各画素の画素値に基づいて、出力画像UGの画素値を取得する補正処理手段として機能することになる。
【0038】
出力データ記憶部309は、画素値算出部308で算出された出力画像中の画素の画素値を一時的に記憶する機能を有している。出力データ記憶部309に記憶されたデータは、所定の出力形式になると、歪み補正後の画像データとして歪み補正部30の外部に出力されることになる。例えば、8画素×8画素のブロック単位で、歪み補正後の画像データを出力する場合、出力データ記憶部309は、8×8のブロックを構成する画素の画素値が全て揃うまで、画素値算出部308によって算出された画素の画素値を記憶することになる。
【0039】
図5に示されるように、歪み補正処理は、歪み補正部30における上記各構成要素301〜309の協働により、相対座標取得段階ST1、読出領域決定段階ST2、画素値読込段階ST3、および出力画素値算出段階ST4の4つの処理段階を経て実行される。なお、以下では、
図2のように、ブロックBK1,BK2が歪み補正処理の実行対象領域BRに含まれる場合を例にして説明する。
【0040】
最初の処理段階である相対座標取得段階ST1では、対応位置特定処理と、オフセット処理と、相対座標算出処理と、相対座標記憶処理とがこの順序で実行される。
図5に示されるように、対応位置特定処理、オフセット処理、および相対座標算出処理は、相対座標取得部301によって行われ、相対座標記憶処理は、連想メモリ303によって行われる。
【0041】
具体的には、対応位置特定処理では、実行対象ブロックBTの頂点に位置する画素(頂点画素)のうち、1の頂点画素(基準頂点画素)の入力画像IG上での対応位置が特定される。
【0042】
本実施形態では、実行対象ブロックBTにおける左上の頂点画素を1の頂点画素とする場合を例示する。この場合、例えば、
図6に示されるように、実行対象領域BRに含まれる実行対象ブロックBT1の左上の頂点画素VAが1の頂点画素となる。そして、当該頂点画素VAの入力画像IG上での対応位置PAが特定される。
【0043】
また、対応位置特定処理では、1の頂点画素以外の他の各頂点画素に隣接する各画素(頂点隣接画素)の入力画像IG上での対応位置もそれぞれ特定される。例えば、
図6では、実行対象ブロックBT1の他の頂点画素VB,VC,VDに隣接する頂点隣接画素NB,NC,NDの入力画像IG上での対応位置PB,PC,PDがそれぞれ特定されることになる。このような対応位置特定処理によって、実行対象ブロックBT1に対応する、入力画像上の対応ブロックTB1の各頂点の座標が特定されることになる。
【0044】
1の頂点画素および頂点隣接画素の入力画像IG上での対応位置を特定する際には、レンズデータ記憶部21に記憶された歪み情報が用いられる。
【0045】
歪み情報は、出力画像UGにおける各ブロックの頂点画素となり得る複数の主要画素の入力画像IG上での対応位置に関する情報であり、レンズデータ記憶部21に予め記憶されている。歪み情報として記憶された入力画像IG上での対応位置は、入力画像IGの左上の画素を原点GPとしたときの座標として与えられている。対応位置特定処理では、レンズデータ記憶部21に記憶された歪み情報が取得され、当該歪み情報に基づいて1の頂点画素および頂点隣接画素の入力画像IG上での対応位置がそれぞれ特定されることになる。
【0046】
特定された対応位置は、入力画像IGの左上の画素を原点GPとしたときの絶対座標として与えられる。例えば、
図6に示されるように、対応位置PA,PB,PC,PDの座標は、それぞれ(4,3+128/256)、(11+80/256,2+96/256)、(2+80/256,10+208/256)、(10+48/256,9+176/256)と与えられる。
【0047】
なお、
図6に示されるように、頂点隣接画素NB,NC,NDは、いずれも他のブロックBKの左上の頂点画素であることから、歪み情報としては、各ブロックBKの1の頂点画素の入力画像IG上での対応位置に関する情報が記録されていればよい。
【0048】
また、上記のような対応位置特定処理は、実行対象領域BRに含まれる各実行対象ブロックBTそれぞれについて実行される。すなわち、
図6に示されるように、実行対象領域BRに2つの実行対象ブロックBT1,BT2が存在する場合、2つの実行対象ブロックBT1,BT2それぞれについて対応位置特定処理が実行されることになる。
【0049】
次のオフセット処理では、対応位置特定処理で特定された4つの対応位置の座標が、基準点からの相対座標に変換される。
【0050】
具体的には、4つの対応位置の座標(対応位置座標)の中から、最小のx座標と、最小のy座標とが抽出され、最小のx座標以下の最大の整数(第1整数)と、最小のy座標以下の最大の整数(第2整数)とが特定される。そして、4つの対応位置の座標それぞれのx座標から第1整数を差し引くとともに、4つの対応位置の座標それぞれのy座標から第2整数を差し引くことによって、各対応位置の座標を変更する。このように変更された各対応位置の座標は、第1整数をx座標とし第2整数をy座標とする基準点KPを原点としたときの相対座標となる。
【0051】
例えば、
図7では、4つの対応位置の座標における最小のx座標は「2+80/256」であり、最小のy座標は「2+96/256」であることから、第1整数および第2整数は、いずれも「2」となる。そして、対応位置PAのx座標から第1整数「2」を差し引くとともに、対応位置PAのy座標から第2整数「2」を差し引くことによって、相対位置(「対応相対位置」とも称する)RA(2,1+128/256)が算出される。また、対応位置PB,PC,PDについても第1整数および第2整数を用いた同様の演算が行われて、相対位置RB,RC,RDがそれぞれ取得される。なお、基準点KP(2,2)は、相対位置を規定する座標の原点となることから相対座標系の仮想原点VPとも称される。
【0052】
相対座標算出処理では、
図8に示されるように、実行対象ブロックBTを構成する各画素(出力画素)の入力画像IG上での対応相対位置PUの相対座標がそれぞれ算出される。各出力画素の対応相対位置PUは、1の頂点画素および頂点隣接画素の入力画像IG上での対応相対位置の相対座標を用いて、補間によって算出される。補間により算出される対応相対位置PUの数は、実行対象ブロックBTの大きさ、すなわち実行対象ブロックBTに含まれる画素数に応じて異なり、本実施形態では、8×8画素の対応相対位置が算出されることになる。各対応相対位置PUの算出は、1の頂点画素および頂点隣接画素の入力画像IG上での各対応相対位置間の距離を「8」で除算することにより、算出される。1の頂点画素の対応相対位置は既得であるため、上述のような相対座標算出処理によって、1の頂点画素以外の出力画素の対応相対位置PUが算出された場合、実行対象ブロックBTを構成する全ての出力画素の入力画像IG上での対応相対位置が得られることになる。
【0053】
なお、1の頂点画素以外の出力画素の対応相対位置PUを、2の累乗である「8」の除算により算出することによれば、ビットシフトによって対応相対位置の算出を実現できるので、演算を高速化することが可能になる。すなわち、本実施形態では、ブロックBKに含まれる画素の数を2の累乗となるように設定することが好ましい。
【0054】
相対座標記憶処理では、実行対象ブロックBTを構成する全出力画素の入力画像IG上での対応相対位置の位置情報が、連想メモリ303に書き込まれる。連想メモリ303への書き込みは、対応相対位置ごとに保存先の番地(アドレス)を指定して行われ、1の番地に1の出力画素についての相対座標の整数部分が、対応相対位置の位置情報として記憶される。
【0055】
例えば、各対応相対位置の相対座標が、
図9に示される相対座標系で表される場合、各対応相対位置のうち、左上の対応相対位置RAの相対座標の整数部分(2,1)が連想メモリ303の0番地に書き込まれる。次に、同一行において隣接する対応相対位置PU1の相対座標の整数部分(3,1)が、連想メモリ303の1番地に書き込まれる。以後、同一行における各対応相対位置の相対座標の整数部分が、連想メモリ303の所定番地(「2」〜「7」)に順次に書き込まれる。そして、同一行の対応相対位置の書き込みが終了すると、次の行に移行して対応相対位置の書き込みが行われる。すなわち、対応相対位置PU8の相対座標の整数部分(1,2)が、連想メモリ303の8番地に書き込まれ、以後、対応相対位置PU8から始まる同一行における各対応相対位置の相対座標の整数部分が、連想メモリ303に書き込まれる。このような連想メモリ303への書き込みは、行単位で進み、全ての対応相対位置の位置情報が、連想メモリ303の63番地に書き込まれた時点で終了する。
【0056】
このように、対応相対位置の位置情報の記憶処理は、上記1の頂点画素の対応相対位置を始点として一定の行方向に沿って順次に行われる。
【0057】
なお、各対応相対位置の指定された保存先の番地は、各対応相対位置に関する通し番号であるともみることができる。また、本実施形態では、画像(または所定領域)上の始点画素から一定の行方向に沿って順次に画素(または位置)を読み出す際の画素等の順序づけをラスター順とも称する。
【0058】
また、このような相対座標記憶処理は、実行対象領域BRに内包される各実行対象ブロックBTそれぞれについて実行される。すなわち、
図6に示されるように、実行対象領域BRに2つの実行対象ブロックBT1,BT2が存在する場合、2つの実行対象ブロックBT1,BT2それぞれに含まれる各画素の入力画像IG上での対応相対位置の位置情報が、連想メモリ303に記憶されることになる。なお、歪み補正部30には、実行対象ブロックBTのブロック数以上の連想メモリ303が存在し、相対座標記憶処理は、実行対象ブロックBTごとに異なる連想メモリ303を用いて行われる。例えば、実行対象領域BRに2つの実行対象ブロックBT1,BT2が存在する場合、実行対象ブロックBT1,BT2それぞれに関する対応相対位置の位置情報は、実行対象ブロックBT1,BT2ごとに2つの連想メモリ303に分けて記憶されることになる。
【0059】
図5に示されるように、相対座標取得段階ST1が終了すると、歪み補正処理は、読出領域決定段階ST2へと移行する。読出領域決定段階ST2では、参照領域特定処理と、読出領域決定処理とが実行される。
図10は、入力画像上に参照領域を重畳して表示した図である。
図11は、併合される2つの参照領域を示す図である。
【0060】
参照領域特定処理では、対応ブロックTBを内包する最小の矩形領域が参照領域FRとして特定される。
【0061】
図10に示されるように、参照領域FRの設定は、対応ブロックTB1の頂点の相対座標を用いて行われる。具体的には、4頂点の相対座標の中から、最大のx座標と、最大のy座標とが抽出され、最大のx座標以上の最小の整数(第3整数)と、最大のy座標以上の最小の整数(第4整数)とが特定される。そして、第3整数をx座標とし第4整数をy座標とする点、第3整数をx座標とし「0」をy座標とする点、「0」をx座標とし第4整数をy座標とする点、および仮想原点VP(0,0)それぞれを頂点とする矩形領域が参照領域FRとして設定される。
【0062】
例えば、
図10では、4頂点の相対座標における最大のx座標は「9+80/256」であり、最大のy座標は「8+208/256」であることから、第3整数および第4整数は、それぞれ「10」、「9」となる。すなわち、
図10では、点VP(0,0)、点NP1(10,0)、点NP2(0,9)、点NP3(10,9)を頂点とする矩形領域が参照領域FRとして設定されることになる。
【0063】
このような参照領域特定処理は、実行対象領域BRに内包される各実行対象ブロックBTそれぞれの対応ブロックTBについて実行される。すなわち、
図6に示されるように、実行対象領域BRに2つの実行対象ブロックBT1,BT2が存在する場合、2つの実行対象ブロックBT1,BT2それぞれの対応ブロックについて参照領域がそれぞれ特定されることになる。
【0064】
読出領域決定処理では、各参照領域FRの頂点の座標を同一座標系で比較することによって、各参照領域FRを併合する処理が行われる。各参照領域FRを併合して得られる併合領域は、次の画素値読込段階ST3において、入力画像IGから画像データを読み出す際の読出領域RNとして用いられる。このように、併合領域は読出領域として用いられるため、読出領域決定処理では、併合領域に含まれる画素の行ごとに読出開始位置の情報と読出終了位置の情報とが取得されることになる。
【0065】
参照領域FRの併合手法としては、例えば、次のような手法を採用することができる。
【0066】
具体的には、まず、各参照領域FRの頂点の座標を同一座標系で表した上で、各頂点のうち、最小のy座標を有する頂点と最大のy座標を有する頂点とが特定される。
【0067】
そして、最小のy座標を有する頂点が属する行から最大のy座標を有する頂点が属する行まで、行ごとに、読出開始位置と読出終了位置とが決定される。
【0068】
各行における読出開始位置および読出終了位置は、行ごとに、行と交差する各参照領域の各縦辺のx座標同士を互いに比較することによって決定することができる。
【0069】
例えば、
図11に示されるように、2つの参照領域FR1,FR2を併合する場合を想定する。この場合、注目行LFの読出開始位置は、当該注目行LFと交差する参照領域FR1,FR2の各縦辺EL11,EL12,EL21,EL22のうち、最小のx座標を有する縦辺EL11によって示される位置PSとなる。
【0070】
また、注目行LFの読出終了位置を決定する際には、読出開始位置PSを含む縦辺EL11を有する参照領域FR1において、当該縦辺EL11と対になる縦辺EL12によって示される位置P12が、読出終了候補位置として設定される。
【0071】
そして、当該読出終了候補位置よりも小さいx座標の縦辺が、参照領域FR1以外の他の参照領域FR2に存在するか否かに基づいて、読出終了候補位置が、読出終了位置となるか否かが判定される。読出終了候補位置よりも小さいx座標の縦辺が存在する場合、読出終了候補位置の更新が行われる。一方、読出終了候補位置よりも小さいx座標の縦辺が存在しない場合、現在の読出終了候補位置が読出終了位置として決定される。
図11では、参照領域FR2における縦辺EL21のx座標が、読出終了候補位置よりも小さいため、読出終了候補位置の更新が行われることになる。
【0072】
読出終了候補位置の更新は、現在の読出終了候補位置よりも小さいx座標の縦辺EL21を有する参照領域FR2において、当該縦辺EL21と対になる縦辺EL22によって示される位置P22が、新たな読出終了候補位置として設定される。
【0073】
そして、新たな読出終了候補位置よりも小さいx座標の縦辺が、参照領域FR1,FR2以外の他の参照領域に存在するか否かに基づいて、新たな読出終了候補位置が、読出終了位置となるか否かが判定される。
図11では、参照領域FR1,FR2以外の他の参照領域が存在しないため、新たな読出終了候補位置よりも小さいx座標の縦辺を有する他の参照領域は存在しない。したがって、新たな読出終了候補位置が、注目行LFの読出終了位置PEとして設定されることになる。
【0074】
このように、読出領域決定処理では、読出開始位置および読出終了位置の特定が行ごとに行われ、複数の参照領域FRを併合した読出領域RNが決定される。複数の参照領域FRを併合して読出領域RNを設定することによれば、参照領域FR同士の重複部分における画像データの重複読み出しをなくすことができる。
【0075】
図5に示されるように、読出領域決定段階ST2が終了すると、歪み補正処理は、画素値読込段階ST3へと移行する。画素値読込段階ST3では、画素値読出処理と、座標検索処理と、特定画素値記憶処理とが実行される。
図12は、読出領域RNから読み出される画素の読出順序を模式的に示す図である。
図13は、読出領域RNの一部を示す図である。
【0076】
具体的には、画素値読出処理では、入力画像IGを構成する画素のうち、読出領域RNに含まれる入力画素の画素値が、画像データ記憶部22から読み出される。画素値の読出順序は、
図12に示されるようなラスター順となる。すなわち、読出領域RNにおいて、最小のy座標を有する行から最大のy座標を有する行まで、行ごとに各行の読出開始位置から読出終了位置まで各入力画素の画素値が順次に読み出される。
【0077】
このような画素値の読出は、読出制御手段としての機能をも有する読出領域決定部305の制御に基づいて行われる。読出領域決定部305は、読出領域決定処理で特定された、行ごとの読出開始位置および読出終了位置の情報に基づいて読出アドレスを生成し、当該読出アドレスをDMAC36に出力する。DMAC36は、読出アドレスに基づいて、画像データ記憶部22から入力画素の画素値を読み出す。
【0078】
そして、画像データ記憶部22から読み出された入力画素の画素値は、セレクタSLを介して画素値記憶部307に順次に入力される。
【0079】
画素値記憶部307は、読出領域RNから読み出された入力画素の画素値を記憶する機能を有し、歪み補正部30内には、読出領域RNに含まれる参照領域FRごとに画素値記憶部307がそれぞれ設けられている。
【0080】
セレクタSLは、読出位置特定部306から入力される制御信号に応じて、画像データ記憶部22から読み出された入力画素の画素値を、参照領域FRごとに対応して設けられた画素値記憶部307に出力する。これにより、読出領域RN中の参照領域FR1から読み出された入力画素の画素値は、参照領域FR1用の画素値記憶部307に記憶され、参照領域FR2から読み出された入力画素の画素値は、参照領域FR2用の画素値記憶部307に記憶されることになる。
【0081】
各画素値記憶部307では、
図4に示されるように、セレクタSLを介して入力された画素の画素値が、ラインメモリ371に入力される。
【0082】
ラインメモリ371は、参照領域FRにおける1行分(1ライン分)の画素の画素値を記憶可能な容量を有するとともに、いわゆるFIFO方式でデータを処理する機能を有している。すなわち、ラインメモリ371は、参照領域FRにおける1ライン分の画素値が記憶された状態で、新たな画素の画素値が入力されると、最初に記憶されていた画素値を出力する。
【0083】
当該ラインメモリ371から出力された1画素分の画素値は、ローカルメモリLM中の第1メモリLM1に直接入力されるとともに、1画素分の画素値を保持可能なレジスタRG1を一旦介してローカルメモリLM中の第2メモリLM2に入力される。
【0084】
このような構成を有する画素値記憶部307では、第2メモリLM2には、第1メモリLM1に入力される画素の画素値よりも、1画素前の画素の画素値が入力されることになる。詳細には、ラインメモリ371から出力された第1所定画素の画素値が第1メモリLM1に入力される場合は、第2メモリLM2には、上記第1所定画素よりも1つ前に出力された画素の画素値(1画素分前の画素の画素値)が入力されることになる。
【0085】
また、画素値記憶部307では、画像データ記憶部22から入力された画素の画素値は、ラインメモリ371の他に、ローカルメモリLM中の第3メモリLM3に直接入力されるとともに、1画素分の画素値を保持可能なレジスタRG2を介してローカルメモリLM中の第4メモリLM4にも入力される。
【0086】
これにより、第4メモリLM4には、第3メモリLM3に入力される画素の画素値よりも、1画素前に画素値記憶部307に入力された画素の画素値が入力されることになる。詳細には、画素値記憶部307に入力された第2所定画素の画素値が第3メモリLM3に記憶される場合は、第4メモリLM4には、上記第2所定画素よりも1つ前に入力された画素の画素値(1画素分前の画素の画素値)が入力されることになる。
【0087】
ここで、画素値記憶部307における画素の記憶状態について詳述する。
【0088】
例えば、
図13に示されるような読出領域RNに含まれる各画素の画素値について画素値読出処理が実行されると、参照領域FR用の画素値記憶部307には、参照領域FRに含まれる入力画素が、仮想原点VPに位置する画素PE0からラスター順で画素値記憶部307に入力されることになる。すなわち、各参照領域FRにおける画素値読出処理では、第1行目LN1の画素PE0から順に画素値が画素値記憶部307に入力され、第1行目LN1の画素PE10まで画素値の入力が終了すると、画素PE11から順に第2行目LN2の画素の画素値が入力される。以後、読出領域RNに含まれる全ての入力画素の画素値が読み出されるまで、画素値の読み出しが順次に行われる。
【0089】
このような画素値読出処理によって、ラインメモリ371には、参照領域FRにおける1ライン分の画素の画素値が記憶されることになる。例えば、画像データ記憶部22から第2行目LN2の画素PE18の画素値が読み出され、画素値記憶部307に入力される場合を想定する。
【0090】
このとき、ラインメモリ371には、画素PE18直前の1ライン分の画素、すなわち第1行目LN1の画素PE7から第2行目LN2の画素PE17までの11個の画素PE7〜PE18に関する各画素値が記憶されていることになる。またこのとき、レジスタRG1には、ラインメモリ371から前回出力された第1行目LN1の画素PE6の画素値が保持され、レジスタRG2には、画素値記憶部307に前回入力された第2行目LN2の画素PE17の画素値が保持されていることになる。
【0091】
このような状態において、上記想定どおり画素値記憶部307に画素PE18の画素値が入力されると、第1メモリLM1には、ラインメモリ371から出力された画素PE7の画素値が記憶されることになる。第2メモリLM2には、レジスタRG1に保持されていた画素PE6の画素値が記憶されることになる。第3メモリLM3には、入力された当該画素PE18の画素値がそのまま記憶されることになる。第4メモリLM4には、レジスタRG2に保持されていた画素PE17の画素値が記憶されることになる。
【0092】
ここで、ローカルメモリLMに記憶されている各画素値を有する各画素の位置をみると、ローカルメモリLMには、参照領域FRに設定された整数の相対座標によって規定される格子(空間格子)の各格子点に位置する画素(「格子画素」とも称する)の画素値が記憶されていることが分かる。例えば、第2行目LN2の画素PE18の画素値が画素値記憶部307に入力される上記想定では、格子KC1(
図12の斜線ハッチング領域を参照)の各格子点に位置する画素PE6,PE7,PE17,PE18の各画素値がローカルメモリLMに記憶されている。
【0093】
そして、ローカルメモリLMに記憶される画素値は、画像データ記憶部22から新たな画素の画素値が入力される度に、記憶対象とする格子の位置を変更しつつ、更新されることになる。例えば、上記想定からさらに進展して、次の画素PE19(すなわち、画素PE18に隣接する画素PE19)の画素値が画素値記憶部307に入力されると、ローカルメモリLMには、格子KC2の各格子点に位置する画素PE7,PE8,PE18,PE19の各画素値がローカルメモリLMに記憶されることになる。
【0094】
このように画素値記憶部307は、隣り合う4つの画素で形成された格子の格子点の組を、入力された各画素を組み替えることによって編成する編成機能(編成手段)を有し、画素値記憶部307では、当該編成機能によって編成された格子画素の画素値が、ローカルメモリLMに同時期に一時的に記憶された状態となる。
【0095】
図5に戻って、画素値読込段階ST3における座標検索処理では、連想メモリ303と読出位置特定部306との協働により、連想メモリ303に記憶された対応相対位置の位置情報の中から、画像データ記憶部22から画素値記憶部307に入力された画素の読み出し位置に関連した位置情報を検索する処理が行われる。
図14は、読出領域RN中の或る参照領域FRに含まれる各対応相対位置と連想メモリ303の記憶状態との関係を示す図である。
【0096】
具体的には、画像データ記憶部22から読出領域RNに含まれる入力画素の読み出しが開始されると、読出領域決定部305の制御に応じて、読出位置特定部306では、読み出された画素の読出位置がカウントされる。読出位置のカウントは、入力画素の読み出しに応じて、読出領域RNにおける読出位置を示す座標を更新することによって行われる。
【0097】
読出位置が更新されると、更新された読出位置は、各参照領域FRそれぞれの基準点KPを原点とした相対座標系に変換される。このような座標変換は、読出位置を示す座標から各参照領域FRそれぞれの基準点KPを差し引くことによって、行うことができる。
【0098】
また、読出位置特定部306では、座標変換後の読出位置の座標に基づいて、現在の読出位置がいずれの参照領域FRに含まれるかが特定される。
【0099】
そして、読出位置特定部306は、現在の読出位置が、いずれの参照領域FRに含まれるかに関する情報(「所属領域情報」とも称する)を、セレクタSLおよび連想メモリ303に出力するとともに、座標変換後の読出位置の座標を、連想メモリ303に出力する。
【0100】
連想メモリ303では、読出位置特定部306から入力された所属領域情報に基づいて、現在の読出位置における参照領域FRに含まれる対応ブロック内の対応相対位置の位置情報を記憶した連想メモリ303が特定される。
【0101】
そして、特定された連想メモリ303では、当該連想メモリ303に記憶された対応相対位置の位置情報の中から、読出位置特定部306より入力された読出位置の座標よりもx座標およびy座標の値がいずれも「1」ずつ小さい座標の位置情報が検索される。当該検索によって、連想メモリ303に記憶された対応相対位置の位置情報の中から、入力された読出位置の座標よりも(1,1)分小さい位置情報が発見された場合は、連想メモリ303は、当該対応相対位置の位置情報を記憶する番地、換言すれば当該対応相対位置の通し番号を含む信号を画素値記憶部307に対して出力する。
【0102】
例えば、
図14に示されるように、画像データ記憶部22から画素PE18の画素値が読み出された場合は、参照領域FRにおける画素PE18の座標(7,1)が、読出位置特定部306から連想メモリ303に入力される。連想メモリ303では、連想メモリ303に記憶された対応相対位置の位置情報の中から、入力された読出位置の座標(7,1)よりも(1,1)分小さい座標(6,0)を有する位置情報の検索が行われる。
図14に示されるように、連想メモリ303には、「5」番地に座標(6,0)の対応相対位置の位置情報が記憶されていることから、連想メモリ303は、通し番号「5」を画素値記憶部307に出力することになる。
【0103】
このような座標検索処理は、上記画素値読出処理と並行して行われ、次の特定画素値記憶処理(
図5参照)では、座標検索処理の処理結果と画素値読出処理の処理結果とを反映した処理が行われる。
図15は、ローカルメモリLMの記憶状態を示す図である。
図16は、読出領域RNの一部を示す図である。
【0104】
具体的には、特定画素値記憶処理では、連想メモリ303からの信号入力に応じて、ローカルメモリLMに記憶されている各画素値の記憶処理が行われる。より詳細には、特定画素値記憶処理では、連想メモリ303から信号入力があると、当該信号の入力時点においてローカルメモリLMに一時的に記憶されている各画素値が、当該信号に含まれる通し番号によって指定される番地に特定画素値として記憶される。
【0105】
例えば、画像データ記憶部22から画素PE18の画素値が読み出される上記想定では、画素値読出処理によって、画素PE6,PE7,PE17,PE18の各画素値がローカルメモリLMに一時的に記憶された状態になるとともに、座標検索処理によって、通し番号「5」を含む信号が画素値記憶部307に出力されることになる。このような状態で特定画素値記憶処理が実行されると、
図15に示されるように、ローカルメモリLMに一時的に記憶されている画素PE6の画素値PV(6,0)、画素PE7の画素値PV(7,0)、画素PE17の画素値PV(6,1)、および画素PE18の画素値PV(7,1)が、ローカルメモリLM内の通し番号「5」によって指定される番地「5」に記憶されることになる。より詳細には、ローカルメモリLM内の第1メモリLM1、第2メモリLM2、第3メモリLM3および第4メモリLM4それぞれにおいて一時的に記憶されていた各画素値が、第1メモリLM1、第2メモリLM2、第3メモリLM3および第4メモリLM4それぞれの「5」番地に記憶される。
【0106】
ここで、ローカルメモリLMの「5」番地に記憶された各画素値は、上述のように、通し番号「5」番の対応相対位置PU5を内包する格子KC1の各格子点に位置する画素PE6,PE7,PE17,PE18の画素値となる(
図16参照)。すなわち、画像データ記憶部22から画素PE18の画素値が読み出された場合は、対応相対位置PU5を内包する格子画素PE6,PE7,PE17,PE18の画素値がローカルメモリLMに記憶される。
【0107】
このような対応相対位置を内包する格子画素(「内包格子画素」とも称する)の画素値を記憶する処理は、読出領域RNに含まれる各参照領域FRにおける全ての対応相対位置について行われる。すなわち、特定画素値記憶処理では、各参照領域FRに含まれる対応相対位置それぞれに関する、4つの内包格子画素の画素値が特定画素値として、参照領域ごとに対応して設けられた各画素値記憶部307のローカルメモリLMの所定番地に記憶されることになる。
【0108】
このように、画素値読込段階ST3では、画像データ記憶部22から読出領域RNに含まれる入力画素が読み出される度に、対応相対位置を内包する内包格子画素が読み出されたか否かが判定される。そして、或る対応相対位置を内包する内包格子画素が読み出されたと判定された場合は、当該内包格子画素の画素値が、当該或る対応相対位置の識別番号(ここでは、通し番号)と関連付けて記憶される。
【0109】
なお、内包格子画素が読み出されたか否かの判定は、連想メモリ303の検索機能によって実現されるため、連想メモリ303は、内包格子画素が読み出されたか否かの判定手段として機能するとも表現できる。また、内包格子画素は、後述の画素値算出処理による対応相対位置に対応した出力画素の画素値の算出のために用いられる対応相対位置周辺の画素(「周辺画素」とも称する)となる。
【0110】
図5に示されるように、画素値読込段階ST3が終了すると、歪み補正処理は、出力画素値算出段階ST4へと移行する。出力画素値算出段階ST4では、相対座標取得処理と、画素値算出処理とが実行される。
図17は、出力画素値の算出の様子を示す図である。
【0111】
相対座標取得処理は、相対座標取得部301によって実行され、各実行対象ブロックBTを構成する全ての出力画素の入力画像IG上での対応相対位置の相対座標が取得される。対応相対位置の相対座標は、上述の対応位置特定処理とオフセット処理と相対座標算出処理とを再度実行することによって取得できる。或いは、相対座標取得段階ST1において、算出された対応相対位置の相対座標を一旦記憶し、記憶しておいた対応相対位置の相対座標を用いる態様としてもよい。
【0112】
画素値算出処理は、画素値算出部308によって実行され、対応相対位置の相対座標と当該対応相対位置についての内包格子画素の画素値とを用いたバイリニア補間によって、当該対応相対位置における画素値が算出される。
【0113】
例えば、
図17に示されるように、通し番号「2」番の対応相対位置PU2における画素値を算出する場合は、ローカルメモリLMの「2」番地に格納された内包格子画素の画素値が読み出され、対応相対位置PU2の相対座標と4つの内包格子画素PE14,PE15,PE25,PE26の画素値PV(3,1),PV(4,1)PV(3,2),PV(4,2)とを用いたバイリニア補間によって、対応相対位置PU2の画素値が算出される。そして、当該画素値算出処理によって算出された対応相対位置PU2の画素値は、出力画像UGの実行対象ブロックBTにおいて対応する出力画素PT2の画素値として出力されることになる。
【0114】
このような対応相対位置における画素値の算出処理は、各実行対象ブロックBTにおける全ての出力画素について行われ、画素値算出処理によって、各実行対象ブロックBTにおける全ての出力画素の画素値が算出されることになる。そして、画素値算出部308から出力された出力画素の画素値は、出力データ記憶部309に転送され、記憶される。
【0115】
以上のように、画像処理装置1Aは、入力画像IGに歪み補正処理を施して出力画像UGを出力する画像処理装置であって、出力画像UGを分割して得られる矩形領域BK中の所定画素に対する、入力画像IG上での対応位置を取得する相対座標取得部301と、矩形領域BKの入力画像IG上での対応領域を内包した参照領域FRを、出力画像UG上で連続して並ぶ複数の矩形領域BKそれぞれについて特定する参照領域特定部304と、上記複数の矩形領域BKそれぞれに関する各参照領域FRを併合して、併合領域を得る読出領域決定部305と、入力画像IGにおいて、併合領域に含まれる各画素の画素値を読み出させる読出制御手段と、当該読出制御手段によって読み出された画素の画素値を用いて、歪み補正処理を実行し、出力画像UGの画素値を取得する補正処理手段とを備えている。
【0116】
このような画像処理装置1Aでは、出力画像UG上で連続して並ぶ複数の矩形領域BKそれぞれに関する各参照領域FRを併合し、併合して得られた併合領域に含まれる、入力画像IG上の各画素の画素値が読み出される。このため、参照領域FRごとに入力画像IG上の各画素の画素値を読み出す場合に比べて、画素の重複読み出しを減らすことができるので、画像データの転送量を減らすことが可能になり、ひいては、画像データの読み出しに要する時間を短縮することができる。
【0117】
また、画像処理装置1Aでは、入力画像IGにおいて、併合領域に含まれる各画素の画素値が、画素の行ごとに行方向に沿って順次に読み出される。これによれば、画像データ記憶部22からのデータ読み出しに際して、行方向に長くアクセスすることが可能になり、メモリの転送効率を高めることができる。より詳細には、連続して並ぶブロックを併合した併合領域単位で画像データを読み出すことによれば、ブロックBKごとに画像データを読み出す場合に比べて、一度に行うメモリ転送の単位を大きくすることができるので、データの転送効率を高めることができる。
【0118】
<2.変形例>
以上、実施の形態について説明したが、この発明は、上記に説明した内容に限定されるものではない。
【0119】
例えば、上記実施形態では、2つの参照領域FRを併合して読出領域RNを決定する場合について例示したが、併合する参照領域FRの数は、2つに限定されず、3つ以上であってもよい。
図18は、4つの参照領域を併合して得られる読出領域を示す図である。
【0120】
具体的には、
図18で示されるように、4つの対応ブロックTB10〜TB13を内包する各参照領域を併合することによって得られる領域RNaを読出領域としてもよい。
【0121】
また、読出領域決定部305は、各参照領域FRをそのまま併合して併合領域を得ていたが、参照領域FRを加工した後、加工後の参照領域FRを併合して読出領域を決定する態様としてもよい。
図19は、加工後の参照領域FRを併合して得られる併合領域の一例を示す図である。
【0122】
具体的には、
図19に示されるように、各参照領域FRに対して、領域の角を削る面取り処理を施し、面取り処理後の領域を併合して得られる併合領域を、読出領域としてもよい。
【0123】
より詳細には、読出領域決定部305は、対応ブロックTBの頂点ごとに、当該頂点を通る直線であって所定角度の傾きを有した直線(切取直線)LKをそれぞれ求め、参照領域FRにおいて、当該切取直線LKによって切り取られる除外領域RE1,RE2(
図19の斜線ハッチング領域)を特定する。そして、読出領域決定部305は、参照領域FRから除外領域RE1,RE2を省いて得られる領域を、面取り処理後の領域とする。このような処理を各参照領域FRそれぞれに対して施すことによって、各参照領域FRに関する、面取り処理後の領域をそれぞれ求める。そして、各参照領域FRに関する面取り処理後の領域を併合して、読出領域RNbを決定する。
【0124】
このように、各参照領域FRに対して、面取り処理を施し、面取り処理後の領域を併合して読出領域RNbを決定することによれば、出力画素の画素値の算出に用いない不要な画素を読出対象から省くことができるので、読み出しによる画像データの転送量を減らすことが可能になる。
【0125】
なお、切取直線LKによって参照領域FRを分断すると2つの領域が得られるが、2つの領域のうち、面積の小さい領域が除外領域RE1(RE2)とされる。また、入力画像において、隣り合う4つの画素によって格子領域を形成した場合、切取直線LKが通る各格子領域の各格子点に位置する各画素は、面取り処理によって取り除かれない画素、すなわち除外領域RE1,RE2に含まれない画素となる。
【0126】
また、除外領域RE1,RE2の特定に用いられる切取直線LKの傾きは、±45度であることが好ましい。面取り処理を行わないときの通常の読出領域、±45度の傾きを有する直線を用いて面取り処理を行ったときの読出領域、および対応ブロックそれぞれに含まれる画素数の比は、113:101:100となる。このように、面取り処理によって読み出す画素数を大幅に減らすことが可能になる。
【0127】
また、上記実施形態では、歪み補正部30を一つ有する構成としていたが、これに限定されず、歪み補正部を複数個有する構成としてもよい。
図20は、変形例に係る画像処理装置1Bの構成を示す概略図である。
【0128】
具体的には、
図20に示される画像処理装置1Bでは、第2処理回路3において、複数の歪み補正部30A〜30Cが設けられている。当該画像処理装置1Bでは、各歪み補正部30A〜30Cにおいて、同一の出力画像UGにおける異なる実行対象領域BRについての歪み補正処理が並行して行われる。このように、複数の歪み補正部30A〜30Cを設けて、歪み補正処理を並行して行うことによれば、スループットの向上および歪み補正処理の高速化を実現することができる。
【0129】
なお、歪み補正処理を並行して実行する場合、各歪み補正部30A〜30Cにおける歪み補正処理は、歪み補正処理の処理段階ST1〜ST4をずらして実行してもよい。例えば、歪み補正部30Aにおいて実行される歪み補正処理の処理段階が、相対座標取得段階ST1であった場合は、歪み補正部30Bでは画素値読込段階ST3、歪み補正部30Cでは出力画素値算出段階ST4となるように歪み補正処理の実行タイミングがずらされる。このように各歪み補正部30A〜30Cにおいて、歪み補正処理の実行タイミングをずらすことによれば、歪み補正処理によるバスの利用を分散することができるので、バスの利用効率を高めることができる。
【0130】
また、上記実施形態の画像処理装置1Aにおいて、歪み補正部30の後段に圧縮処理部37をさらに設けてもよい。
図21は、変形例に係る画像処理装置1Cの構成を示す図である。
【0131】
具体的には、
図21の画像処理装置1Cは、第2処理回路3において圧縮処理部37をさらに有し、圧縮処理部37は、画素値算出部308から入力された画像データに対して、例えばJPEG方式で圧縮処理を施す。ここで、画像の圧縮処理は、画像を所定サイズ(例えば8×8画素)のブロックに分割して、ブロック単位で行われるため、歪み補正部30の後段に圧縮処理部37を設けることが、回路上、好適な配置となる。
【0132】
具体的には、歪み補正部30からは、歪み補正処理の施された画像データがブロック単位で出力される。このため、歪み補正部30の後段に圧縮処理部37を設けると、圧縮処理部37には、ブロック単位の画像データが入力されることになり、圧縮処理部37では、入力されたブロック単位の画像データに対してそのまま圧縮処理を施すことが可能になる。このように、歪み補正部30の後段に圧縮処理部37を設けることによれば、画像データを一時記憶するための記憶部(例えばレジスタ)を設けることなく、歪み補正処理と圧縮処理とを連続して行うことができ、回路構成の単純化を図ることが可能になる。
【0133】
また、上記実施形態では、実行対象ブロックBTの大きさが8×8画素である場合を例示したが、これに限定されず、実行対象ブロックBTの大きさを32×32画素、または128×128画素としてもよい。
【0134】
また、上記実施形態では、歪み情報に基づいて、各実行対象ブロックBTにおける1の頂点画素および頂点隣接画素の入力画像IG上での対応位置がそれぞれ特定される態様としていたが、これに限定されない。
【0135】
具体的には、歪み情報に基づいて、複数の実行対象ブロックBTをひとまとまりにして形成される領域(複数ブロック領域)における1の頂点画素および頂点隣接画素の入力画像IG上での対応位置がそれぞれ特定される態様としてもよい。複数ブロック領域に含まれる各実行対象ブロックBTの位置は、予め既知である。このため、複数ブロック領域における1の頂点画素および頂点隣接画素の入力画像IG上での対応位置を用いた補間演算により、複数ブロック領域に含まれる各実行対象ブロックBTそれぞれの1の頂点画素および頂点隣接画素を特定することができる。
【0136】
このように、複数ブロック領域における1の頂点画素および頂点隣接画素の入力画像IG上での対応位置に基づいて、複数ブロック領域に含まれる各実行対象ブロックBTそれぞれの1の頂点画素および頂点隣接画素を算出することによれば、レンズデータ記憶部21に記憶する歪み情報の情報量を削減することが可能になる。また、レンズデータ記憶部21からのデータの転送量をも減らすことができる。
【0137】
また、上記実施形態では、画像処理装置1Aにおいて歪み補正処理を実現していたが、これに限定されない。
図22は、変形例に係る撮像装置100を示す図である。
【0138】
図22に示されるように、撮像装置100は、例えば、COMSセンサまたはCCDセンサなどの撮像素子101を有して構成され、被写体像を形成する光(被写体光)を受光して、被写体像に関する画像信号を生成する機能を有している。
【0139】
撮像素子101で取得された撮影画像の画像データは、第1処理回路2の画像データ記憶部22に記憶される。そして、撮像装置100では、当該画像データに対して、第2処理回路3の歪み補正部30によって上述の歪み補正処理が施される。