(57)【要約】      （修正有）【課題】撮像画像の歪補正を少ないバッファメモリ容量で行う画像処理装置を提供する。【解決手段】入力画像を構成する複数の画素がラスタスキャン順に入力され、入力画像の歪に基づいて画素の位置を補正する補正演算を行い、補正演算の結果得られた補正画素位置の情報を画素に付加してラスタスキャン順に出力する歪補正回路と、歪補正回路によって補正画素位置の情報が付加された画素がラスタスキャン順に入力されて、補正画素位置が連続する画素の集合である伝送ブロック毎に出力する２段以上に階層化された複数の出力バッファと、ラスタスキャン順に入力された画素を、２段以上に階層化された複数の出力バッファのうち初段の出力バッファに書き込むと共に、書き込んだ画素を後段の出力バッファに順次転送するものであって、各段の出力バッファに伝送ブロックを分割したサブブロックを記憶させるコントローラとを具備する。【選択図】図１
2019160063.tif 000002
【特許請求の範囲】
【請求項１】
入力画像を構成する複数の画素がラスタスキャン順に入力され、前記入力画像の歪に基づいて前記画素の位置を補正する補正演算を行い、前記補正演算の結果得られた補正画素位置の情報を前記画素に付加して前記ラスタスキャン順に出力する歪補正回路と、
前記歪補正回路によって補正画素位置の情報が付加された画素が前記ラスタスキャン順に入力されて、前記補正画素位置が連続する画素の集合である伝送ブロック毎に出力する２段以上に階層化された複数の出力バッファと、
前記ラスタスキャン順に入力された画素を、前記２段以上に階層化された複数の出力バッファのうち初段の出力バッファに書き込むと共に、書き込んだ画素を後段の出力バッファに順次転送するものであって、各段の出力バッファに前記伝送ブロックを分割したサブブロックを記憶させるコントローラと
を具備した画像処理装置。
【請求項２】
前記２段以上に階層化された複数の出力バッファは、後段ほど出力バッファ数が少ない
請求項１に記載の画像処理装置。
【請求項３】
前記２段以上に階層化された複数の出力バッファは、輝度用の出力バッファと色差用の出力バッファとを有し、前記色差用の出力バッファの段数は前記輝度用の出力バッファの段数よりも多い
請求項１又は２に記載の画像処理装置。
【請求項４】
前記コントローラは、前記出力バッファに前記サブブロックの画素が充填されると後段の出力バッファに充填されたサブブロックの画素を転送し、前記伝送ブロックを構成する複数のサブブロックの画素が各段の前記出力バッファに充填されると、充填されている各段のサブブロックを連結した伝送ブロックの画素を出力する
請求項１に記載の画像処理装置。
【請求項５】
前記コントローラは、前記サブブロック毎に画像位置を特定するタグ情報を付与する
請求項１に記載の画像処理装置。
【請求項６】
前記コントローラは、前記補正画素位置に含まれる水平画素位置データの上位ビットにより前記タグ情報を生成する
請求項５に記載の画像処理装置。
【請求項７】
歪補正回路が、入力画像を構成する複数の画素をラスタスキャン順に入力し、前記入力画像の歪に基づいて前記画素の位置を補正する補正演算を行い、前記補正演算の結果得られた補正画素位置の情報を前記画素に付加して前記ラスタスキャン順に出力し、
２段以上に階層化された複数の出力バッファの書き込み及び読み出しを制御するコントローラが、前記歪補正回路によって補正画素位置の情報が付加された画素を前記ラスタスキャン順に入力し、前記ラスタスキャン順に入力された画素を、前記２段以上に階層化された複数の出力バッファのうち初段の出力バッファに書き込むと共に、書き込んだ画素を後段の出力バッファに順次転送することで、各段の出力バッファに前記補正画素位置が連続する画素の集合であるサブブロックを記憶させ、前記各段の出力バッファに記憶された複数のサブブロックを連結した伝送ブロックを出力する
画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、画像処理装置及び画像処理方法に関する。
【背景技術】
【０００２】
一般的に、デジタルカメラ等の撮像装置で被写体を撮像して得られた画像は、撮像レンズ等の光学系が有する歪曲収差や倍率色収差の影響を受ける。例えば、撮像装置によって取得した画像を、自動車の衝突防止等に利用したり監視カメラに利用したりする場合等においては、その目的から超広角レンズが採用されることがあり、歪曲収差や倍率色収差が大きくなる傾向にある。
【０００３】
歪曲収差を抑制するためには、レンズの材質を工夫したり、非球面レンズを用いたりするが、設計や製造のコストが増大するという問題がある。また、倍率色収差を抑制するためには、屈折率の異なる素材のレンズの組を多数使用するためにレンズ数が多くなり、装置の大型化や製造コストが増大してしまうという問題がある。
【０００４】
そこで、近年では、これらの問題を解決するものとして、歪曲収差や倍率色収差によって画像に歪みなどが生じる場合、画像に対して電気的に、光学系で生じる歪みを補正する画像処理装置が用いられている。
【０００５】
従来の画像処理装置における電気的補正方法では、補正後の出力画素をラスタスキャン順に出力するため、出力画素位置から補正に必要な入力画素位置を計算していた。ところが、画像の歪みが大きい場合、出力画素位置と入力画素位置に大きなずれが生じる。従って、多数のラインバッファを用意して入力画素を保持しておく必要があるため、装置が大型化してしまう。また、一般的に、ラインバッファはＳＲＡＭで構成されるが、ＳＲＡＭは高価であるため、製造コストが高くなってしまうという問題がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−２８７５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
実施形態は、バッファメモリ容量の低減及び伝送効率の向上を図ることができる画像処理装置及び画像処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態の画像処理装置は、入力画像を構成する複数の画素がラスタスキャン順に入力され、前記入力画像の歪に基づいて前記画素の位置を補正する補正演算を行い、前記補正演算の結果得られた補正画素位置の情報を前記画素に付加して前記ラスタスキャン順に出力する歪補正回路と、前記歪補正回路によって補正画素位置の情報が付加された画素が前記ラスタスキャン順に入力されて、前記補正画素位置が連続する画素の集合である伝送ブロック毎に出力する２段以上に階層化された複数の出力バッファと、前記ラスタスキャン順に入力された画素を、前記２段以上に階層化された複数の出力バッファのうち初段の出力バッファに書き込むと共に、書き込んだ画素を後段の出力バッファに順次転送するものであって、各段の出力バッファに前記伝送ブロックを分割したサブブロックを記憶させるコントローラとを具備する。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施の形態に係る画像処理装置を示すブロック図。
【図２】図１中の歪補正回路１の具体的な構成の一例を示すブロック図。
【図３】画像補正処理を説明するためのフローチャート。
【図４】図１中のバッファ回路３を説明するための説明図。
【図５】図１中のバッファ回路３の具体的な構成の一例を示すブロック図。
【図６】多層化されていない場合の出力バッファの書き込み及び読み出しを説明するための説明図。
【図７】多層化されている場合の出力バッファの書き込み及び読み出しを説明するための説明図。
【図８Ａ】図１中の出力バッファ３２の動作を説明するための説明図。
【図８Ｂ】図１中の出力バッファ３３の動作を説明するための説明図。
【図９】バッファ回路３の実装例を示す説明図。
【図１０】図９の実装例の動作を説明するための説明図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施の形態について詳細に説明する。
【００１１】
図１は本発明の一実施の形態に係る画像処理装置を示すブロック図である。本実施の形態は歪補正処理においてラインバッファ容量を低減するラスタスキャン入力・ランダム出力を採用する。本実施の形態はこのラスタスキャン入力・ランダム出力の歪補正に際して、出力バッファを多層化することにより、バッファサイズ（容量）の低減及び伝送効率の向上を可能にするものである。
【００１２】
図１の画像処理装置は、ＣＰＵ２５を備えている。ＣＰＵ２５は図示しないメモリに記憶されたプログラムに従って動作して各部を制御するようになっている。撮像部２２は、ＣＭＯＳセンサ等の図示しない撮像素子を備えている。撮像部２２は、図示しない光学系を介して入射した光学像を撮像素子によって光電変換することで、撮像信号（撮像画像）を取得する。撮像部２２の出力（撮像画像）は画像処理回路２１に与えられ、画像処理回路２１によって歪補正された後、バス２３を介してＤＲＡＭ２４に与えられて記憶されるようになっている。撮像部２２からの撮像画像は光学系の歪曲収差等による歪みを有しており、画像処理回路２１は、歪曲収差の補正等の各種画像処理を行う。
【００１３】
撮像部２２からのラスタスキャン順の撮像出力は画像処理回路２１を構成する歪補正回路１に入力される。歪補正回路１は、入力された撮像画像に対して歪補正及び倍率色収差補正を行ってポスト処理回路２に出力する。ポスト処理回路２は、入力された画像に対してガンマ補正及び色空間補正を行った後バッファ回路３に出力する。バッファ回路３は、入力された画像を一時保持した後、バス２３を介してＤＲＡＭ２４に出力する。こうして、ＤＲＡＭ２４には、歪補正された画像が記憶される。
【００１４】
ところで、上述したように、関連技術の歪補正では、ラスタスキャン順に入力された撮像出力をラインバッファに一旦蓄積し、ラスタスキャン出力順に順次ＤＲＡＭへの書き込みを行う。関連技術における歪補正回路は、ラスタ順の出力（ラスタスキャン出力）に際して、当該出力画素が歪を受けなければあるべき本来の画素位置を求め、求めた画素位置の画素をラインバッファから読み出してＤＲＡＭに転送する。関連技術のラスタスキャン入力・ラスタスキャン出力では、画素出力に際して求めた画素位置の画素をラインバッファに格納しておく必要があり、ラインバッファとして歪の大きさに対応した十分な容量を確保しておく必要がある。
【００１５】
そこで、本実施の形態においては、ラスタスキャン入力・ランダム出力を採用することでラインバッファを削減する歪補正処理を採用する。本実施の形態において採用するラスタスキャン入力・ランダム出力では、入力された画素を、当該画素が歪を受けなければあるべき本来の画素位置（以下、補正画素位置という）に対応するＤＲＡＭのアドレスに格納するように制御を行う。従って、ラインバッファとして比較的少ない容量のものを採用することができる。
【００１６】
まず、図２及び図３を参照して、本実施の形態において採用するラスタスキャン入力・ランダム出力の歪補正処理を具体的に説明する。
【００１７】
図２は図１中の歪補正回路１の具体的な構成の一例を示すブロック図である。
【００１８】
図２において、歪補正回路１は、ラインバッファ１１と、書き込み画素位置計算部１２と、読み出し画素位置計算部１３と、書き込み画素位置判定部１４と、パラメータ格納部１５と、画素補間部１６とから主に構成されている。
【００１９】
ラインバッファ１１は、撮像部２２からラスタスキャン順に読み込まれる入力画像の画素（入力画素）を、補正処理に必要なライン数だけ保持する。例えば、バイリニア補間を用いて歪曲収差の補正を行う場合、１〜２ライン分の画素を保持する。
【００２０】
書き込み画素位置計算部１２は、補正対象である読み出し画素Piを用いて補間した画素が含まれると推定される、書き込み画素領域を算出する。具体的には、読み出し画素Piの位置（vo, ho）（以下、画素Pi（vo, ho）と示す）を含む、周辺４点の画素｛Pi0（vo, ho）、Pi1（vo, ho-1）、Pi2（vo-1, ho-1）、Pi3（vo-1, ho）｝からなる読み出し画素位置集合を定義する。なお、本説明において、画素位置座標（v, h）は、画像左上を原点(0, 0)として、vを垂直画素位置、hを水平画素位置としている。
【００２１】
読み出し画素Pi0、Pi1、Pi2、Pi3のそれぞれについて、画素位置計算の関数を用い、対応する書き込み画素Po0、Po1、Po2、Po3の位置（vo’, ho’）、（vo’, ho-1’）、（vo-1’, ho-1’）、（vo-1’, ho’）を算出する。４点の画素Po0（vo’, ho’）、Po1（vo’, ho-1’）、Po2（vo-1’, ho-1’）、Po3（vo-1’, ho’）を頂点とする矩形領域が、書き込み画素領域となる。
【００２２】
画素位置計算には、例えば、多項式で表現される関数や、グリッドテーブル変換など、一般的な画素位置計算用の関数を用いることができる。ただし、画素位置計算関数は、逆関数が存在するものを用いる。
【００２３】
読み出し画素位置計算部１３は、書き込み画素領域内において、垂直位置、水平位置ともに整数となる画素の位置（書き込み画素候補Poc（v’, h’））を抽出する。そして、書き込み画素候補Poc（v’, h’）に対応する読み出し画素Pi（v”, h”）を、画素位置計算を行って算出する。なお、画素位置計算は、書き込み画素位置計算部１２で行った画素位置計算の逆関数を用いて行う。候補が複数ある場合は、全ての候補Poc（v’, h’）に対して読み出し画素Pi（v”, h”）を算出する。
【００２４】
書き込み画素位置判定部１４は、読み出し画素Pi（v”, h”）が集合に含まれている場合、当該画素Pi（v”, h”）に対する書き込み画素候補Poc（v’, h’）を、補正画素位置の書き込み画素Po（v’, h’）として確定する。
【００２５】
パラメータ格納部１５は、書き込み画素位置計算部１２および読み出し画素位置計算部１３における画素位置計算関数に用いるパラメータが格納されている。
【００２６】
画素補間部１６は、確定した書き込み画素Po（v’, h’）に対応する読み出し画素Pi（v”, h”）の画素値を算出する。通常、読み出し画素Pi（v”, h”）の座標は非整数であるので、例えば周辺の４画素を用いたバイリニア補間など、既存の補間手法を用いて画素値を算出する。書き込み画素Po（v’, h’）の画素値として、算出した画素値を出力する。出力された画素値は、DRAMなどのメモリ（図示せず）に格納される。なお、出力画素は補正を行った順に出力するため、出力画素の位置（補正画素位置）はランダムとなる。
【００２７】
次に、歪補正回路１における画像補正処理の手順を説明する。図３は画像補正処理を説明するためのフローチャートである。
【００２８】
まず、ラスタスキャン順に歪補正回路１に入力された画素を、ラインバッファ１１に拡充する（Ｓ１）。ラインバッファ１１には、画素補間部１６での処理に必要なライン数分、入力画素を格納する。例えば、バイリニア補間を用いる場合、補間対象画素の周辺２×２画素（４画素）の画素値が必要となるため、少なくとも１ライン＋１画素分の画素値を格納する。
【００２９】
次に、補正対象画素である読み出し画素Pi（vo, ho）を特定し、読み出し画素Piを用いて補間した画素が含まれると推定される、書き込み画素領域を算出する（Ｓ２）。具体的には、まず、読み出し画素Pi（vo, ho）を含む周囲４点の画素｛Pi0（vo, ho）、Pi1（vo, ho-1）、Pi2（vo-1, ho-1）、Pi3（vo-1, ho）｝からなる集合を定義する。すなわち、Pi1（vo, ho-1）は、Pi（vo, ho）の左隣の画素、Pi2（vo-1, ho-1）はPi（vo, ho）の左上の画素、Pi3（vo-1, ho）はPi（vo, ho）の上の画素である。次に、画素Pi0、Pi1、Pi2、Pi3のそれぞれについて、画素位置計算を行い、対応する書き込み画素Po0（vo’, ho’）、Po1（vo’, ho-1’）、Po2（vo-1’, ho-1’）、Po3（vo-1’, ho’）を算出する。
【００３０】
画素位置計算は、例えば、多項式で表現される関数を用いる場合、次の手順で行う。
（ａ）像高の算出：入力画素の位置を、左上を原点とする（v, h）の座標系から、光学中心を原点とする(x, y)の座標系に変換する。なお、両座標系とも、水平方向は右側を正とし、垂直方向は下側を正とする。また、光学中心から入力画素までの距離（像高）rを算出する。以下に示す（１）〜（３）式を用いて行う。
2019160063.tif 000003
【００３１】
（１）式において、vin は、垂直方向の入力画素位置（非負数）、[SENSOR_CROP_OFS_V]は、光学中心からの垂直画素位置オフセット（光学中心と、（v, h）座標系の原点との間の、垂直方向のオフセット）とする。また、（２）式において、hinは、水平方向の入力画素位置（非負数）、[SENSOR_CROP_OFS_H]は、光学中心からの水平画素位置オフセット（光学中心と、（v, h）座標系の原点との間の、水平方向のオフセット）とする。また、（３）式において、[NORM_SCALE]は正規化係数（非負数）とする。
【００３２】
なお、画像中心と光学中心とが一致する場合、[SENSOR_CROP_OFS_V]、[SENSOR_CROP_OFS_H]は、以下の（４）（５）式となる。
[SENSOR_CROP_OFS_V] = −(入力画像垂直サイズ/2 − 0.5)          …（４）式
[SENSOR_CROP_OFS_ H] = −(入力画像水平サイズ/2 − 0.5)          …（５）式
（ｂ）画素位置計算の像高スケールの算出：光学中心から距離rにある点が、画素位置変換によって光学中心方向に移動する距離r_scaleを算出する。以下に示す（６）式を用いて行う。
r_scale = P0 + P1*r + P2 * r2 + P3*r3 + P4*r4 + P5*r5 + P6*r6 + P7*r7 + P8*r8 + P9*r9 + P10*r10          …（６）式
（６）式において、Px（x = 0〜10 ）は、それぞれの次数に応じた多項式係数とする。
（ｃ）出力画素位置の算出：像高スケールを用いて入力画素位置を出力画素位置に変換し、（v, h）の座標系に戻す。以下に示す（７）（８）式を用いて行う。
vout = r_scale * y − [SENSOR_CROP_OFS_V]                        …（７）式
hout = r_scale*x − [SENSOR_CROP_OFS_ H]                         …（８）式
（７）式において、voutは垂直方向の出力画素位置（非負数）、（８）式において、houtは水平方向の出力画素位置（非負数）とする。
【００３３】
すなわち、（ａ）から（ｃ）の一連の手順により、読み出し画素Pi（vo, ho）、Pi1（vo, ho-1）、Pi2（vo-1, ho-1）、Pi3（vo-1, ho）が、それぞれ、書き込み画素Po0（vo’, ho’） 、Po1（vo’, ho-1’）、Po2（vo-1’, ho-1’）、Po3（vo-1’, ho’）に変換される。
【００３４】
なお、画素位置計算として、上述のような多項式で表現される関数を用いる場合、[SENSOR_CROP_OFS_V]、[SENSOR_CROP_OFS_H]、[NORM_SCALE]、Px（x = 0〜10 ）の各パラメータは予め設定されており、パラメータ格納部１５に格納されているものとする。
【００３５】
画素位置計算は、グリッドテーブル変換を用いて行うこともできる。グリッドテーブルとは、画素位置（v, h）をグリッドノードとした２次元のアドレステーブルである。各グリッドノードには、変換先の画素位置が格納されている。グリッドノードの間に位置する任意の画素位置に対応するアドレスは、近傍グリッドノードから補間することで算出する。画素位置計算としてグリッドテーブル変換を用いる場合、次の手順で行う。
（ｄ）参照グリッドノードの算出：参照グリッドノードとして、入力画素の左上に位置するグリッドノードを決定する。以下に示す（９）（１０）式を用いて行う。
ref_v = vin * GRID_PATCH_VSIZE_INV                    …（９）式
ref_h = hin * GRID_PATCH_HSIZE_INV                    …（１０）式
（９）式において、vin は、垂直方向の入力画素位置（非負数）、GRID_PATCH_VSIZE_INVは、垂直グリッドノード間距離の逆数とする。GRID_PATCH_VSIZE_INVは、以下の（１１）式を用いて算出する。
2019160063.tif 000004
【００３６】
（１１）式において、[SENSOR_CROP_VSIZE]は、入力画像垂直サイズ、[GRID_NODE_NUM_V]は、垂直グリッドノード数とする。
【００３７】
また、（１０）式において、hinは、水平方向の入力画素位置（非負数）、GRID_PATCH_HSIZE_INVは、水平グリッドノード間距離の逆数とする。GRID_PATCH_HSIZE_INVは、以下の（１２）式を用いて算出する。
2019160063.tif 000005
【００３８】
（１２）式において、[SENSOR_CROP_HSIZE]は、入力画像水平サイズ、[GRID_NODE_NUM_H]は、水平グリッドノード数とする。
（ｅ）重みの算出：入力画素位置から参照グリッドノードを含む周囲４点のグリッドノードに対する、垂直方向及び水平方向の距離の比に基づく重みを算出する。以下に示す（１３）（１４）式を用いて算出する。
weight_v = ref_v − [ref_v]                               …（１３）式
weight_h = ref_h − [ref_h]                               …（１４）式
（１３）（１４）式において、[]はガウス記号を表す。参照グリッドノードに関する垂直方向の重みは1−weight_vとなる。また、参照グリッドノードに関する水平方向の重みは、1−weight_hとなる。
（ｆ）出力画素位置の算出：参照グリッドノードを含む周囲４点のグリッドノードのテーブルと、入力画素位置に対する各グリッドノードの重みを用い、バイリニア補間によって、出力画素位置を算出する。
（ｆ−１）垂直方向の出力画素位置の算出
以下に示す（１５）〜（１７）式を用いて算出する。
v0out = table_v(ref_v, ref_h) * (1−weight_h) + table_v(ref_v, ref_h+1) * weight_h      …（１５）式
v1out = table_v(ref_v+1, ref_h) * (1−weight_h) + table_v(ref_v+1, ref_h+1) * weight_h      …（１６）式
vout = v0out * (1−weight_v) + v1out * weight_v          …（１７）式
（１５）（１６）式において、table_v(v, h)は、垂直画素位置グリッドテーブルとする。また、（１７）式において、voutは、は垂直方向の出力画素位置（非負数）である。
（ｆ−２）水平方向の出力画素位置の算出
以下に示す（１８）〜（２０）式を用いて算出する。
h0out = table_ h (ref_v, ref_h) * (1−weight_h) + table_ h (ref_v, ref_h+1) * weight_h      …（１８）式
h1out = table_h(ref_v+1, ref_h) * (1−weight_h) + table_h(ref_v+1, ref_h+1) * weight_h     …（１９）式
hout = h0out * (1−weight_h) + h1out * weight_v                 …（２０）式
（１８）（１９）式において、table_h(v, h)は、水平画素位置グリッドテーブルとする。また、（２０）式において、houtは、は水平方向の出力画素位置（非負数）である。
【００３９】
すなわち、（ｄ）から（ｆ）の一連の手順により、読み出し画素Pi（vo, ho）、Pi1（vo, ho-1）、Pi2（vo-1, ho-1）、Pi3（vo-1, ho）が、それぞれ、書き込み画素Po0（vo’, ho’） 、Po1（vo’, ho-1’）、Po2（vo-1’, ho-1’）、Po3（vo-1’, ho’）に変換される。
【００４０】
なお、画素位置計算として、上述のようなグリッドテーブル変換を用いる場合、[SENSOR_CROP_VSIZE]、[GRID_NODE_NUM_V]、[SENSOR_CROP_HSIZE]、[GRID_NODE_NUM_H]、table_v(v, h)、table_h(v, h)の各パラメータは予め設定されており、パラメータ格納部１５に格納されているものとする。
【００４１】
画素位置計算により算出された、４点の画素Po0（vo’, ho’） 、Po1（vo’, ho-1’）、Po2（vo-1’, ho-1’）、Po3（vo-1’, ho’）を頂点とする矩形領域が、書き込み画素領域として特定される。
【００４２】
次に、上記特定された矩形領域内において、垂直座標、及び、水平座標が共に整数となる画素位置（書き込み画素候補Poc（v’, h’））を抽出する。例えば、画素Po0（vo’, ho’） 、Po1（vo’, ho-1’）、Po2（vo-1’, ho-1’）、Po3（vo-1’, ho’）の各座標を、繰り上げ・繰り下げにより調整・整数化し、得られた画素位置に外接する矩形領域内のすべての画素位置を、書き込み画素候補Poc（v’, h’）とする（Ｓ３）。繰り上げ・繰り下げによる調整・整数化は、以下に示す（２１）（２２）式を用いて行う。なお、４点のうち、左側または上側に位置する画素については、（２１）式を用い、右側または下側に位置する画素については、（２２）式を用いる。
調整後画素位置 = [書き込み画素位置 − WRITE_AREA_DELTA]      …（２１）式
調整後画素位置 = [書き込み画素位置 + WRITE_AREA_DELTA]      …（２２）式
（２１）（２２）式において、WRITE_AREA_DELTAは整数化調整値であり、予め設定された値である。また、[]はガウス記号を表す。
【００４３】
続いて、Ｓ３で求めたすべての書き込み画素候補Poc（v’, h’）に対し、書き込み画素Po（v’, h’）であるか否かの判定を行う。判定をまだ行っていない書き込み画素候補Poc（v’, h’）がある場合（Ｓ４、Ｎｏ）、画素位置計算により、対応する読み出し画素Pi（v”, h”）を算出する（Ｓ５）。画素位置計算は、Ｓ２で用いた画素位置計算の逆関数を用いて行う。このとき、Pi（v”, h”）の垂直座標、水平座標は、非整数となる。
【００４４】
次に、Pi（v”, h”）の画素値を補間によって算出するために必要な画素を特定する。例えば、バイリニア補間によって画素値を算出する場合、Pi（v”, h”）の周囲４点の画素が補間に必要な画素となる。補間に必要なすべての画素が、集合に含まれている場合、当該読み出し画素Pi（v”, h”）に対応する書き込み画素候補Poc（v’, h’）を、書き込み画素Po（v’, h’）と確定する（Ｓ５、Ｙｅｓ）。
【００４５】
この場合、確定した書き込み画素Po（v’, h’）の画素値を、対応する読み出し画素Pi（v”, h”）の画素値を画素補間によって算出して出力する（Ｓ６）。なお、出力画素Po（v’, h’）は、ラスタスキャン順でなくランダムとなる。続いてＳ４に戻り、未判定の書き込み画素候補Poc（v’, h’）の有無を調べる。
【００４６】
一方、補間に必要な画素のうち、集合に含まれていない画素が存在する場合、当該読み出し画素Pi（v”, h”）に対応する書き込み画素候補Poc（v’, h’）は、書き込み画素Po（v’, h’）でないと確定する（Ｓ５、Ｎｏ）。この場合、画素補間は行わずに、Ｓ４に戻って、未判定の書き込み画素候補Poc（v’, h’）の有無を調べる。
【００４７】
Ｓ４において、Ｓ３で求めたすべての書き込み画素候補Poc（v’, h’）について、判定が行われている場合、画像補正処理の一連の手順を終了する。
【００４８】
このように、本実施の形態の歪補正回路１による歪補正処理では、撮像部２２からラスタスキャン順に読み込まれる入力画素を、この順に補正処理を行う。従って、補正に必要な入力画素の範囲を１乃至数ライン程度で抑えることができるため、入力画素を格納するラインバッファ１１の搭載量を低減することができ、製造コストを抑制することができる。
【００４９】
なお、ラインバッファ１１の搭載量は、画素補間の手法に応じて設定される。例えば、バイリニア法を用いる場合、２ライン程度搭載すればよいが、バイキュービック法を用いる場合、４ライン程度搭載する必要がある。
【００５０】
また、読み出し画素から書き込み画素を算出する画素位置計算の方法は、上述の方法に限定されない。すなわち、逆関数が存在する方法であれば、任意の方法を用いることができる。また、複数の画素位置計算方法を組み合わせて用いてもよい。
（出力バッファの多層化）
歪補正回路１から出力される各画素の画素値はポスト処理回路２に供給され、ポスト処理回路２は、入力画素毎にガンマ補正及び色空間補正を行った後バッファ回路３に出力する。バッファ回路３は、入力された画像を一時保持した後、バス２３を介してＤＲＡＭ２４に出力する。こうして、ＤＲＡＭ２４には、歪補正された画像が記憶される。
【００５１】
ところで、一般的には、ＤＲＡＭへの転送は、伝送効率を考慮して、所定の伝送単位で行われる。関連技術におけるラスタスキャン入力・ラスタスキャン出力の歪補正処理では、出力がラスタスキャン順に行われるので、出力バッファにラスタスキャン順の画素を順次蓄積し、例えば１ライン分の画素が蓄積される毎に、ＤＲＡＭへの転送を行えばよい。
【００５２】
しかしながら、ラスタスキャン入力・ランダム出力の歪補正処理の場合には、出力はラスタスキャン順ではなくランダムとなることから、例えば、伝送単位の複数の出力バッファを用意し、各バッファにラスタスキャン順の画素が蓄積される毎に、ＤＲＡＭへの転送が行われる。
【００５３】
本実施の形態においては、バッファ回路３は、伝送効率とバッファ容量とを考慮して、多層化した出力バッファによって構成される。先ず、多層化していない出力バッファの基本的な動作について、図４の説明図を参照して説明する。
【００５４】
図４のラインバッファは図２のラインバッファ１１に相当する。ラインバッファ１１には、ラスタスキャン順で画素Ａ０，Ａ１，Ａ２…が順次書き込まれる。ラインバッファ１１に書き込まれた画素は歪補正回路１によって補正画素位置が決定される。図４の出力バッファは所定の伝送単位（例えば６４バイト）毎の複数の領域Ｄ１，Ｄ２，…（以下、これらを区別する必要がない場合には領域Ｄという）を有する。ＤＲＡＭ２４への転送は各伝送単位毎に行われる。従って、出力バッファの各領域Ｄ内の全アドレスに、ラスタスキャン順の画素値が格納される毎に各領域Ｄから画素値が出力されてＤＲＡＭ２４に転送されることになる。なお、出力バッファの各領域Ｄは、最初に書き込まれる画素の補正画素位置に応じたアドレスが付与され、各領域Ｄに格納された画素は、ＤＲＡＭ２４の対応するアドレスに書き込まれる。
【００５５】
例えば画素Ａ０，Ａ１の補正画素位置が連続している場合において、画素Ａ０が出力バッファの領域Ｄ１の先頭位置に画素Ｂ０として書き込まれた場合には、次の画素Ａ１に対応する画素Ｂ１は画素Ｂ０が格納された次のアドレスの位置に書き込まれる。しかし、画素Ａ２の補正画素位置が画素Ａ１の補正画素位置に対して領域Ｄ１に格納できる画素数分の画素位置よりも離間している場合には、画素Ａ２に対応する画素Ｂ２は領域Ｄ１以外の他の領域に書き込まれる。図４の例では画素Ａ２に対応した画素Ｂ２は、出力バッファの領域Ｄ２に格納されている。なお、領域Ｄ３には画素Ａｎに対応した画素Ｂｎが格納されていることを示している。
【００５６】
このように、ラスタスキャン入力・ランダム出力の歪補正処理を行った場合には、出力バッファの連続したアドレスに順次画素が書き込まれるとは限らないので、出力バッファの利用効率が低下する。出力バッファの利用効率を向上させるために伝送単位の出力バッファサイズを小さくすると、ＤＲＡＭ転送の占有率が大きくなって伝送効率が低下する。例えば、６４バイトサイズの出力バッファを採用した場合には、伝送効率は、ラスタスキャン入力・ラスタスキャン出力時の３０％程度に低下する。このため、画像処理回路２１によるＤＲＡＭ転送の占有率が大きくなり、画像解析等の他の処理に長時間を要してしまう。逆に、伝送効率を向上させようとすると、結果的にトータルの出力バッファサイズが増大してしまう。
【００５７】
そこで、本実施の形態においては、レンズ歪みの特性に応じて、出力バッファを多層化することで、出力バッファ全体の利用効率を向上させる。これにより、出力バッファサイズの低減及びＤＲＡＭ転送の伝送効率の向上を図る。
【００５８】
図５は図１中のバッファ回路３の具体的な構成の一例を示すブロック図である。図５の例は出力バッファを２段に多層化した例を示しているが、３段以上に多層化してもよい。
【００５９】
図５においてバッファ回路３はコントローラ３１と、出力バッファ３２，３３を備えている。出力バッファ３２は１段目の出力バッファであり、出力バッファ３３は２段目の出力バッファである。コントローラ３１は出力バッファ３２，３３の書き込み及び読み出しを制御する。
【００６０】
出力バッファ３２は、所定の容量の複数の領域Ｅ１を有しており、出力バッファ３３は、所定の容量の複数の領域Ｅ２を有している。領域Ｅ１，Ｅ２の容量は独立して設定可能である。例えば、領域Ｅ１の容量と領域Ｅ２の容量との和の容量を伝送単位の容量に設定する。
【００６１】
例えば、領域Ｅ１，Ｅ２の容量がいずれも６４バイトであるものとすると、１画素が１６ビットデータの場合には各領域Ｅ１，Ｅ２にそれぞれ３２画素が格納可能であり、１画素が８ビットデータの場合には各領域Ｅ１，Ｅ２にそれぞれ６４画素が格納可能である。以下、領域Ｅ１又はＥ２にそれぞれ格納される補正画素位置が連続する一連の画素の集合をそれぞれサブブロックというものとし、２つの領域Ｅ１及びＥ２に格納された補正画素位置が連続した伝送単位の一連の画素の集合を伝送ブロックというものとする。なお、出力バッファが３段以上で構成される場合には、これらの３段以上の出力バッファに格納されている補正画素位置が連続した伝送単位の一連の画素の集合を伝送ブロックという。
【００６２】
コントローラ３１は、ポスト処理回路２からランダムな順に出力される各画素を先ず出力バッファ３２の複数の領域Ｅ１のうちのいずれかの領域Ｅ１に与える。出力バッファ３２の各領域Ｅ１には、最初に書き込まれる画素の補正画素位置に応じたタグ情報が付与される。コントローラ３１は、補正画素位置が連続する画素は各領域Ｅ１の連続したアドレスに書き込む。つまり、領域Ｅ１の容量が６４バイトで、１画素が１６ビットデータの場合には、各領域Ｅ１に補正画素位置が連続する３２画素分の画素が格納される。例えば、伝送単位である伝送ブロックが６４画素で構成される場合には、領域Ｅ１には伝送ブロックの半分の画素のサブブロックが格納可能である。コントローラ３１は、出力バッファ３２の各領域Ｅ１毎に領域内の全アドレスに画素が格納された状態になったか否かを判定する。以下、各領域Ｅ１毎にサブブロックの全データが格納されたことを充填完了とも言い、コントローラ３１は、充填完了となった領域Ｅ１毎に格納されているサブブロックの画素を後段の出力バッファ３３に転送する。
【００６３】
出力バッファ３３の各領域Ｅ２にも、最初に書き込まれる画素の補正画素位置に応じたタグ情報が付与される。コントローラ３１は、補正画素位置が連続する画素は各領域Ｅ２の連続したアドレスに書き込む。つまり、例えば、領域Ｅ２の容量が６４バイトで、１画素が１６ビットデータの場合には、各領域Ｅ２に補正画素位置が連続する３２画素分の画素が格納される。１伝送ブロックが６４画素で構成される場合には、領域Ｅ１，Ｅ２に格納されたサブブロックを連結することで、伝送ブロックの画素が得られる。コントローラ３１は、出力バッファ３３の各領域Ｅ２毎に充填完了になったか否かを判定する。コントローラ３１は、領域Ｅ２が充填完了となった場合において、当該領域Ｅ２に格納された画素と、この画素に補正画素位置が連続する画素を格納する領域Ｅ１に格納された画素とで、伝送ブロックの全データが格納される（以下、この場合も充填完了という）状態になると、これらの領域Ｅ１，Ｅ２に格納されている全画素、即ち、補正画素位置が連続する伝送単位の複数の画素（伝送ブロックの全画素）をバス２３を介してＤＲＡＭ２４に転送して記憶させるようになっている。
【００６４】
次に、図６及び図７を参照して本実施の形態における多層化された出力バッファ３２，３３によって出力バッファの利用効率を向上させることができる理由について説明する。図６は多層化されていない場合の出力バッファの書き込み及び読み出しを示し、図７は多層化されている場合の出力バッファの書き込み及び読み出しを示している。
【００６５】
図６及び図７は説明を簡略化するために、撮像部２２からの撮像画像が水平方向に１６画素であるものとし、ＤＲＡＭ２４への伝送単位が４画素であるものとして説明する。図６及び図７の例は撮像部２２の光学系の収差等の影響により破線にて示すたる型歪が生じた結果、本来画像の第１ラインの各画素が図６及び図７の画素ａ１〜ａ４，ｂ１〜ｂ４，ｃ１〜ｃ４，ｄ１〜ｄ４の位置に移動した画像として歪補正回路１に入力されたことを示している。撮像部２２からの各画素はラスタスキャン順で歪補正回路１に入力され、入力された画素順で画像処理が行われて出力バッファに与えられる。
【００６６】
図６の例は出力バッファが階層化されておらず伝送単位である４画素分の３つの領域Ｄ１〜Ｄ３を有している例を示している。図６の例では、画素ａ１〜ａ４，ｂ１〜ｂ４，ｃ１〜ｃ４，ｄ１〜ｄ４のうち歪補正回路１に最初に入力される画素は画素ｄ１である。この画素ｄ１は出力バッファの例えば領域Ｄ３に格納される。第２ラインの左から３番目の画素ａ３及び画素ａ４が順次歪補正回路１に入力されて処理されると、処理後の画素ａ３，ａ４は領域Ｄ１の連続する位置に書き込まれる。次に、補正画素位置が連続する画素ｂ１〜ｂ４が順次入力され、これらの補正画素位置が連続する画素ｂ１〜ｂ４は、領域Ｄ２に順次格納される。領域Ｄ２が充填完了すると、領域Ｄ２に格納されている全ての画素が読み出されてＤＲＡＭに転送される。
【００６７】
図６の太枠の画素まで処理が進んだ状態では、領域Ｄ２は充填完了後に転送されて空き状態となる一方、領域Ｄ１は第３ラインの左から１番目及び２番目の画素ａ１，ａ２の処理が行われるまで充填状態とはならず、また、領域Ｄ３は第３ラインの右から２番目の画素ｄ４の処理が行われるまで充填状態とはならない。即ち、出力バッファに空きがあるにも拘わらず、これらの空き領域は利用されず、利用効率が低い状態である。
【００６８】
図７の例は出力バッファを２段に多層化した例を示しており、出力バッファ３２に相当する領域Ｅ１ａ，Ｅ１ｂにより１段目出力バッファを構成し、出力バッファ３３に相当する領域Ｅ２ａ，Ｅ２ｂにより２段目出力バッファを構成した例を示している。領域Ｅ１ａ，Ｅ１ｂ，Ｅ２ａ，Ｅ２ｂはいずれも２画素分の容量を有している。
【００６９】
画素ａ１〜ａ４，ｂ１〜ｂ４，ｃ１〜ｃ４，ｄ１〜ｄ４のうち歪補正回路１に最初に入力される画素ｄ１は、１段目出力バッファの例えば領域Ｅ１ｂに格納される。第２ラインの左から３番目の画素ａ３及び画素ａ４が順次歪補正回路１に入力されて処理されると、処理後の画素ａ３，ａ４は領域Ｅ１ａの位置に書き込まれる。コントローラ３１は領域Ｅ１ａが充填完了すると、領域Ｅ１ａに格納されているサブブロックの画素ａ３，ａ４を２段目出力バッファの例えば領域Ｅ２ａに転送して記憶させ、領域Ｅ１ａを空き状態とする。
【００７０】
次に、補正画素位置が連続する画素ｂ１〜ｂ４が順次入力される。先ず、画素ｂ１，ｂ２は、領域Ｅ１ａに書き込まれ、更にコントローラ３１によって領域Ｅ２ｂに転送される。更に、コントローラ３１は、空き領域Ｅ１ａに画素ｂ３，ｂ４を書き込む。コントローラ３１は、２段目出力バッファを構成する領域Ｅ２ｂが充填完了すると共に、この領域Ｅ２ｂに格納されている画素に補正画素位置が連続する画素によって、１段目出力バッファの領域が充填完了すると、これらの２つの領域の画素、即ち、領域Ｅ２ｂ，Ｅ１ａに格納されている伝送ブロックの全ての画素をバス２３を介してＤＲＡＭ２４に転送する。これにより、これらの領域Ｅ１ａ，Ｅ２ｂは空き領域となる。
【００７１】
即ち、図７の太枠に示す画素まで処理が進んでいる状態では、１段目出力バッファＥ１ａは空き領域となっており、次に歪補正処理が終了した画素の書き込みが可能となる。即ち、図７の例は図６の例に比べて出力バッファの利用効率が向上している。この結果、図７の例では、図６の合計出力バッファサイズ（４×３＝１２画素分）よりも少ない合計出力バッファサイズ（２×４＝８画素分）でバッファ回路を構成可能である。
【００７２】
図６及び図７に示すたる型歪では、画像中央ほど歪が小さく、画像の四隅程歪が大きい。このため、画像中央近傍では、各画素は歪補正回路１への入力順と略同じ順で出力され、１段目バッファの各領域Ｅ１は充填速度が比較的高く、比較的短時間で充填完了する。逆に、画像四隅近傍では、各画素の歪補正回路１への入力順と出力順とは比較的大きく異なり、１段目バッファの各領域Ｅ１は充填速度が比較的遅く、充填完了するまでに比較的長時間を要する。
【００７３】
仮に、歪がない場合又は画像全体で一様な歪の場合には、出力バッファを多層化しても効果はない。しかし、たる型歪等のように画像の位置に応じて不均一な歪が生じている場合には、画素位置によってバッファ充填速度が不均一となる。このため、１段目バッファのバッファサイズを比較的小さくすることで、充填速度の速い画素位置の画素によるバッファ利用効率を高めると共に、充填速度の遅い画素位置の画素によるバッファ利用効率の低下を抑制することができる。これにより、合計バッファサイズを低減化し伝送効率を向上させることが可能である。なお、経験則によれば、１段目の出力バッファ３２の領域Ｅ１の数≧２段目の出力バッファ３３の領域Ｅ２の数として構成した方がよい。３段以上で出力バッファを階層化する場合には、１段目の出力バッファ数≧２段目の出力バッファ数≧３段目の出力バッファ数≧・・・とする。
【００７４】
図８Ａ及び図８Ｂはバッファ回路３の動作を更に詳細に説明するための説明図である。図８Ａは出力バッファ３２の動作を示すためのものであり、図８Ｂは出力バッファ３３の動作を示すためのものである。
【００７５】
図８Ａは出力バッファ３２を示しており、サブブロックの画素を記憶する［０］，［１］，…［ｉ］にて示す複数の領域Ｅ１（以下、これらの領域を区別する必要がある場合には領域Ｅ１［０］，Ｅ１［１］，…Ｅ１［ｉ］という）がそれぞれＮバイトの容量を有すると共に、各領域Ｅ１毎にタグ情報が付加されることを示している。即ち、図８Ａの例では出力バッファ３２は（ｉ＋１）個の領域Ｅ１を有している。なお、各領域Ｅ１には、画素が記憶されることによって、当該画素の画像位置に対応したタグ情報が付加されて記憶されるようになっている。
【００７６】
領域Ｅ１，Ｅ２には補正画素位置が連続した一連の画素（サブブロックの画素）が記憶されることから、１つの領域Ｅ１，Ｅ２に１つのタグ情報を付加することで、各領域Ｅ１，Ｅ２に記憶されたサブブロックの画素位置を特定することが可能であり、領域Ｅ１，Ｅ２の各画素の記憶領域毎にアドレスを付加する必要はない。
【００７７】
図８Ｂは出力バッファ３３を示しており、サブブロックの画素を記憶する［０］，［１］，…［ｊ］にて示す複数の領域Ｅ２（以下、これらの領域を区別する必要がある場合には領域Ｅ２［０］，Ｅ２［１］，…Ｅ２［ｊ］という）がそれぞれＮバイトの容量を有することを示している。即ち、図８Ｂの例では出力バッファ３３は（ｊ＋１）個の領域Ｅ２を有している。出力バッファ３３においても、各領域Ｅ２毎にタグ情報が付加される。なお、各領域Ｅ２には、出力バッファ３２から画素が転送されることによって、転送されたサブブロックに対応して付加されたタグ情報が記憶されるようになっている。
【００７８】
コントローラ３１は、出力バッファ３２から出力バッファ３３への画素の転送をタグ情報により管理する。これにより、コントローラ３１は、２つのサブブロックである領域Ｅ１，Ｅ２に格納された補正画素位置が連続する伝送ブロックの一連の画素を、画像位置を示すタグ情報を付加して出力することができる。バッファ回路３の出力はバス２３を介してＤＲＡＭ２４に与えられて記憶される。
【００７９】
図８Ａ及び図８Ｂの例では、伝送ブロックを構成する補正画素位置が連続する一連の画素ａ１，ａ２，…，ａｎ，ａｎ＋１，…，ａｍのうち、先ず画素ａ１，ａ２，…，ａｎが出力バッファ３２の所定の領域Ｅ１に記憶されるものとする。この場合には、画素ａ１，ａ２，…，ａｎの画像位置に対応したタグ情報ｔａｇ０２が付加されて当該領域Ｅ１に記憶される。コントローラ３１は、領域Ｅ１が充填完了すると、これらのサブブロックの画素ａ１，ａ２，…，ａｎを出力バッファ３３の領域Ｅ２、例えば領域Ｅ２［１］に転送して記憶させる。
【００８０】
次に、画素ａ１，ａ２，…，ａｎに補正画素位置が連続する画素ａｎ＋１，…，ａｍが出力バッファ３２の領域Ｅ１、例えば、領域Ｅ１［０］に書き込まれるものとする。この場合には、領域Ｅ１［０］には、領域Ｅ２［１］のタグ情報ｔａｇ０２に画像位置が連続することを示すタグ情報ｔａｇ０１が付加されて記憶される。画素ａｎ＋１，…，ａｍにより領域Ｅ１［０］が充填完了すると、コントローラ３１は、タグ情報を利用して、出力バッファ３３の領域Ｅ２［１］と出力バッファ３２の領域Ｅ１［０］とに格納されている伝送ブロックの画素、即ち、補正画素位置が連続する一連の画素ａ１，ａ２，…，ａｎ，ａｎ＋１，…，ａｍを読み出し、バス２３を介してＤＲＡＭ２４に転送する。この場合には、コントローラ３１は、画素ａ１，ａ２，…，ａｎ，ａｎ＋１，…，ａｍの画像位置に対応するタグ情報ｔａｇ０を付加する。
【００８１】
なお、図８Ａ及び図８Ｂは、領域Ｅ１，Ｅ２に格納するサブブロックのサイズ（容量）はいずれもＮバイト（ｎ個の画素）の例を示しており、伝送ブロックサイズＭ＝２Ｎであり、ｍ＝２ｎである。しかし、領域Ｅ２に格納したＮバイト（ｎ画素）のサブブロックと、領域Ｅ１に格納したＮバイトよりも小さいサブブロックによって構成される伝送ブロックの画素を伝送することも可能であり、この場合には、Ｍ≧Ｎとなる。
【００８２】
また、領域Ｅ１，Ｅ２の数に対応するｉ，ｊは、ｉ≧ｊとする。
【００８３】
なお、図８Ａ及び図８Ｂを用いた説明では、２段目の出力バッファ３３には転送されたサブブロックに対応して付加されたタグ情報が記憶されるものと説明したが、この出力バッファ３３に記憶されたサブブロックとこれに対応する１段目の出力バッファ３２に記憶されたサブブロックとの画像上の位置関係が明確である場合には、出力バッファ３３には伝送ブロックに対応した画像位置を示すタグ情報を記憶させるようになっていてもよい。
（評価）
撮像部２２の光学系として所定の魚眼レンズを採用した場合において、歪補正に必要な出力バッファの容量について評価を行った。
【００８４】
バス２３を介してＤＲＡＭ２４への伝送単位である伝送ブロックサイズを１２８バイトに設定した場合についてシミュレーションを行い、図６のように出力バッファを１段で構成した場合と図７のように出力バッファを２段で構成した場合とについて、歪補正に必要な出力バッファ容量を求めた。なお、１画素は１６ビットデータとし、１伝送ブロックは６４画素の集合であるものとする。
【００８５】
シミュレーションによると、出力バッファを１段で構成した場合には、歪補正のために、１伝送ブロック（１２８バイト）を記憶する領域（以下、エントリともいう）を１００１個有する出力バッファを用いる必要がある。即ち、この場合の出力バッファサイズは１００１×１２８バイト＝１２５Ｋバイトとなる。
【００８６】
これに対し、出力バッファを２段で構成した場合には、歪補正のために、１サブブロック（６４バイト）を記憶する領域（エントリ）Ｅ１を４４７個有する出力バッファ３２と、１サブブロック（６４バイト）を記憶する領域（エントリ）Ｅ２を２３２個有する出力バッファ３３とを用いればよい。この場合の出力バッファサイズは、４４７×６４バイト＋２３２×６４バイト＝４２Ｋバイトとなる。
【００８７】
即ち、この例では、出力バッファを多層化することにより、出力バッファの合計サイズを約１／３に低減可能である。なお、出力バッファの合計サイズを変更しないものとすると、出力バッファを多層化することにより伝送ブロックサイズを大きくすることができることになり、伝送効率を向上させることができる。
【００８８】
このように本実施の形態においては、歪の形状に基づいて、画像の位置によって、出力バッファの充填速度が異なることを利用して、出力バッファを複数段に多層化し、各段のバッファ数（エントリ数）及びバッファサイズを適正な値とすることで、バッファメモリ容量を低減し伝送効率を向上させることが可能である。
（実装例）
図９は上述した（評価）の欄に対応したバッファ回路３の実装例を示す説明図である。図９の例は伝送ブロックサイズが１２８バイトであり、出力バッファ３２の領域Ｅ１に相当する１段目バッファのエントリのサイズは６４バイト、出力バッファ３３の領域Ｅ２に相当する２段目バッファのエントリのサイズは６４バイトである。（評価）の欄の記載に対応させて、１段目バッファのバッファ数（エントリ数）は最大で４４８エントリとし、２段目バッファのバッファ数（エントリ数）は最大で２４０エントリとする。なお、図９では各段毎に枠で囲った１エントリのみを示している。図９に示す書き込み及び読み出し制御は、コントローラ３１によって実現される。
【００８９】
また、ＹＵＶ４２２プレーナーフォーマットを採用した場合には、ＵＶ画素（ｂｒ）の出力データ幅はＹ画素（ｇ）の半分の３２バイトになる。そこで、図９ではＵＶ画素用に２段目バッファ及び３段目バッファを用意し、２段目バッファによって３２バイトのサブブロックを２連続した６４バイトのサブブロックを作成し、３段目バッファによって、６４バイトのサブブロックを２連続した１２８バイトの伝送ブロックを生成するようになっている。なお、これらのＵＶ画素用の２段目及び３段目バッファのエントリ数はいずれも最大で２４０である。
【００９０】
また、図９では１画素は１６ビットデータの例を示しているが、１段目バッファについては、参考のために、１画素が８ビットデータの場合についても例示してある。なお、図９では、［ｙ：ｘ］の表記によって、下位側の第ｘビットから上位側の第ｙビットのビット範囲のデータであることを示す。
【００９１】
バッファ回路３への入力画素は、水平方向の補正画素位置を示す１３ビットの水平アドレスｉ＿ｈ［１２：０］及び垂直方向の１２ビットの垂直アドレスｉ＿ｖ［１１：０］を有する。なお、入力画素は、Ｇ，Ｂ，Ｒの成分ｉ＿ｇ＿ｐｉｘ［１５：０］，ｉ＿ｂ＿ｐｉｘ［１５：０］，ｉ＿ｒ＿ｐｉｘ［１５：０］の各１６ビットのデータである。１画素は１６ビットデータであるので、６４バイトの１段目バッファの各エントリには、補正画素位置が連続する３２画素分のサブブロックデータが格納される。
【００９２】
１段目バッファの１エントリに格納されたサブブロック毎に画像位置を特定するためのタグ情報を付加する。即ち、サブブロックを構成する入力画素３２個分で１つのタグ情報を設定すればよく、入力画素の３２個を表す水平アドレスの下位５ビットを除く上位８ビット、即ち、ｉ＿ｈ［１２：５］を水平方向のタグ情報とする。なお、各バッファにおいて、タグ情報の記憶に必要な容量を減少させるために、タグ情報として用いる垂直アドレスは、入力画素の下位６ビットのｉ＿ｖ［５：０］とする。なお、この場合には、連続する６４バイト内で、垂直アドレスが６４以上離れた歪みには対応することはできない。
【００９３】
また、１画素が８ビットデータの場合には、６４バイトの１段目バッファの各エントリには、補正画素位置が連続する６４画素分のサブブロックデータが格納される。この場合には、サブブロックを構成する入力画素６４個分で１つのタグ情報を設定すればよく、入力画素の６４個を表す水平アドレスの下位６ビットを除く上位７ビット、即ち、ｉ＿ｈ［１２：６］を水平方向のタグ情報とする。なお、垂直方向のタグ情報は入力画素の下位６ビットのｉ＿ｖ［５：０］とする。
【００９４】
１段目バッファの各エントリにサブブロックが充填完了すると、６４バイトのｇのサブブロックは２段目バッファに転送されて記憶される。更に、１段目バッファのいずれかのエントリに、２段目バッファに記憶されているサブブロックと共に伝送ブロックを構成するサブブロックが記憶されると、２段目バッファ及び１段目バッファに記憶されているサブブロックを連結した１２８バイトの伝送ブロックが出力される。この２段目バッファの出力には、画像位置に対応したタグ情報であるｉ＿ｈ［１２：６］，ｉ＿ｖ［５：０］が付加される。
【００９５】
なお、１段目バッファからは、サブブロックを構成する６４バイト分がまとめて読み出される。しかし、サブブロックの読み出しを行う１段目バッファのエントリに連続的に書き込みデータが与えられる場合があり、この場合には、書き込み後に読み出しを行う余裕がない場合がある。そこで、コントローラ３１は、サブブロックの最後のデータが１段目バッファの所定のエントリに入力されると、このデータの書き込み前にサブブロックのデータを読み出し、読み出したデータに入力された最後のデータを上書きして出力するようになっていてもよい。
【００９６】
図１０はこの動作を示す説明図である。図１０は１画素が１６ビットで、補正画素位置が連続した水平画素位置（０）〜（３１）の３２画素によってサブブロックが構成される例を示している。水平画素位置（１０），（９），（１１），…の順に１段目バッファの所定のエントリに画素が入力され、サブブロックを構成する最後の画素として水平画素位置（３０）の画素（斜線部）が入力される。この水平画素位置（３０）の画素が入力されると、当該画素の書き込み前に当該エントリからサブブロックのデータを読み出し、出力サブブロック中の斜線部に示すように、入力された水平画素位置（３０）の画素のデータを対応するデータ位置に上書きして出力する。
【００９７】
なお、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適当な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【符号の説明】
【００９８】
１…歪補正回路、２…ポスト処理回路、３…バッファ回路、１１…ラインバッファ、２１…画像処理回路、２２…撮像部、２３…バス、２４…ＤＲＡＭ、２５…ＣＰＵ、３１…コントローラ、３２…出力バッファ、３３…出力バッファ。
【図１】
2019160063.tif 000006
【図２】
2019160063.tif 000007
【図３】
2019160063.tif 000008
【図４】
2019160063.tif 000009
【図５】
2019160063.tif 000010
【図６】
2019160063.tif 000011
【図７】
2019160063.tif 000012
【図８Ａ】
2019160063.tif 000013
【図８Ｂ】
2019160063.tif 000014
【図９】
2019160063.tif 000015
【図１０】
2019160063.tif 000016