(57)【特許請求の範囲】
【請求項１】
変換対象画像を非線形変換画像に非線形変換し、前記非線形変換画像を行列変換によって変換した画像である行列変換画像を出力する画像処理装置であって、
加算または減算を行う演算手段と、
前記行列変換画像の１つの画素の座標値に対応する前記非線形変換画像の座標値を前記演算手段の演算結果に基づいて特定する特定手段と、
前記特定手段により特定された前記非線形変換画像の前記座標値に対応する前記変換対象画像の座標値を取得する取得手段と、
前記行列変換画像の前記１つの画素の座標値に対応する前記変換対象画像の前記座標値に基づいて、前記変換対象画像を前記行列変換画像に変換する変換手段と、
を有し、
前記演算手段は、前記行列変換における変換行列の要素と前記演算結果を加算または減算する演算を繰り返すことにより、前記行列変換における変換行列の要素と前記行列変換画像の隣接する複数の画素の座標値の乗算結果を順次出力し、
前記特定手段は、前記行列変換画像の前記隣接する複数の画素の座標値に対応する前記非線形変換画像の複数の座標値を、前記演算手段により順次出力される前記乗算結果に基づいて特定し、
前記取得手段は、前記特定手段により特定された前記非線形変換画像の前記複数の座標値に対応する前記変換対象画像の複数の座標値を取得し、
前記変換手段は、前記行列変換画像の前記隣接する複数の画素の座標値に対応する前記変換対象画像の前記複数の座標値に基づいて、前記変換対象画像を前記行列変換画像に変換する、
ことを特徴とする画像処理装置。
【請求項２】
前記演算手段は、前記行列変換画像の所定の画素の座標値を保持し、前記所定の画素の座標値から順に、前記変換行列の要素と前記隣接する複数の画素の座標値の乗算結果を出力する、
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記所定の画素の座標値は０である、
ことを特徴とする請求項２に記載の画像処理装置。
【請求項４】
前記行列変換画像の隣接する複数の画素についてラスタースキャン順に、前記変換行列の要素と前記隣接する複数の画素の座標値の乗算結果を順次出力する、
ことを特徴とする請求項１から請求項３のいずれか１項に記載の画像処理装置。
【請求項５】
前記取得手段は、前記非線形変換画像の前記座標値と、前記非線形変換画像の所定の位置との距離に基づいて、前記非線形変換画像の前記座標値に対応する前記変換対象画像の前記座標値を取得する、
ことを特徴とする請求項１に記載の画像処理装置。
【請求項６】
レンズ歪みの補正のために前記非線形変換が行われる、
ことを特徴とする請求項１に記載の画像処理装置。
【請求項７】
前記非線形変換画像内の４つの頂点を前記行列変換画像の４つの頂点に変換するための行列変換を行う、
ことを特徴とする請求項１に記載の画像処理装置。
【請求項８】
変換対象画像を非線形変換画像に非線形変換し、前記非線形変換画像を行列変換によって変換した画像である行列変換画像を出力する画像処理装置の画像処理方法であって、
演算手段が、加算または減算を行う演算工程と、
特定手段が、前記行列変換画像の１つの画素の座標値に対応する前記非線形変換画像の座標値を前記演算手段の演算結果に基づいて特定する特定工程と、
取得手段が、前記特定工程で特定された前記非線形変換画像の前記座標値に対応する前記変換対象画像の座標値を取得する取得工程と、
変換手段が、前記行列変換画像の前記１つの画素の座標値に対応する前記変換対象画像の前記座標値に基づいて、前記変換対象画像を前記行列変換画像に変換する変換工程と、
を有し、
前記演算工程では、前記行列変換における変換行列の要素と前記演算結果を加算または減算する演算を繰り返すことにより、前記行列変換における変換行列の要素と前記行列変換画像の隣接する複数の画素の座標値の乗算結果が順次出力され、
前記特定工程では、前記行列変換画像の前記隣接する複数の画素の座標値に対応する前記非線形変換画像の複数の座標値が、前記演算工程により順次出力される前記乗算結果に基づいて特定され、
前記取得工程では、前記特定工程により特定された前記非線形変換画像の前記複数の座標値に対応する前記変換対象画像の複数の座標値が取得され、
前記変換工程では、前記行列変換画像の前記隣接する複数の画素の座標値に対応する前記変換対象画像の前記複数の座標値に基づいて、前記変換対象画像が前記行列変換画像に変換される、
ことを特徴とする画像処理装置の画像処理方法。
【請求項９】
前記演算手段は、前記行列変換画像の所定の画素の座標値を保持し、前記演算工程では、前記所定の画素の座標値から順に、前記変換行列の要素と前記隣接する複数の画素の座標値の乗算結果を出力する、
ことを特徴とする請求項８に記載の画像処理方法。
【請求項１０】
前記所定の画素の座標値は０である、
ことを特徴とする請求項９に記載の画像処理方法。
【請求項１１】
前記演算工程では、前記行列変換画像の隣接する複数の画素についてラスタースキャン順に、前記変換行列の要素と前記隣接する複数の画素の座標値の乗算結果を順次出力する、
ことを特徴とする請求項８に記載の画像処理方法。
【請求項１２】
前記取得工程では、前記非線形変換画像の前記座標値と、前記非線形変換画像の所定の位置との距離に基づいて、前記非線形変換画像の前記座標値に対応する前記変換対象画像の前記座標値を取得する、
ことを特徴とする請求項８に記載の画像処理方法。
【請求項１３】
レンズ歪みの補正のために前記非線形変換が行われる、
ことを特徴とする請求項８に記載の画像処理方法。
【請求項１４】
コンピュータを請求項１から７のいずれか１項に記載の画像処理装置が備える各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、射影変換処理を行う画像処理装置及び画像処理方法に関する。
【背景技術】
【０００２】
デジタルカメラを用いてホワイトボードや名刺、文書等を撮影し、その撮影画像を記録媒体に保存して管理を行う場合に、被写体を斜め方向から撮影すると撮影画像上では長方形である被写体が長方形でない四辺形に歪む遠近法的な歪みが発生する。また、レンズ設計時に決まる歪みであって、広角レンズ等で大きくなる傾向のある歪みがあり、撮影画像上では歪曲歪みが発生する。
【０００３】
これに対し、特許文献１には、これらの歪みを持つ画像から、遠近法的な歪みに対して射影変換を、歪曲歪みに対して歪曲補正を、それぞれ行って両方の歪みがない画像を生成する技術が記載されている。また、特許文献２には、デジタルカメラを用いて顔や指紋などを撮影し、その撮影画像を照合用画像と照合する技術が記載されており、撮影画像の遠近法的な歪みに対して射影変換を行うとともに、非線形な歪みに対する補正をも行うことが記載されている。
【０００４】
また、射影変換では、ＣＰＵにおいて、比較的時間を要する乗算などの数値演算処理を１画素ずつ行う必要がある。これに対し、特許文献３には、乗算処理無しで処理を高速化する技術が記載されている。特許文献３に記載の技術では、画像の座標のｘ軸とｙ軸とをメモリの行アドレスと列アドレスとに対応させ、変換前の座標と変換後の座標との対応関係に基づいて、変換前の座標のアドレスから読みだした画素値を変換後の座標のアドレスへ格納する。このとき、変換前後の座標について、行アドレス及び列アドレスのそれぞれで変位量を定め、その変位量を加算及び減算することにより、１回の読出し及び書き込みアドレスを特定する。また、特許文献３の技術では、上述のような処理を、射影変換前後の転送元メモリ及び転送先メモリ間をダイレクトメモリアクセスでデータ転送するバスラインを設けて実行する。
【０００５】
また、特許文献４には、射影変換の一形態である画像の拡大縮小処理を、乗算処理なしで行う方法が記載されている。特許文献４に記載の方法は、基準クロックと間引きクロックの２種類のクロックを有し、拡大縮小倍率に応じて転送元と転送先メモリの小さい方の画像を扱うメモリに間引きクロックを供給することで、画像の拡大縮小処理を行う。また、特許文献５には、拡大縮小倍率に応じて決定される読み出しアドレスの増分を順次加算して、読み出しアドレスを乗算処理なしで算出する画像の拡大縮小処理方法が記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−２６７４５７号公報
【特許文献２】特開２００９−２１１１７１号公報
【特許文献３】特開平１１−３１２２３８号公報
【特許文献４】特開平３−０５８２８５号公報
【特許文献５】特開平１０−２３２４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら遠近法的な歪みを補正する射影変換において出力画像データの座標値に対応した入力画像データの座標値を求める逆射影変換では、複数の乗算処理を行う必要がある。ここで、動画処理など、１画像データを短時間に処理することが要求される場合には、複数の乗算処理は負荷が大きいため、複数の乗算器を並列化して配置したハードウェア又は高速な演算装置（ＣＰＵなど）が必要となるという課題があった。
【０００８】
また特許文献３に記載の方法では、座標値を算出しないため、複数の周辺画素による補間処理ができないため画質低下が大きいという課題があった。さらに歪曲歪みに対する歪曲補正は非線形な変換であるため、射影変換と合わせて変換前後で転送元及び転送先メモリ間のデータ転送を１回の転送で行うことはできないという課題があった。
【０００９】
また特許文献４及び特許文献５に記載の方法では、例えば転送先メモリの３行目には転送元メモリの５行目のデータを転送するというように、転送元と転送先メモリは行単位で結合される。そのため、射影変換の一形態である画像の拡大縮小処理にのみ適用可能で、任意のパラメータで射影変換処理への適用はできないという課題があった。
【００１０】
また、デジタルカメラなどで撮影した画像データは、画像符号化処理を行ってＪＰＥＧやＭＰＥＧ、Ｈ．２６４など形式に変換した上で記憶装置に保存したり、外部出力したりすることが一般的である。画像符号化処理は一般的にブロック単位（例えば８×８）で行われるため、射影変換後の画像データをラスタースキャン順で出力すると、画像符号化処理をする装置の入力前に射影変換後の画像データをブロック処理の順序へ変換する必要がある。例えば、１ブロックのサイズが８×８とすると、最左列のブロックの画像符号化処理は、８行目の先頭８画素分の射影変換が完了するまで実行できないため、射影変換後の画像を保持する大容量のバッファメモリが必要となるという課題があった。
【００１１】
本発明は上記課題に鑑みなされたものであり、乗算処理の負荷を低減しながら、任意のパラメータで射影変換を行って変換後の画像の出力を可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明による画像処理装置は、変換対象画像を非線形変換画像に非線形変換し、前記非線形変換画像を行列変換によって変換した画像である行列変換画像を出力する画像処理装置であって、加算または減算を行う演算手段と、前記行列変換画像の１つの画素の座標値に対応する前記非線形変換画像の座標値を前記演算手段の演算結果に基づいて特定する特定手段と、前記特定手段により特定された前記非線形変換画像の前記座標値に対応する前記変換対象画像の座標値を取得する取得手段と、前記行列変換画像の前記１つの画素の座標値に対応する前記変換対象画像の前記座標値に基づいて、前記変換対象画像を前記行列変換画像に変換する変換手段と、を有し、前記演算手段は、前記行列変換における変換行列の要素と前記演算結果を加算または減算する演算を繰り返すことにより、前記行列変換における変換行列の要素と前記行列変換画像の隣接する複数の画素の座標値の乗算結果を順次出力し、前記特定手段は、前記行列変換画像の前記隣接する複数の画素の座標値に対応する前記非線形変換画像の複数の座標値を、前記演算手段により順次出力される前記乗算結果に基づいて特定し、前記取得手段は、前記特定手段により特定された前記非線形変換画像の前記複数の座標値に対応する前記変換対象画像の複数の座標値を取得し、前記変換手段は、前記行列変換画像の前記隣接する複数の画素の座標値に対応する前記変換対象画像の前記複数の座標値に基づいて、前記変換対象画像を前記行列変換画像に変換する、ことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、任意のパラメータで射影変換を行う際に、行列演算内の乗算処理を加減算で行うため、乗算処理の負荷を低減することができる。
【図面の簡単な説明】
【００１４】
【図１】画像処理装置の構成例を示すブロック図。
【図２】画像処理装置における画像変換の一例を示す図。
【図３】座標値（ｕ，ｖ）の処理順序を示す図。
【図４】逆射影変換部の内部構成例を示すブロック図。
【図５】逆射影変換部の制御動作を示すフローチャート。
【図６】射影変換画像のブロックへの分割の例を示す図。
【図７】各ブロック内での座標値（ｕ，ｖ）の処理順序を示す図。
【図８】第２の実施形態に係る逆射影変換部の内部構成例を示すブロック図。
【図９】第２の実施形態に係る逆射影変換部の制御動作を示すフローチャート。
【図１０】第２の実施形態に係る逆射影変換部の制御動作を示すフローチャート。
【図１１】第３の実施形態に係る画像処理装置の構成例を示すブロック図。
【図１２】第３の実施形態に係る画像処理装置における画像変換の一例を示す図。
【図１３】レンズ歪補正の変換処理を示す図。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【００１６】
＜＜実施形態１＞＞
（画像処理装置の構成）
図１は本実施形態に係る画像処理装置の構成を示すブロック図である。また、図２は本実施形態に係る画像処理装置の画像変換の一例である。画像処理装置１は、変換前の画像である変換対象画像上の任意の四辺形部分（図２における網掛け部）の４頂点が、長方形の４頂点に一致するように、正則行列である変換行列によって画像を変換する。画像処理装置１は、逆射影変換部１１、画像取得部１２、補間処理部１３、及び制御部１４を有して構成される。変換行列による変換をその一例である射影変換として、変換前の変換対象画像に射影変換を施した結果得られる変換後の画像を射影変換画像として、以下説明する。
【００１７】
ここで、変換前の画像である変換対象画像の各画素の位置を第１の座標値（ｘ，ｙ）で示し、画像処理装置１によって生成する変換後の射影変換画像の各画素の位置を第２の座標値（ｕ，ｖ）で示す。また射影変換画像は、水平方向にＨ画素、垂直方向にＶ画素の画素数からなる画像であるとする。なお、ｘとｕはそれぞれの座標値の水平成分を示す座標要素であり、ｙとｖはそれぞれの座標値の垂直成分を示す座標要素である。
【００１８】
逆射影変換部１１は、射影変換画像の第２の座標値（ｕ，ｖ）上の画素を生成するために必要な変換対象画像上の画素の位置を示す第１の座標値（ｘ，ｙ）を出力する。以下、逆射影変換部１１の基本的な動作について簡単に説明する。まず、以下の式（１）は、射影変換画像の第２の座標値（ｕ，ｖ）と、それに対応する変換対象画像の第１の座標値（ｘ，ｙ）の関係を表している。
【００１９】
【数１】
0005914045.tif 000002
【００２０】
ここで、左辺の行列と座標を表すベクトルとの積と、右辺の座標を表すベクトルとは同値関係にある。ａからｈは射影変換の変換行列の逆行列の行列要素であり、各値の組み合わせによって射影変換結果が異なる。すなわち、この逆行列の行列要素により、第１の座標値（ｘ，ｙ）と第２の座標値（ｕ，ｖ）とが関連付けられる。以下の式（２）は、第１の座標値（ｘ，ｙ）を第２の座標値（ｕ，ｖ）で表した式であり、式（１）から求められる。
【００２１】
【数２】
0005914045.tif 000003
【００２２】
このように、式（２）を用いることにより、第２の座標値（ｕ，ｖ）から第１の座標値（ｘ，ｙ）を特定することができる。なお、式（２）から分かるように、この時点で第１の座標値（ｘ，ｙ）は整数でなくてもよい、すなわち、小数点以下の数値を含む値である場合があることに留意されたい。
【００２３】
逆射影変換部１１は、図３のように第２の座標値（ｕ，ｖ）をラスタースキャン順に式（２）へ代入し、出力値である第１の座標値（ｘ，ｙ）を順次算出する。ここで、図３は、横軸をｕ、縦軸をｖとして座標値（ｕ，ｖ）の式（２）への代入順序を示している。なお、射影変換後の画素数から、座標要素ｕの最小値は０で最大値はＨ−１であり、座標要素ｖの最小値は０で最大値はＶ−１である。このとき、逆射影変換部１１は、座標値Ｓ＝（ｕ，ｖ）＝（０，０）に対応する座標値（ｘ，ｙ）の計算から出力値の算出を開始する。逆射影変換部１１は、以降、座標要素ｕを１ずつ増加させながら水平方向に座標値（ｕ，ｖ）＝（Ｈ−１，０）までの１ライン分の座標値に対応する座標値（ｘ，ｙ）を算出する。逆射影変換部１１は、次に、座標要素ｕを最小値０に戻した上で座標要素ｖを１増加させて、座標値（ｕ，ｖ）＝（０，１）から座標値（ｕ，ｖ）＝（Ｈ−１，１）までの次の１ライン分に対応する座標値（ｘ，ｙ）を順に算出する。以降、座標値Ｅ＝（ｕ，ｖ）＝（Ｈ−１，Ｖ−１）に対応する座標値（ｘ，ｙ）を算出するまで、この計算が繰り返され、逆射影変換部１１は、全ての座標値（ｕ，ｖ）に対応する座標値（ｘ，ｙ）を出力する。逆射影変換部１１の詳細については後述する。
【００２４】
画像取得部１２は、逆射影変換部１１が算出する第１の座標値（ｘ，ｙ）を元に、変換対象画像を保存している不図示のメモリに対してアドレスを発行して、画像データを読み出して取得する。また、画像取得部１２は、取得した画像データから補間処理に必要な画素データを出力する。補間処理部１３は、整数でない座標値（ｘ，ｙ）に対して、その小数部分と、画像取得部１２から入力された画素データとを用いて、バイリニア補間処理を行って、出力画像データを生成して出力する。制御部１４は、逆射影変換部１１、画像取得部１２、及び補間処理部１３の状態を表す状態信号を受信して、各機能部を制御する制御信号を生成する。
【００２５】
（画像処理装置の動作）
画像処理装置１の各機能部の動作を説明する。まず、逆射影変換部１１は制御部１４の制御に基づいて、変換後の射影変換画像に関する第２の座標値（ｕ，ｖ）に対応する、変換前の変換対象画像に関する第１の座標値（ｘ，ｙ）を順次出力する。次に、画像取得部１２は、順次入力される座標値（ｘ，ｙ）に基づいて、補間処理部１３で使用する画素値が保存されている不図示のメモリ上のアドレスから入力画像データを読み出して、補間処理部１３へその画素値を出力する。本実施形態ではバイリニア補間処理を行うため、座標値（ｘ，ｙ）周辺の４画素分の画素データを出力する。例えば、（ｘ，ｙ）＝（３．１，４．５）である場合、画像取得部１２は、座標（３，４）、（４，４）、（３，５）及び（４，５）の画素値を取得して、補間処理部１３へ出力する。そして、補間処理部１３は、座標値（ｘ，ｙ）の小数部分と画素データを用いてバイリニア補間処理を行って、射影変換画像についての画素値、すなわち出力画像データを出力する。
【００２６】
（逆射影変換部の構成）
図４は、逆射影変換部１１の内部構成例を示すブロック図である。本実施形態では、逆射影変換部１１は、それぞれ３つの水平方向処理部１０１−１〜１０１−３と、垂直方向処理部１０２−１〜１０２−３を有する。また、逆射影変換部１１は、さらに、要素発生器１０３、１０４と、定数発生器１０５と、加算器１０６〜１０８と、除算器１０９、１１０とを有する。
【００２７】
また、本実施形態では、水平方向処理部１０１−１〜１０１−３のそれぞれは、例えば、要素発生器２０１、定数発生器２０２、フリップフロップ２０３、加算器２０４、及びセレクタ２０５を有する。ここで、第１の水平方向処理部１０１−１は、逆行列の行列要素ａと変換後の射影変換画像に関する水平方向の座標要素であるｕとの乗算式ａ×ｕの値を出力する。また、同様に、第２の水平方向処理部１０１−２は乗算式ｄ×ｕの値を、そして第３の水平方向処理部１０１−３は乗算式ｇ×ｕの値を、それぞれ出力する。
【００２８】
また、垂直方向処理部１０２−１〜１０２−３のそれぞれは、例えば、要素発生器３０１、定数発生器３０２、フリップフロップ３０３、加算器３０４、及びセレクタ３０５を有する。ここで、第１の垂直方向処理部１０２−１は逆行列の行列要素ｂと変換後の射影変換画像に関する垂直方向の座標要素であるｖとの乗算式ｂ×ｖの値を出力する。また、同様に、第２の垂直方向処理部１０２−２は乗算式ｅ×ｖの値を、そして第３の垂直方向処理部１０２−３は乗算式ｈ×ｖの値を、それぞれ出力する。
【００２９】
第１の水平方向処理部１０１−１の要素発生器２０１と、第１の垂直方向処理部１０２−１の要素発生器３０１と、要素発生器１０３とは、それぞれ逆行列の第１行の行列要素であるａ、ｂ及びｃを出力する。第２の水平方向処理部１０１−２の要素発生器２０１と、第２の垂直方向処理部１０２−２の要素発生器３０１と、要素発生器１０４とは、それぞれ、逆行列の第２行の行列要素であるｄ、ｅ及びｆを出力する。そして、第３の水平方向処理部１０１−３の要素発生器２０１と、第３の垂直方向処理部１０２−３の要素発生器３０１と、定数発生器１０５とは、それぞれ、逆行列の第３行の行列要素であるｇ、ｈ及び定数「１」を出力する。各要素ａ〜ｈの値は、１画像に対して１回の射影変換をするために座標値を算出している間は変更されない。それ以外の期間には、異なる射影変換結果を得るために、値を変更してもよい。
【００３０】
定数発生器２０２及び３０２は、固定値０を出力する。なお、これらの固定値は、それぞれ、変換後の射影変換画像の座標値の水平成分ｕ及び垂直成分ｖの最小値に該当する。しかしながら、射影変換画像の一部の範囲についての座標値を得たい場合は、その一部の範囲における水平成分及び垂直成分の最小値を初期座標として、その座標要素に対して行列要素を乗じた値を固定値としてもよい。また、例えば、所定の範囲の変換後の座標を得たい場合、その所定の範囲を含む最小の領域の最も左かつ最も右の座標の座標要素と逆行列の行列成分との乗算結果を初期値として、定数発生器２０２及び３０２に保持させてもよい。なお、ｕ＝０の場合は、例えばａ×ｕも０となるため、第１の水平方向処理部１０１−１の出力も０となる。このため、定数発生器２０２は、初期値として０を保持する。他の水平方向処理部１０１−２、１０１−３や垂直方向処理部１０２−１〜１０２−３についても同様である。
【００３１】
フリップフロップ２０３は、不図示のクロック源が供給する動作クロックによって入力を１サイクル遅延して、（要素発生器２０１の出力値）×ｕの値を出力する。同様に、フリップフロップ３０３は、不図示のクロック源が供給する動作クロックによって入力を１サイクル遅延して、（要素発生器３０１の出力値）×ｖの値を出力する。加算器２０４はフリップフロップ２０３の出力値と要素発生器２０１の出力値とを加算して出力する。加算器３０４はフリップフロップ３０３の出力値と要素発生器３０１の出力値を加算して出力する。
【００３２】
セレクタ２０５及びセレクタ３０５は、制御部１４からの信号に基づいて、それぞれフリップフロップ２０３及び３０３に出力する値を選択する。なお、水平方向処理部１０１−１〜１０１−３のセレクタ２０５へは、先のクロックにおけるフリップフロップ２０３の出力値と、その出力値に要素発生器２０１の値を加えた値と、定数発生器２０２の出力値とが入力される。同様に、垂直方向処理部１０２−１〜１０２−３のセレクタ３０５へは、先のクロックにおけるフリップフロップ３０３の出力値と、その出力値に要素発生器３０１の値を加えた値と、定数発生器３０２の出力値とが入力される。
【００３３】
加算器１０６は、水平方向処理部１０１−１のフリップフロップ２０３、垂直方向処理部１０２−１のフリップフロップ３０３、要素発生器１０３の出力値を加算して出力する。ここで、加算器１０６の出力値は式（２）におけるｘを求める式の分子に該当する。加算器１０７は、水平方向処理部１０１−２のフリップフロップ２０３、垂直方向処理部１０２−２のフリップフロップ３０３、要素発生器１０４の出力値を加算して出力する。ここで、加算器１０７の出力値は式（２）のｙを求める式の分子に該当する。加算器１０８は、水平方向処理部１０１−３のフリップフロップ２０３、垂直方向処理部１０２−３のフリップフロップ３０３、定数発生器１０５の出力値を加算して出力する。加算器１０８の出力値は、式（２）のｘ及びｙを求める両式の分母に該当する。
【００３４】
除算器１０９は、加算器１０６の出力値を分子、加算器１０８の出力値を分母として除算し、式（２）のｘを特定して出力する。除算器１１０は、加算器１０７の出力値を分子、加算器１０８の出力値を分母として除算し、式（２）のｙを特定して出力する。
【００３５】
（逆射影変換部の動作）
本実施形態では、水平方向処理部１０１−１〜１０１−３は、ある座標Ｐの右に隣接する座標の座標要素と逆行列の行列要素との乗算結果を、座標Ｐに関する座標要素と行列要素との乗算結果に行列要素を加算して算出する手段である。すなわち、座標要素ｕが１増加することに応じて、その増加前の乗算結果に対して行列要素を加算して、座標要素と行列要素との積を算出する。同様に、垂直方向処理部１０２−１〜１０２−３は、ある座標Ｑの下に隣接する座標の座標要素と逆行列の行列要素との乗算結果を、座標Ｑに関する座標要素と行列要素との乗算結果に行列要素を加算して算出する手段である。また、初期値として、所定の座標要素と逆行列の行列要素との乗算結果を与えることにより、その所定の座標要素に隣接する座標から順に、加算処理によって座標要素と行列要素との乗算結果を得ることが可能となる。
【００３６】
例えば、水平方向の所定の座標要素をｕ＝０とすると、行列要素ａとの乗算結果として、ａ×ｕは初期的に０が出力される。そして、その右隣の座標は、所定の座標要素からｕを１増加させたものであるところ、ａ×ｕの結果は先の計算結果「０」に行列要素ａを加算したａが乗算結果として出力される。そして、さらにｕが１増加するとａ×ｕは先の演算による乗算結果である「ａ」に行列要素「ａ」を加算した２ａとして出力される。このように、隣接する座標に関して先に得られた乗算結果を利用して行列要素を加算していくことにより、乗算処理を加算処理で置き換えることができる。その結果、演算量を削減でき、演算時間を短縮することが可能となる。以下、逆射影変換部１１の各部の詳細動作を図５に基づいて説明する。
【００３７】
図５は、本実施形態に係る逆射影変換部１１の水平方向処理部と垂直方向処理部とにおける制御動作を示すフローチャートである。逆射影変換部１１では、制御部１４からの水平カウント値と垂直カウント値とにより、セレクタ２０５及びセレクタ３０５が制御される。水平カウント値は０を初期値としてセレクタ２０５による加算器２０４選択に合わせて１増加し、Ｈ−１までカウントした後に再度０に初期化される。垂直カウント値は０を初期値としてセレクタ３０５による加算器３０４選択に合わせて１増加し、Ｖ−１までカウントした後に再度０に初期化される。
【００３８】
そして、水平方向処理部１０１−１〜１０１−３のそれぞれのセレクタ２０５は、対応するフリップフロップ２０３がそれぞれ乗算式ａ×ｕ、ｄ×ｕ、ｇ×ｕの値をラスタースキャン順に出力するように動作する。また、垂直方向処理部１０２−１〜１０２−３のそれぞれのセレクタ３０５は、対応するフリップフロップ３０３がそれぞれ乗算式ｂ×ｖ、ｅ×ｖ、ｈ×ｖの値をラスタースキャン順に出力するように動作する。以下では、主として第１の水平方向処理部１０１−１及び第１の垂直方向処理部１０２−１について詳細に説明するが、他の水平方向処理部１０１−２並びに１０１−３、及び垂直方向処理部１０２−２並びに１０２−３についても同様に動作する。
【００３９】
処理開始時にセレクタ２０５は定数発生器２０２の出力を選択して、定数、すなわち、「０」をフリップフロップ２０３に入力する（Ｓ１０１）。定数発生器２０２の出力値は、ｕ＝０とする時の値ａ×ｕ、ｄ×ｕ及びｇ×ｕに等しく、０である。同時に、セレクタ３０５は定数発生器３０２の出力を選択して、定数、すなわち、「０」をフリップフロップ３０３に入力する。定数発生器３０２の出力値は、ｖ＝０とする時の値ｂ×ｖ、ｅ×ｖ、ｈ×ｖに等しく、０である。なお、水平カウント値と垂直カウント値は０に初期化される。そして、フリップフロップ２０３及び３０３は、それぞれ定数発生器２０２及び３０２の出力値である「０」を出力する（Ｓ１０２）。
【００４０】
なお、Ｓ１０２におけるフリップフロップ２０３及び３０３による値の出力は、実際には、Ｓ１０１の処理の次のサイクルで実行される。また、Ｓ１０２の出力は、Ｓ１０３とＳ１０５の処理と同一サイクルで実行される。すなわち、図面では説明の簡単のため、Ｓ１０２の後にＳ１０３が実行されるが、実際には、これらの処理は同一サイクルで行われる。そして、Ｓ１０２の出力と同一サイクルで、その次のサイクルでフリップフロップ２０３及び３０３が出力すべき値が、セレクタ２０５及び３０５によって選択される。
【００４１】
続いて、水平カウント値が「Ｈ−１」であるかを判定する（Ｓ１０３）。すなわち、フリップフロップ２０３への値の入力が、射影変換後の水平画素数分だけ行われたかを判定する。水平カウント値がＨ−１でない場合（Ｓ１０３でＮｏ）、次サイクルにおいてセレクタ２０５は加算器２０４の出力を選択する（Ｓ１０５）。
【００４２】
加算器２０４は、現在のクロックにおけるフリップフロップ２０３の出力に、要素発生器２０１の出力が加算された値を出力する。すなわち、現時点においてフリップフロップ２０３から０が出力されている場合、その値（０）に要素発生器２０１の出力であるａを加算した値である「ａ」が加算器２０４から出力される。同様に、現時点において、ａ×ｕ＝ａ×Ｎがフリップフロップ２０３から出力されている場合は、その値にａを加算した、ａ×Ｎ＋ａ＝ａ×（Ｎ＋１）が加算器２０４から出力される。このように、加算器２０４は、乗算式ａ×ｕにおいてｕを１増加させた時の値を出力する。したがって、セレクタ２０５は、加算器２０４の出力であるａ×（ｕ＋１）をフリップフロップ２０３に出力し（Ｓ１０５）、フリップフロップ２０３はその値を出力する（Ｓ１０６）。一方、セレクタ３０５はフリップフロップ３０３の出力を選択し（Ｓ１０５）、フィードバックループを構成する。そして、フリップフロップ３０３は先に出力した値を再度出力する（Ｓ１０６）。なお、ここで水平カウント値を１増加させる（Ｓ１０５）。以後、射影変換後の水平画素数分のフリップフロップへの入力が完了して、水平カウント値がＨ−１となる（Ｓ１０３でＹｅｓとなる）まで、Ｓ１０５及びＳ１０６の処理を繰り返す。
【００４３】
なお、上述の説明では、理解の促進のため、Ｓ１０５でセレクタ２０５及び３０５が出力した値を、Ｓ１０６でフリップフロップ２０３及び３０３が出力し、その後Ｓ１０３の判定を行うとしたが、実際は、Ｓ１０６の出力は次のサイクルで行われる。すなわち、Ｓ１０５でセレクタ２０５及び３０５がそれぞれ出力した値は、次のサイクルにおいて、フリップフロップ２０３及び３０３から出力される。そして、その出力と並行して、Ｓ１０３の判定とＳ１０５の出力とが行われ、さらに次のサイクルでフリップフロップ２０３及び３０３から出力されるべき値を、フリップフロップ２０３及び３０３へ出力する動作が行われる。また、Ｓ１０３でＹｅｓとなる場合は、Ｓ１０４やＳ１０７の処理が、Ｓ１０６と同サイクルで行われる。
【００４４】
水平カウント値がＨ−１となると（Ｓ１０３でＹｅｓ）、射影変換画像の１行分に対応するａ×ｕ及びｂ×ｖの値がフリップフロップ２０３及び３０３へ入力されたこととなる。そこで、続いて、垂直カウント値がＶ−１であるかが判定される（Ｓ１０４）。ここでは、Ｓ１０３、及びＳ１０５において処理された行が、射影変換画像の最下行であるか、すなわち、全ての画素について、対応するａ×ｕ及びｂ×ｖの値がフリップフロップ２０３及び３０３へ入力されたかを判定する。
【００４５】
垂直カウントがＶ−１でない場合（Ｓ１０４でＮｏ）、次サイクルで、セレクタ２０５は再び定数発生器２０２の出力を選択して、ｕ＝０とする時のａ×０、ｄ×０、ｇ×０の値、すなわち「０」をフリップフロップ２０３に入力する（Ｓ１０７）。これと同時に、セレクタ３０５は加算器３０４の出力を選択して、次ラインの処理で使用する乗算式ｂ×ｖ、ｅ×ｖ、ｈ×ｖのｖを１増加させた時の値をフリップフロップ３０３に入力する。ここで、加算器３０４は、加算器２０４と同様に動作し、現在のクロックでｂ×ｖ＝ｂ×Ｍである場合は、その値に要素発生器３０１からの出力であるｂを加算した、ｂ×Ｍ＋ｂ＝ｂ×（Ｍ＋１）を出力する。すなわち、加算器３０４は、乗算式ｂ×ｖにおいてｖを１増加させた時の値を出力する。したがって、セレクタ３０５は、加算器３０４の出力であるｂ×（ｖ＋１）をフリップフロップ３０３に出力し（Ｓ１０７）、フリップフロップ３０３は、その値を出力する（Ｓ１０８）。また、ここで水平カウント値は０に初期化され、垂直カウント値は１増加する（Ｓ１０７）。なお、Ｓ１０６の場合と同様に、Ｓ１０８でフリップフロップ２０３及び３０３が出力し、その後Ｓ１０３の判定を行うとしたが、実際は、Ｓ１０８の出力は次のサイクルで行われる。
【００４６】
以後、垂直カウント値がＶ−１となる（Ｓ１０４でＹｅｓとなる）まで、Ｓ１０３〜Ｓ１０８の処理を繰り返す。垂直カウント値がＶ−１となった（Ｓ１０４でＹｅｓとなった）場合、射影変換画像の全座標に対応するａ×ｕ及びｂ×ｖの値がフリップフロップ２０３及び３０３へ入力されたこととなる。この場合は、処理をＳ１０１に戻して、次の画像の処理を行う。
【００４７】
なお、除算器１０９、１１０や画像取得部１２、補間処理部１３の処理が１サイクルで完了しない時は、前述の条件に関係なく、セレクタ２０５及び３０５はそれぞれフリップフロップ２０３及び３０３の出力を選択し、フィードバックループを構成してもよい。これにより、フリップフロップ２０３及び３０３には、前サイクルと同じ値が保持される。
【００４８】
以上のように、水平方向処理部１０１−１〜１０１−３のフリップフロップ２０３はそれぞれ、乗算式ａ×ｕ、ｄ×ｕ、ｇ×ｕの値をラスタースキャン順に出力する。同様に垂直方向処理部１０２−１〜１０２−３のフリップフロップ３０３はそれぞれ、乗算式ｂ×ｖ、ｅ×ｖ、ｈ×ｖの値をラスタースキャン順に出力する。フリップフロップ２０３及び３０３の出力値は、上述のとおり加算器１０６〜１０８、除算器１０９及び１１０に入力され、それぞれの演算が行われる。そして、これらの動作により、座標値（ｕ，ｖ）について、（０，０）から（Ｈ−１，Ｖ−１）まで、対応する変換対象画像の座標値（ｘ，ｙ）が順に算出される。このように、本実施形態の構成により、任意のパラメータで射影変換を行う際に、複数の乗算器を並列化して配置したハードウェアが不要となり、回路規模を削減できる。
【００４９】
なお、本実施形態は、ある座標値に対する変換対象画像の座標値の算出で得られた乗算結果に逆行列の行列要素の値を加算して、隣接する座標値に対する変換対象画像の座標値を算出するものである。したがって、どのような順序で処理を行うかは問題ではない。すなわち、上述の実施形態では、射影変換画像の行方向へ処理を進めるように説明したが、列方向へ処理を進め、１列分のフリップフロップ２０３及び３０３への入力が完了したら、次の列についての処理を行うようにしてもよい。この場合、例えば、上述の処理においてｕとｖとを交換し、ｕを固定すると共にｖを０からＶ−１まで増加させてｘとｙを算出し、垂直カウント値がＶ−１となったら、ｕを１増加させて次の列の処理を行うようする。
【００５０】
また、処理を右側や下側の画素から開始してもよい。右側から左側へ処理を進める場合は、要素発生器２０１は「−ａ」を保持してもよいし、それに代えて、加算器２０４において減算処理をするようにしてもよい。同様に、処理を下側から上側へ進める場合は、要素発生器３０１は「−ｂ」を保持してもよいし、それに代えて、加算器３０４において減算処理をするようにしてもよい。すなわち、加算器２０４及び３０４は、それぞれ、初期座標として与えられる座標の位置または処理を進める順序に応じて加減算を実行可能な加減算器であってもよい。また、初期座標として水平方向及び垂直方向について所定の座標要素を与えると共に乗算結果の初期値としてその座標要素と逆行列の行列要素との乗算結果を与え、その初期座標に隣接する座標から順に乗算結果を出力してもよい。この場合、加算器２０４及び３０４に代えて加減算器を用い、左または上の隣接座標に対しては行列要素の減算を、右または下の隣接座標については行列要素の加算を行うようにしてもよい。
【００５１】
なお、上述の画像処理装置１では、逆行列の要素ａ〜ｈが複数の要素発生器により出力されるとしたが、画像の回転など、特定の変換行列による射影変換に用いる場合は、逆行列の要素の一部または全部を定数発生器が出力する構成にしてもよい。また、上述の説明では、３つの水平方向処理部１０１−１〜１０１−３が、それぞれ別個に乗算結果を出力するとしたが、２つの水平方向処理部が常に同じ値を出力する場合は、その２つを１つにまとめてもよい。すなわち、画像処理装置１は少なくとも１つの水平方向処理部を有していればよい。垂直方向処理部についても同様である。また、乗算式ａ×ｕ、ｄ×ｕ、ｇ×ｕの値のいずれかの値が常に定数である場合は、その乗算式に対応する水平方向処理部をその定数を出力する定数発生器に置き換えてもよい。垂直方向処理部についても同様である。また、画像処理装置１の補間処理部１３で行う補間処理は、バイリニア補間で説明したが、バイキュービック補間などの他の方式を用いても構成してもよい。
【００５２】
＜＜実施形態２＞＞
本実施形態では、逆射影変換部１１は、射影変換画像をブロック単位に分割して、そのブロック中の座標値（ｕ，ｖ）をラスタースキャン順に式（２）へ代入して、対応する出力座標値（ｘ，ｙ）を算出する。以下の説明では、実施形態１と異なる部分に焦点を当てて説明を行うものとし、画像取得部１２、補間処理部１３、制御部１４の構成及び動作など、実施形態１と同様の構成や動作については説明を省略する。また、以下の説明では、実施形態１と同様に、射影変換後の画素数から、水平方向の座標要素ｕの最小値は０で最大値はＨ−１であり、垂直方向の座標要素ｖの最小値は０で最大値はＶ−１であるとする。
【００５３】
図６に、横軸をｕ、縦軸をｖとした場合のブロックへの分割の例を示す。また、図７に、各ブロック内での座標値（ｕ，ｖ）の式（２）への詳細な代入順序を示す。なお、ここでは、１ブロックの画素数は、例えば、右端と下端を除いて水平方向と垂直方向が両方とも底が２で指数が自然数の累乗の数であるものとし、水平方向の画素数を２N、垂直方向の画素数を２Mとする。また、指数ＮとＭは０以上の整数値で任意に決定できるものとし、１画像の処理中での変更はされないものとする。なお、右端のブロックの水平画素数は、剰余（Ｈ mod ２N）が０でない場合はその値に等しく、剰余が０である場合は２Nであるものとする。同様に、下端のブロックの垂直画素数は、剰余（Ｖ mod ２M）が０でない場合はその値に等しく、剰余が０である場合は２Mであるものとする。
【００５４】
図６において、ＢＨは、水平方向のブロック位置を指定する０以上の整数値であり、最小値が０で、最大値がＢＨmaxである。ＢＨmaxはＨ÷２N−１以上の最小の整数である。同様に、ＢＶは垂直方向のブロック位置を指定する０以上の整数値であり、最小値が０で、最大値がＢＶmaxである。また、ＢＶmaxはＶ÷２M−１以上の最小の整数である。
【００５５】
本実施形態では、ＢＨ＝０、ＢＶ＝０のブロックから処理を開始して、１ブロックの処理が完了すると順に右隣のブロックの処理へ進む。ＢＨ＝ＢＨmaxのブロックの処理を完了すると、ＢＶを１増加するとともに、ＢＨを０に戻して、次のブロックの行へ処理を進める。以後、ＢＨ＝ＢＨmax、ＢＶ＝ＢＶmaxのブロックまで順に処理を行う。なお、処理を行う順序は一例であり、１ブロックの処理が完了後に下隣のブロックを処理してもよいし、また、処理を下側や右側のブロックから始めてもよい。
【００５６】
ここで、図７に示すように、単一ブロック内のｕの最小座標値をＵmin、最大座標値をＵmax、ｖの最小座標値をＶmin、最大座標値をＶmaxとする。右端のブロックを除き、Ｕmin＝２N×ＢＨ、Ｕmax＝２N×（ＢＨ＋１）−１である。また、同様に、下端のブロックを除き、Ｖmin＝２M×ＢＶ、Ｖmax＝２M×（ＢＶ＋１）−１である。なお、右端ブロックではＵmax＝Ｈ−１、下端ブロックではＶmax＝Ｖ−１となる。
【００５７】
各ブロック内の処理は、左上端の座標値ＢＳ＝（ｕ，ｖ）＝（Ｕmin，Ｖmin）に対応する座標値（ｘ，ｙ）から算出を開始する。以降、ｕを１ずつ増加させながら水平方向に座標値（ｕ，ｖ）＝（Ｕmax，Ｖmin）まで、ブロックの１行分の対応する座標値（ｘ，ｙ）を順に算出する。次に、ｕをＵminに戻した上でｖを１増加させる。そして、その座標値（Ｕmin，Ｖmin＋１）から（Ｕmax，Ｖmin＋１）までの、次の１行分に対応する変換対象画像の座標値（ｘ，ｙ）を算出する。以降、右下端の座標値ＢＥ＝（ｕ，ｖ）＝（Ｕmax，Ｖmax）に対応する座標値（ｘ，ｙ）を算出するまで、この処理を繰り返す。ここでの動作は、射影変換画像全体にではなく、射影変換画像を分割したブロックに対して処理を施す以外は、実施形態１と同様である。
【００５８】
（逆射影変換部の構成）
図８は、逆射影変換部１１の内部構成を示している。実施形態１と同じ機能を有するブロックは同じ番号を付し、説明を省略する。本実施形態の逆射影変換部１１においては、水平方向処理部１０１−１〜１０１−３のそれぞれは、実施形態１の構成に加えて、さらに、シフト器２０６、第２のフリップフロップ２０７、第２の加算器２０８、及び第２のセレクタ２０９を有する。同様に、垂直方向処理部１０２−１〜１０２−３のそれぞれは、さらに、シフト器３０６、第２のフリップフロップ３０７、第２の加算器３０８、第２のセレクタ３０９を有する。
【００５９】
第２のフリップフロップ２０７及び３０７は、不図示のクロック源が供給する動作クロックによって入力を１サイクル遅延して、シフト器２０６及び３０６にそれぞれ出力する。水平方向処理部のシフト器２０６は算術シフト演算器であり、入力値をＮビット左にシフトした値を第１のセレクタ２０５に出力する。一方、垂直方向処理部のシフト器３０６は算術シフト演算器であり、入力値をＭビット左にシフトした値を第１のセレクタ３０５に出力する。第２の加算器２０８及び３０８は、それぞれ、第２のフリップフロップ２０７の出力値と要素発生器２０１の出力値との加算結果、及び第２のフリップフロップ３０７の出力値と要素発生器３０１の出力値との加算結果を出力する。第２のセレクタ２０９及び３０９は、制御部１４からの信号に基づいて、それぞれ第２のフリップフロップ２０７及び３０７に出力する値を選択する。
【００６０】
（逆射影変換部の処理）
以下、逆射影変換部１１の各部の詳細動作を図９と図１０を用いて説明する。図９及び図１０は、本実施形態に係る逆射影変換部１１の水平方向処理部と垂直方向処理部とにおける制御動作を示すフローチャートである。なお、以下では、第１の水平方向処理部１０１−１及び第１の垂直方向処理部１０２−１について説明するが、他の水平方向処理部及び他の垂直方向処理部についても同様の動作が行われるものとする。
【００６１】
逆射影変換部１１では、実施形態１と同様に、制御部１４からの水平カウント値と垂直カウント値とにより、第１のセレクタ２０５並びに３０５及び第２のセレクタ２０９並びに３０９が制御される。また、第２のセレクタ２０９及び３０９は、ブロック位置に関する水平方向ブロックカウンタＢＨＣと垂直方向ブロックカウンタＢＶＣとによっても制御される。
【００６２】
なお、水平カウント値は、Ｕminを初期値とし、第１のセレクタ２０５が第１の加算器２０４の出力を選択すると１増加し、Ｕmaxまでカウントした後にＵminに初期化される。また、垂直カウント値は、Ｖminを初期値とし、第１のセレクタ３０５が第１の加算器３０４の出力を選択すると１増加し、Ｖmaxまでカウントした後にＶminに初期化される。すなわち、Ｕmax及びＶmaxは、それぞれ水平カウント値及び垂直カウント値の初期化条件である。また、前述のとおり、Ｕmin＝２N×ＢＨ、Ｕmax＝２N×（ＢＨ＋１）−１である。同様に、Ｖmin＝２M×ＢＶ、Ｖmax＝２M×（ＢＶ＋１）−１である。このため、カウント値の初期値及び初期化条件は、ブロック位置を指定する値であるＢＨ又はＢＶが１増加するごとに、元の初期値及び初期化条件に２N又は２Mだけ加算することで簡単に求めることができる。なお、右から左へ処理を進める場合や、下から上へ処理を進める場合は、それぞれ２N又は２Mだけ減算することとなる。
【００６３】
本実施形態では、シフト器２０６及び３０６により、第２のフリップフロップ２０７及び３０７からの出力をビットシフトすることで、各ブロックの左上端の座標に対する（ｘ，ｙ）の値を求め、それをブロックにおける出力の初期値として設定する。例えば、以下のようにする。各ブロックの左上端の座標は上述の通り、（Ｕmin，Ｖmin）＝（２N×ＢＨ，２M×ＢＶ）である。そして、ａ×ＢＨ×２Nはａ×ＢＨをＮビットシフトした値である。したがって、第２のフリップフロップ２０７の出力値がａ×ＢＨであるように第２の加算器２０８と第２のセレクタ２０９とを制御することにより、シフト器２０６は、各ブロックの左端の座標ｕに対する計算式ａ×ｕの結果を出力することとなる。同様に、垂直方向処理部１０２−１における第２のフリップフロップ３０７の出力値がｂ×ＢＶとなるようにすることで、シフト器３０６は、各ブロックの上端の座標ｖに対する計算式ｂ×ｖの結果を出力することとなる。以下、詳細な動作について説明する。
【００６４】
図９のフローは、基本的には図５のフローと同様である。ただし、上述の通り、水平カウント値及び垂直カウント値の初期値と初期化条件とが異なる。そして、水平カウント値及び垂直カウント値のいずれかが初期値である場合に、第１のセレクタ２０５又は３０５が選択するのが、定数発生器２０２又は３０２でなく、シフト器２０６又は３０６であることが異なる。
【００６５】
すなわち、各ブロックの処理開始時に、第１のセレクタ２０５はシフト器２０６の出力を選択する（Ｓ２０１）ことにより、出力の初期値を設定する。また、第１のセレクタ３０５も同様に、シフト器３０６の出力を選択する。そして、第１のフリップフロップ２０３及び３０３は、シフト器２０６及び３０６の出力値を保持し、出力する（Ｓ２０２）。このとき、シフト器２０６は、上述の通り、ａ×ＢＨ×２N＝ａ×Ｕminの値を出力する。この値は、ｕ＝ＢＨ×２N、すなわち、各ブロックの左端の座標に対応するａ×ｕの値である。同様に、シフト器３０６は、ブロックの上端の座標に対応するｂ×ｖの値、すなわち、ｂ×ＢＶ×２Mを出力する。なお、ＢＨ及びＢＶの初期値は例えば０であり、この場合には、第２のフリップフロップ２０７及び３０７が保持する値が０であるため、シフト器２０６及び３０６は「０」を出力する。
【００６６】
そして、シフト器２０６から出力された値を出力の初期値として、水平方向に座標値が１増加するごとに、第１のセレクタ２０５は、第１の加算器２０４により先の出力値にａが加算された値を選択する（Ｓ２０５）。そして、第１のフリップフロップ２０３は、先の出力値にａが加算された値を出力する（Ｓ２０６）。そして、水平カウント値がＵmaxとなると（Ｓ２０３でＹｅｓ）、垂直カウント値がＶmaxであるかを判定する（Ｓ２０４）。垂直カウント値がＶmaxでない場合（Ｓ２０４でＮｏ）、水平カウント値を初期値Ｕminへ初期化する（Ｓ２０７）。そして、第１のセレクタ２０５はシフト器２０６を選択し、このブロックにおける水平方向の出力の初期値２N×ＢＨを第１のフリップフロップ２０３へ入力する（Ｓ２０７）。また、第１のフリップフロップ２０３は、シフト器２０６から出力された値、すなわちａ×Ｕminを出力する（Ｓ２０８）。また、垂直カウント値を１つ増加させ、第１のセレクタ３０５は、第１の加算器３０４により先の出力値にｂが加算された値を選択する（Ｓ２０７）。そして、第１のフリップフロップ３０３は、先の出力値にｂが加算された値を出力する（Ｓ２０８）。そして、ブロック内の次の行に対してＳ２０５及びＳ２０６の処理を繰り返す。その後、垂直カウント値がＶmaxとなると（Ｓ２０４でＹｅｓ）、ブロック内の全ての座標について第１のフリップフロップ２０３及び３０３への入力が完了したと判断し、次のブロック又は次の画像に対して同様の処理を繰り返す。
【００６７】
なお、Ｓ２０２、Ｓ２０６及びＳ２０８における第１のフリップフロップ２０３及び３０３による値の出力は、実際には、それぞれ、Ｓ２０１、Ｓ２０５及びＳ２０７を実行したサイクルの次のサイクルで実行される。また、Ｓ２０２、Ｓ２０６及びＳ２０８の出力は、Ｓ２０３からＳ２０５及びＳ２０７の処理と同一サイクルで実行される。すなわち、図面では説明の簡単のため、Ｓ２０２、Ｓ２０６及びＳ２０８の後にＳ２０３が実行されるが、実際には、Ｓ２０２、Ｓ２０６及びＳ２０８とＳ２０３との処理は同一サイクルにおいて実行される。すなわち、Ｓ２０２、Ｓ２０６及びＳ２０８の出力と同一サイクルにおいて、第１のセレクタ２０５及び３０５は、その次のサイクルで第１のフリップフロップ２０３及び３０３が出力すべき値の選択を実行する。
【００６８】
続いて、シフト器２０６及び３０６から出力される値の生成動作について、図１０を用いて説明する。シフト器２０６及び３０６がそれぞれ出力する値は、ブロックの左上端の座標値（Ｕmin，Ｖmin）に対する出力値である。すなわち、シフト器２０６及び３０６は、ａ×Ｕmin及びｂ×Ｖminを出力する。
【００６９】
各ブロックにおいて、Ｕmin＝２N×ＢＨであり、ａ×Ｕminは、計算式ａ×ＢＨ×２Nで求めることができる。この計算結果は、行列要素ａに水平方向のブロック位置を指定する０以上の整数であるＢＨを乗じた値を、Ｎビット左にシフトすることにより得られる。また、ａ×ＢＨは、０にａをＢＨ回加算した結果として得られる。また、同様に、ｂ×Ｖminは、計算式ｂ×ＢＶ×２Mで求めることができる。これは、０にｂをＢＶ回加算した結果をＭビット左にシフトすることにより得られる。
【００７０】
このため、第２のセレクタ２０９は、第２のフリップフロップ２０７がａ×ＢＨの値を水平方向のブロック位置を指定する整数ＢＨに応じて出力するように動作する。この出力値をＮビット左にシフトした値が、ブロック内の各行の左端におけるａ×Ｕminが得られる。同様に、第２のセレクタ３０９は、第２のフリップフロップ３０７がｂ×ＢＶの値を垂直方向のブロック位置を指定する整数ＢＶに応じて出力するように動作する。そして、この出力をＭビット左にシフトすることで、各ブロックの上端におけるｂ×Ｖminが得られる。
【００７１】
なお、第２のセレクタ２０９及び３０９は、例えば、制御部１４からの水平カウント値と垂直カウント値とブロック位置とに基づいて制御される。ここで、以下の説明では、ブロック位置を特定するために、水平方向ブロックカウンタＢＨＣと垂直方向ブロックカウンタＢＶＣとを用いるものとするが、これ以外の方法でブロック位置を特定してもよい。例えば、ブロックの水平方向における初期化条件であるＵmaxがＨ−１であるかによって、処理中のブロックが最も右にあるブロックであるかを特定してもよい。同様に、ブロックの垂直方向における初期化条件であるＶmaxがＶ−１であるかによって、処理中のブロックが最も下にあるブロックであるかを特定してもよい。また、これらにより、ＵmaxがＨ−１であって、ＶmaxがＶ−１である場合に、１つの画像に対して処理すべき最後のブロックを特定してもよい。このようにしてブロック位置を特定する場合は、以下の説明におけるＢＨＣ及びＢＶＣを用いる必要はない。
【００７２】
まず、第２のセレクタ２０９は、先頭ブロックの処理開始前に、定数発生器２０２の出力を選択してＢＨ＝０に対応するａ×０＝０を第２のフリップフロップ２０７に入力する（Ｓ３０１）。そして、第２のフリップフロップ２０７は０を出力する（Ｓ３０２）。同様に、第２のセレクタ３０９も、定数発生器３０２の出力を選択して「０」を第２のフリップフロップ３０７へ出力し（Ｓ３０１）、第２のフリップフロップ３０７も０を出力する（Ｓ３０２）。このとき、シフト器２０６及び３０６が出力する値も共に０となる。１サイクル後には、シフト器２０６は最小座標値ｕ＝０とする時のａ×０＝０を、シフト器３０６は最小座標値ｖ＝０とする時のｂ×０＝０を、それぞれ出力する状態となる。また、水平方向ブロックカウンタＢＨＣ及び垂直方向ブロックカウンタＢＶＣを０に初期化する（Ｓ３０１）。
【００７３】
続いて、垂直カウント値がＶmaxであるかを判定する（Ｓ３０３）。垂直カウント値がＶmaxでない場合（Ｓ３０３でＮｏ）、第２のセレクタ２０９及び３０９とは、それぞれ第２のフリップフロップ２０７及び３０７の出力を選択する（Ｓ３０６）。すなわち、第２のフリップフロップ２０７及び３０７は、共に、前のサイクルと同じ値を維持する（Ｓ３０７）。
【００７４】
垂直カウント値がＶmaxである場合（Ｓ３０３でＹｅｓ）、現在処理中のブロックについて、最終行の処理を開始していることとなる。このため、第１のセレクタ２０５は、シフト器２０６が出力する値をすでに参照しており（図９のＳ２０７）、次のブロックの処理に移るまで（図９においてＳ２０１に移行するまで）シフト器２０６が出力する値を参照することはない。同様に、第１のセレクタ３０５はシフト器３０６が出力する値を次のブロックの処理に移るまで参照することはない。したがって、この時点において、シフト器２０６及び３０６が出力する値の更新を行う。
【００７５】
更新においては、まず、現在処理中のブロックが水平方向において最も右のブロックであるか、すなわちＢＨＣがＢＨmaxであるかを判定する（Ｓ３０４）。ＢＨＣがＢＨmaxでない場合（Ｓ３０４でＮｏ）、次に処理を行うブロックは処理中のブロックの右隣のブロックである。
【００７６】
このため、第２のセレクタ２０９は第２の加算器２０８の出力を選択し、その値を第２のフリップフロップ２０７に出力する（Ｓ３０８）。また、水平方向ブロックカウンタＢＨＣに１を加える。ここで、第２の加算器２０８では、要素発生器２０１の出力値を第２のフリップフロップ２０７の出力値に加算する。このため、現在の第２のフリップフロップ２０７の出力値がａ×ＢＨである場合、ａ×ＢＨ＋ａ＝ａ×（ＢＨ＋１）となり、ＢＨを１増加させた時のａ×ＢＨの値が出力される。一方、次に処理を行うブロックは処理中のブロックの右隣のブロックであるため、垂直方向におけるブロック位置は変動しない。このため、第２のセレクタ３０９は、第２のフリップフロップ３０７の出力を選択し、フィードバックループを構成する（Ｓ３０８）。そして、第２のフリップフロップ２０７は第２の加算器２０８からの値を、第２のフリップフロップ３０７は前のサイクルと同じ値を、それぞれシフト器２０６及び３０６へ出力する（Ｓ３０９）。以後、ＢＨＣがＢＨmaxとなるまで（Ｓ３０４でＹｅｓとなるまで）、上述の処理を繰り返す。なお、上述の通り、Ｓ３０４の処理において、ＢＨＣを用いずに、ＵmaxがＨ−１であるかを判定するようにしてもよい。
【００７７】
ＢＨＣがＢＨmaxである場合（Ｓ３０４でＹｅｓ）、続いて、ＢＶＣがＢＶmaxであるかを判定する（Ｓ３０５）。ＢＶＣがＢＶmaxでない場合（Ｓ３０７でＮｏ）、次に処理するブロックは、現在処理中のブロックより１行下の左端のブロックである。
【００７８】
このため、第２のセレクタ２０９は、定数発生器２０２の出力を選択して、ＢＨ＝０とする時のａ×０＝０を第２のフリップフロップ２０７に入力する（Ｓ３１０）。これによって右端のブロックから左端のブロックの処理へ移行する。同時に、水平方向ブロックカウンタＢＨＣの値を０に初期化する（Ｓ３１０）。一方、第２のセレクタ３０９は第２の加算器３０８の出力を選択して、その値を第２のフリップフロップ３０７へ出力し、垂直方向ブロックカウンタＢＶＣに１を加える（Ｓ３１０）。ここで、第２の加算器３０８では、要素発生器３０１の出力値を第２のフリップフロップ３０７の出力値に加算する。このため、例えば第２のフリップフロップ３０７の出力値がｂ×ＢＶである場合、ｂ×ＢＶ＋ｂ＝ｂ×（ＢＶ＋１）となり、ＢＶを１増加させた時のｂ×ＢＶの値が出力される。第２のフリップフロップ２０７及び３０７は、定数発生器２０２の出力値と第２の加算器３０８の出力値とをそれぞれ出力する（Ｓ３１１）。以後、ＢＶＣがＢＶmaxとなるまで（Ｓ３０５でＹｅｓとなるまで）、上述の処理が繰り返される。そして、ＢＶＣがＢＶmaxである場合（Ｓ３０５でＹｅｓ）、１画像分の全ブロックについて、第１のセレクタ２０５及び３０５がそれぞれシフト器２０６及び３０６の出力の選択を完了していると判定できる。このため、Ｓ３０１に戻り、次の画像の処理を待ち受ける。なお、上述の通り、Ｓ３０５の処理において、ＢＶＣを用いずに、ＶmaxがＶ−１であるかを判定するようにしてもよい。
【００７９】
なお、Ｓ３０２、Ｓ３０７、Ｓ３０９及びＳ３１１における第２のフリップフロップ２０７及び３０７による値の出力は、実際には、それぞれ、Ｓ３０１、Ｓ３０６、Ｓ３０８及びＳ３１０を実行したサイクルの次のサイクルで実行される。また、Ｓ３０２、Ｓ３０７、Ｓ３０９及びＳ３１１の出力は、Ｓ３０３からＳ３０６、Ｓ３０８及びＳ３１０の処理と同一サイクルで実行される。すなわち、図面では説明の簡単のため、Ｓ３０２、Ｓ３０７、Ｓ３０９及びＳ３１１の後にＳ３０３が実行されるが、実際には、Ｓ３０２、Ｓ３０７、Ｓ３０９及びＳ３１１と、Ｓ３０３との処理は同一サイクルにおいて実行される。すなわち、Ｓ３０２、Ｓ３０７、Ｓ３０９及びＳ３１１の出力と同一サイクルにおいて、第２のセレクタ２０９及び３０９は、その次のサイクルで第２のフリップフロップ２０７及び３０７が出力すべき値の選択を実行する。
【００８０】
以上のようにして、水平方向処理部１０１−１〜１０１−３の第１のフリップフロップ２０３は、ブロック単位で、各ブロック内をラスタースキャン順に、それぞれ、乗算式ａ×ｕ、ｄ×ｕ、ｇ×ｕの値を出力する。同様に、垂直方向処理部１０２−１〜１０２−３の第１のフリップフロップ３０３は、ブロック単位で、各ブロック内をラスタースキャン順に、それぞれ、乗算式ｂ×ｖ、ｅ×ｖ、ｈ×ｖの値を出力する。本実施形態によれば、射影変換画像をブロック単位で出力することができるため、後段の画像符号化処理部との間のバッファメモリを削減することが可能となる。
【００８１】
なお、上述の説明では、定数発生器２０２及び３０２は、共に０を出力したが、これは、最も左上のブロックから処理を開始するためにそうしたものであり、これに限られない。例えば、最も左上のブロック以外の所定のブロックから処理を開始する場合は、定数発生器２０２及び３０２は、そのブロックを指定する整数ＢＨ及びＢＶに、それぞれ逆行列の行列要素を乗じた値を保持してもよい。そして、第２の加算器２０８及び３０８は、右隣又は下隣のブロックの処理を行う場合は、その値に行列要素を加算し、左隣又は上隣のブロックの処理を行う場合は、その値から行列要素を減算する加減算器であってもよい。
【００８２】
また、上述の説明では、水平方向及び垂直方向の両方において画像を分割したが、片方だけであってもよい。すなわち、水平方向のみ画像を分割してＢＶは常に０であってもよいし、垂直方向のみ画像を分割してＢＨが常に０であってもよい。このように、ブロックへの分割は自在に行うことができ、後に続く処理に応じて変更されてもよい。
【００８３】
＜＜実施形態３＞＞
図１１は本実施形態に係る画像処理装置の構成を示すブロック図である。図１２は本実施形態に係る画像処理装置の画像変換の一例である。画像処理装置１は、変換対象画像を非線形変換した非線形変換画像上の、任意の四辺形部分（網掛け部）の４頂点を長方形の４頂点に一致するように正則行列である変換行列によって変換して変換画像を生成する。正則行列である変換行列による変換をその一例である射影変換として、変換画像を射影変換画像として、非線形変換をその一例であるレンズ歪補正として、非線形変換画像をレンズ歪補正画像として、以下説明する。レンズ歪補正とはレンズの光学特性によって生じる変換対象画像上のレンズ歪を除去する補正である。
【００８４】
画像処理装置１は、図１の構成に加えて、レンズ歪補正部１５をさらに備える。ここで、画像処理装置１によって生成する射影変換画像の各画素の位置を座標値（ｕ，ｖ）で示し、中間段階であるレンズ歪補正画像の各画素の位置を座標値（ｘ，ｙ）で示す。なお、座標値（ｕ，ｖ）と座標値（ｘ，ｙ）は、実施形態１及び２における、射影変換後の画像における第２の座標値と、変換前の画像における第１の座標値にそれぞれ対応する。そして、本実施形態では、第１の座標値を得るための非線形変換前の画像である変換対象画像についての各画素の位置である、第３の座標値（ｘd，ｙd）を取り扱う。すなわち、第２の座標値から第１の座標値を求め、第１の座標値から第３の座標値を取得する。これにより、第３の座標値と第２の座標値との関連付けが行われる。そして、この第３の座標値と非線形変換前の画像とから、補間に必要な画素値を抽出し、変換後の画素値を算出して出力する。
【００８５】
本実施形態においても、射影変換画像の画素数を水平方向にＨ画素とし、垂直方向にＶ画素とする。また、逆射影変換部１１、補間処理部１３の構成及び動作は、実施形態１又は実施形態２と同じであるため説明を省略する。
【００８６】
画像取得部１２は、レンズ歪補正部１５が算出する第３の座標値（ｘd，ｙd）を元に、変換対象画像を保存している不図示のメモリに対してアドレスを発行して、画像データを読み出す。制御部１４は、各機能部の状態を表す状態信号を受信して、各機能部を制御する制御信号を生成する。
【００８７】
レンズ歪補正部１５は、レンズ歪補正画像の第１の座標値（ｘ，ｙ）上の画素を生成するために必要な変換対象画像上の画素の位置を示す第３の座標値（ｘd，ｙd）を出力する。ここで、図１３にレンズ歪補正での変換処理の詳細を示す。レンズの光学特性によって生じるレンズ歪がない場合は、図１３のレンズ歪補正画像が撮影画像となる。距離ｒは第１の座標値（ｘ，ｙ）と中心画素との距離を示す。しかし、レンズ歪がある場合は、図１３に示すように第１の座標値（ｘ，ｙ）に対応する第３の座標値（ｘd，ｙd）と中心画素との距離がｒ´に変わり、画像が歪む。以下の式（３）に、歪み係数をｋとして、ｒとｒ´の関係を表す。
【００８８】
ｒ´＝ｋ×ｒ  …（３）
なお、歪み係数ｋは中心画素との距離に応じて異なる。
【００８９】
このレンズ歪を除去するために、レンズ歪補正画像の中心座標値と第１の座標値（ｘ，ｙ）間の距離ｒに対応する距離ｒ´から、第３の座標値（ｘd，ｙd）を算出する。例えば距離ｒと距離ｒ´の関係、又は距離ｒと歪み係数ｋの関係をルックアップテーブルに予め登録しておき、これを参照して第３の座標値を取得する。
【００９０】
続いて、本実施形態における処理の流れを説明する。まず、逆射影変換部１１は制御部１４の制御に基づいて、射影変換画像の第２の座標値（ｕ，ｖ）に対する射影変換前の画像、すなわちレンズ歪補正画像における第１の座標値（ｘ，ｙ）を順次出力する。次に、レンズ歪補正部１５は逆射影変換部１１が出力する第１の座標値（ｘ，ｙ）を入力して、第３の座標値（ｘd，ｙd）を順次出力する。これにより、射影変換画像の第２の座標値（ｕ，ｖ）と、第３の座標値（ｘd，ｙd）とが関連付けられる。
【００９１】
画像取得部１２は、この第３の座標値（ｘd，ｙd）に基づいて、補間処理部１３で使用する画素データが保存されているメモリアドレスをメモリに送信して入力画像データを読み出す。そして、画像取得部１２は、補間処理部１３へ画素データを出力する。本実施形態ではバイリニア補間処理を行うため、座標値（ｘd，ｙd）周辺の４画素分の画素データを出力する。最後に、補間処理部１３は、座標値（ｘd，ｙd）の小数部分と画素データとを用いてバイリニア補間処理を行う。この処理により、第２の座標値（ｕ，ｖ）における、射影変換画像の画素値が算出され、補間処理部１３は、この射影変換画像を出力画像データとして出力する。
【００９２】
なお、本発明の画像処理装置１の非線形変換は、レンズ歪補正部１５による変換で説明したが、他の非線形変換を用いる、または複数の非線形変換を逆射影変換部１１と画像取得部１２の間で行うように構成してもよい。
【００９３】
本実施形態によれば、非線形変換が含まれる画像処理に対しても、参照すべき座標を容易に求めることができる。また、射影変換について、乗算回数を少なく抑えることができるため、全体の処理にかかる時間を十分低く抑えることが可能となる。
【００９４】
＜＜その他の実施形態＞＞
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005914045.tif 000004
【図２】
0005914045.tif 000005
【図３】
0005914045.tif 000006
【図４】
0005914045.tif 000007
【図５】
0005914045.tif 000008
【図６】
0005914045.tif 000009
【図７】
0005914045.tif 000010
【図８】
0005914045.tif 000011
【図９】
0005914045.tif 000012
【図１０】
0005914045.tif 000013
【図１１】
0005914045.tif 000014
【図１２】
0005914045.tif 000015
【図１３】
0005914045.tif 000016