本発明では画像を透視変換するため、上記式(1)および式(2)に示したように、二次元図形の透視変換式が用いられる。当該透視変換式の分子は、アフィン変換式である。アフィン変換は、線形変換と平行移動を合成した変換方式であり、変換前の図形と変換後の図形とで幾何学的性質が保たれる。たとえば、変換前の図形で直線上に並ぶ点は変換後も直線上に並び、平行線は変換後も平行線である。
上記透視変換式の分母は、入力画像の画素の座標(x, y)を変数とする一次方程式で定義される。これにより、遠くの図形が小さく、近くの図形が大きく投影される。このように、透視変換では、ワールド座標系の平面図形を、視点座標系の平面図形に変換することが可能である。すなわち、ワールド座標系の図形が形成されている平面に対して、傾いている平面に当該図形を変換しつつ複写することが可能である。
図1は、透視変換前の入力画像の一例を示す図である。図2は、図1の入力画像に対する、透視変換後の出力画像を示す図である。図1に示す透視変換前の入力画像に描かれている頂点A、B、C、Dにより形成される四角形は、左側が大きく、右側が小さい。すなわち、右側に奥行きを持つ四角形である。図2に示す四角形は、図1に示す四角形を透視変換することにより、奥行きのない四角形に変換されたものである。なお、図2に示す出力画像内の黒色部分は、図1に示す入力画像の領域外の座標に対応するため、画素値を補償することができない部分である。
透視変換は、入力画像の各画素の座標(x, y)を出力画像の各画素の座標(X, Y)に移動させることによって行われる。より具体的には、まず、変換行列を求める。次に、順変換ではその変換行列を用いて、入力画像の各画素の座標(x, y)に対応する、出力画像の各画素の座標(X, Y)を算出する(上記式(3)〜式(5)参照)。次に、出力画像の算出された座標(X, Y)の画素値として、入力画像の座標(x, y)の画素値を割り当てる。出力画像の算出された座標(X, Y)のほとんどは小数を含む値となる。
デジタル画像の座標は整数値で表現される必要があるため、出力画像がデジタル画像である場合、出力画像の算出された座標(X, Y)の画素値をもとに、出力画像の整数の座標(X, Y)の画素値を補間演算により算出する。
また、逆変換では上記変換行列を用いて、出力画像の各画素の座標(X, Y)に対応する、入力画像の各画素の座標(x, y)を算出する(上記式(8)〜式(10)参照)。次に、入力画像の算出された座標(x, y)の画素値を、出力画像の座標(X, Y)の画素値として割り当てる。入力画像の算出された座標(x, y)のほとんどは小数を含む値となる。
デジタル画像の座標は整数値で表現されるため、小数を含む座標を参照することはできない。入力画像がデジタル画像である場合、入力画像の整数の座標(x, y)の画素値をもとに、入力画像の算出された座標(x, y)の画素値を補間演算により算出する。その補間演算により算出された画素値が出力画像の座標(X, Y)の画素値として割り当てられる。
上述した補間演算には、線形補間法(たとえば、バイリニア法)や三次補間法(たとえば、バイキュービック法)などを採用することができる。
以下、本発明の実施の形態を、逆変換を用いた例をもとに説明する。なお、本発明の実施の形態を、順変換を用いても実現可能なことは、当業者に理解されるところである。また、以下の説明では、入力画像は透視変換前の画像を指し、出力画像は透視変換後の画像を指すとする。
(実施の形態1)
図3は、本発明の実施の形態1に係る画像処理装置100の構成を示すブロック図である。画像処理装置100は、第1記憶部101、変換行列算出部102、座標算出部103、画素補間部104および第2記憶部105を備える。変換行列算出部102は、対応点座標算出部121および連立方程式算出部122を含む。座標算出部103は、区間設定部131、代表画素座標算出部132および非代表画素座標算出部137を含む。
図4は、本発明の実施の形態1に係る画像処理装置100の代表画素座標算出部132の構成を示すブロック図である。代表画素座標算出部132は、先頭中間値算出部133、中間値増分値算出部134、非先頭中間値算出部135および最終値算出部136を含む。
図3および図4に示した構成は、ハードウェア的には、任意のコンピュータのCPU、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
第1記憶部101には、入力画像が蓄積される。また、変換行列算出用の基準画像が蓄積されてもよい。
変換行列算出部102は、透視変換用の変換行列を算出する。より具体的には、変換行列算出部102は、入力画像内の任意の4点(たとえば、四角形の頂点)の座標と、その4点の座標を移動させるべき出力画像内の4点の座標を特定する。そして、入力画像内の4点の座標と、出力画像内の4点の座標とから連立方程式を導き、この連立方程式を解くことにより変換行列を求める。
以下、さらに具体的に説明する。対応点座標算出部121は、第1記憶部101に蓄積された入力画像または基準画像の特徴点を抽出し、四角形を形成すべき4点の座標を求める。次に、その4点の特徴点に対応すべき、出力画像内の対応点を画素マッチングや勾配法などの手法を用いて特定し、入力画像または基準画像と出力画像において、対応する4点の座標を求める。なお、出力画像内の4点の座標は、事前にまたはリアルタイムに、ユーザ操作に起因して設定されてもよい。すなわち、手動で設定されてもよい。
たとえば、上述した図1に示した入力画像から、図2に示した出力画像に透視変換する場合、図1に示した入力画像内の画素Aの座標(xa, ya)とその移動先の図2に示した出力画像内の画素Aの座標(Xa, Ya)、当該入力画像内の画素Bの座標(xb, yb)とその移動先の当該出力画像内の画素Bの座標(Xb, Yb)、当該入力画像内の画素Cの座標(xc, yc)とその移動先の当該出力画像内の画素Cの座標(Xc, Yc)、および当該入力画像内の画素Dの座標(xd, yd)とその移動先の当該出力画像内の画素Dの座標(Xd, Yd)を求める。
すなわち、歪んだ長方形の頂点を形成する4点を、歪みのない長方形の頂点位置に移動させる。この4点の頂点同士を基礎とする透視変換用の変換行列を算出することにより、入力画像内の歪んだ長方形を、歪みのない長方形に補正することができる。
連立方程式算出部122は、入力画像の内の4点の座標と、それらに対応する出力画像内の4点の座標から8元1次連立方程式を導き、この連立方程式を解くことにより、上記変換行列を求める。上記式(8)〜式(10)の変換行列は、下記式(11)を解くことにより求めることができる。
上記式(11)は、ガウスの消去法などのアルゴリズムを用いて解くことができる。ただし、入力画像内の画素Aの座標(xa, ya)と出力画像内の画素Aの座標(Xa, Ya)とが1対1で対応し、当該入力画像内の画素Bの座標(xb, yb)と当該出力画像内の画素Bの座標(Xb, Yb)とが1対1で対応し、当該入力画像の画素Cの座標(xc, yc)と当該出力画像内の画素Cの座標(Xc, Yc)とが1対1で対応し、および当該入力画像内の画素Cの座標(xd, yd)と当該出力画像内の画素Cの座標(Xd, Yd)とが1対1で対応するものとする。
座標算出部103は、変換行列算出部102で算出された変換行列を用いて、出力画像内の各画素の座標(X, Y)に対応する、入力画像内の各画素の座標(x, y)を算出する。上述したように、透視変換の逆変換では、出力画像内の各画素の座標(X, Y)に対応する、入力画像内の各画素の座標(x, y)のほとんどは小数を含むことになり、小数を含む画素の座標(x, y)は、整数画素の座標(x, y)から補間演算により算出される。この点を捉えて、以下の説明では、適宜、出力画像内の各画素の座標(X, Y)に対応する、入力画像内の各画素の座標(x, y)を補間座標(x, y)と呼ぶ。
上述したように、出力画像内の各画素ごとに上記式(8)〜式(10)に示された演算を行うことにより、補間座標(x, y)を算出することができる。その際、画素ごとに、加算と乗算を6回、除算を2回行う必要があり、ハードウェアへの実装を考慮すると、非常に演算コストのかかる処理となる。そこで、本実施の形態では演算量を削減するため、画素ごとに乗算や除算を行わずに、補間座標(x, y)を算出する手法を用いる。
以下、より具体的に説明する。区間設定部131は、出力画像内の各ラインを、それぞれ同じ画素数を含む複数の区間に分割する。区間設定部131は、分割した各区間の先頭画素を代表画素に設定する。
図5は、出力画像(1920×1080)を区間分割する一例を示す図である。ここでは、各水平ラインが256画素ごとに区切られ、各水平ラインに七つの区間が設定される。なお、一区間の幅N(Nは水平方向の画素数)は、256画素に限定されないが、128画素や512画素など、二の乗数の値に設定されることが好ましい。
以下の説明では、画像の左上隅の座標を(0, 0)とし、水平方向で左から右を主走査方向、垂直方向で上から下を副走査方向とする。さらに、各ラインの最初の区間を区間0とし、その区間の区間インデックスiを0とする。この区間0の開始点のx座標の値は0である。その次の区間を区間1とし、その区間の区間インデックスiを1とする。この区間1の開始点のx座標の値は256である。区間インデックスiの区間の開始点のx座標は、(N×i)である。
図6は、一区間の画素数が256の場合における、各区間における区間インデックスと開始点のx座標をまとめた図である。なお、図5に示した出力画像では、区間7は実際には128画素(=1920−1792)しか存在しないが、本実施の形態に係る座標の計算では、処理を単純化するため、区間7も仮想的に他の区間0〜6と同様に256画素存在するものとして計算する。すなわち、全区間の画素数を同一にすることにより、処理を単純化し、演算量の削減に繋げている。また、区間8には画素が存在しないが、区間8の開始点のx座標の値を2048とする。これにより、区間7も区間0〜区間6と同様の方法で、座標を算出することができる。
代表画素座標算出部132は、出力画像内の各ラインに複数設定された代表画素の座標に対応すべき入力画像内の画素の座標を、透視変換用の変換式を用いて算出する。上述した例では、代表画素座標算出部132は、出力画像内の各ラインにおける各区間の開始点の座標に対応すべき、入力画像内の補間座標を算出する。
以下、より具体的に説明する。先頭中間値算出部133は、出力画像の各ラインごとに、先頭区間およびその次の区間の二つの代表画素の座標に対応すべき入力画像内の二つの画素の座標を求めるための、テンポラル値(一時的な値)である、x座標の中間値、y座標の中間値およびそれら中間値を最終値に変換するための変換値を上記変換式を用いてそれぞれ算出する。以下適宜、x座標の中間値、y座標の中間値および当該変換値をそれぞれx’, y’, wと表記する。上記式(8)に示したように、x’はAX+BY+C(以下、第1の一次方程式と表記する)により算出され、 y’はDX+EY+F(以下、第2の一次方程式と表記する)により算出され、およびwはPX+QY+R(以下、第3の一次方程式と表記する)により算出される。
中間値増分値算出部134は、先頭中間値算出部133により算出された、二種類のx’, y’, wのそれぞれの差分を算出して、区間単位のx’の増分値、y’の増分値、およびwの増分値を求める。
非先頭中間値算出部135は、出力画像の各ラインごとに、先頭中間値算出部133により算出された、先頭区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, w、ならびに中間値増分値算出部134により算出された、x’の増分値、y’の増分値、およびwの増分値をもとに、先頭区間以外の区間のそれぞれの代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wをそれぞれ算出する。
より具体的には、ラインごとに、先頭区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wのそれぞれに、x’の増分値、y’の増分値、およびwの増分値をそれぞれ主走査方向に順次加算することにより、先頭区間に後続する区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wを順次算出することができる。なお、先頭区間の次の区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wは、先頭中間値算出部133により算出された値をそのまま、当てはめてもよい。
最終値算出部136は、出力画像の各代表画素の座標に対応すべき入力画像内の各画素の座標を求めるためのx’, y’, wをもとに、当該入力画像内の各画素のx座標およびy座標の最終値を算出する。以下適宜、x座標およびy座標の最終値をそれぞれx, yと表記する。すなわち、代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wごとに、x’/wおよび y’/wを演算することにより、x, yを算出する(上記式(9)、式(10)参照)。
非代表画素座標算出部137は、出力画像の各ラインごとに、隣接する二つの代表画素間に存在する複数の画素の座標にそれぞれ対応すべき入力画像内の複数の画素のそれぞれの補間座標を、当該二つの代表画素の座標に対応すべき入力画像内の二つの画素の補間座標を線形補間して算出する。
以下、より具体的に説明する。座標増分値算出部138は、ある区間の代表画素のx, yとその次の区間の代表画素のx, yとの差分値をそれぞれ算出することにより、ある区間の代表画素とその次の区間の代表画素との間のx, yの増分値を算出する。この代表画素間のx, yの増分値を、各ラインごとに、すべての区間について算出する。座標増分値算出部138は、ある区間のx, yの増分値をその区間の画素数で割ることにより、その区間内における、隣り合う画素間のx, yの増分値を算出する。この画素間のx, yの増分値を、各ラインごとに、すべての区間について算出する。
座標増分値加算部139は、各区間ごとに、代表画素のx, yに、画素間のx, yの増分値を主走査方向に順次加算することにより、各区間のすべての画素のx, yを算出する。以上の処理により、出力画像内の全画素の座標に対応する、入力画像内の補間座標(x, y)を算出する。
以下、実施の形態1に係る代表画素座標算出部132および非代表画素座標算出部137の処理を、上記図5、図6に則した例で説明する。まず、代表画素座標算出部132は、各ラインの各区間の開始点のx’, y’, wを算出する。その際、全区間の開始点のx’, y’, wを上記式(8)を用いて算出するのではなく、各ラインごとに、最初の区間の開始点(0, Y)とその次の区間の開始点(256, Y)のx’, y’, wのみを算出する。すなわち、先頭中間値算出部133は、各ラインごとに、最初の区間の開始点(0, Y)とその次の区間の開始点(256, Y)のx’, y’, wを上記式(8)を用いて算出する。
中間値増分値算出部134は、最初の区間の開始点(0, Y)のx’, y’, wと、その次の区間の開始点(256, Y)のx’, y’, wとの差分値をそれぞれ算出する。これにより、ある区間の開始点(X, Y)のx’, y’, wと、その次の区間の開始点(X+256, Y)のx’, y’, wとの間の、x’の増分値Δx’hi、y’の増分値Δy’ hi、およびwの増分値Δw hiを求める。
非先頭中間値算出部135は、ある区間の開始点(X, Y)のx’, y’, wに、x’の増分値Δx’hi、y’の増分値Δy’ hi、およびwの増分値Δw hiをそれぞれ加算することにより、その次の区間の開始点(X+256, Y)のx’, y’, wを算出する。たとえば、区間1の開始点のx’, y’, wにそれぞれの増分値Δx’hi, Δy’ hi, Δw hiを加算することにより、区間2の開始点のx’, y’, wを算出する。このようにして、本実施の形態では乗算回数を減らしている。
最終値算出部136は、各区間の開始点のx’, y’をそれぞれwで割り、各区間の開始点のx, yを算出する(上記式(9)、式(10)参照)。
座標増分値算出部138は、ある区間の開始点のx, yとその次の区間の開始点のx, yとの差分値をそれぞれ算出することにより、ある区間の開始点とその次の区間の開始点との間のx, yの増分値Δxi, Δyiを算出する。この区間単位のx, yの増分値Δxi, Δyiを、各ラインごとに、全区間について算出する。座標増分値算出部138は、ある区間のx, yの増分値Δxi, Δyiをその区間の幅Nで割ることにより、その区間内における、ある画素のx, yからその次の画素のx, yへの増分値Δx, Δyを算出する。この画素単位のx, yの増分値Δx, Δyを、各ラインごとに、全区間について算出する。
ここで、各区間の画素数が二の乗数に設定されている場合、割り算を、ビットシフトや指数の減算など、負荷が小さい演算処理で実現することができる。たとえば、区間の幅Nを256とした場合、上記開始点間のx, yの増分値Δxi, Δyiを256で割る代わりに、整数演算や固定小数点演算では、それらの増分値Δxi, Δyiをそれぞれ右に8ビットシフトさせるだけでよい。また、IEEE754方式などによる浮動小数点演算では、指数値から8を引くだけでよい。なお、指数部は2を基数としている。
座標増分値加算部139は、各区間ごとに、開始点のx, yに、画素単位のx, yの増分値Δx, Δyを順次加算することにより、各区間の全画素のx, yを算出する。以上の処理により、出力画像内の全画素の座標に対応する、入力画像内の補間座標(x, y)を算出する。
上記式(9)、式(10)に示したように、x, yはwで割ることにより算出されるため、x, yの増分値Δx, Δyは画素ごとに異なる値となる。これに対し、本実施の形態では、ラインごとに区間を設定し、区間内では同一の増分値とすることにより、画素ごとの演算としては増分値Δx, Δyの加算のみでx, yを算出することができる。したがって、画素ごとに乗算、除算を行う手法と比較して、演算量を削減することができる。
画素補間部104は、座標算出部103により算出された、入力画像内の各補間座標(x, y)の画素値を、入力画像内の整数座標の画素値から線形補間法(たとえば、バイリニア法)などの画素補間法を用いて算出する。そして、算出した入力画像内の各補間座標(x, y)の画素値を、出力画像の対応する座標の画素値にそれぞれ割り当てる。このように生成された出力画像は、第2記憶部105に一時記憶され、必要なタイミングで外部に出力される。
図7は、実施の形態1に係る画像処理装置100の処理手順を示すフローチャートである。まず、区間設定部131は、出力画像の各ラインを分割すべき区間の幅Nを設定する(S101)。ここでは、N=256とする。このとき、各区間における区間インデックスiと開始点のx座標を、上記図6に示した値に設定する。続いて、変換行列算出部102は、上述した手法を用いて、上記式(8)に示した変換式内の変換行列を算出する(S102)。続いて、出力画像のy座標の値Yが0に設定される(S103)。続いて、先頭中間値算出部133は、各ラインにおけるx’, y’, wの初期値x’0, y’ 0, w0を計算し、中間値増分値算出部134は、区間単位のx’, y’, wの増分値Δx’hi, Δy’ hi, Δw hiを計算する(S104)。
図8は、図7のステップS104の詳細な処理手順を示すフローチャートである。まず、先頭中間値算出部133は、各ラインごとに、上記式(8)を用いて、最初の区間の開始点(0, Y)のx’, y’, wを算出する(S201)。それとともに、各ラインごとに、上記式(8)を用いて、その次の区間の開始点(256, Y)のx’, y’, wも算出する(S202)。続いて、中間値増分値算出部134は、次の区間の開始点(256, Y)のx’, y’, wから最初の区間の開始点(0, Y)のx’, y’, wをそれぞれ減算し、ある区間の開始点(X, Y)のx’, y’, wからその次の区間の開始点(X+256, Y)のx’, y’, wへの増分値Δx’hi, Δy’ hi, Δw hiを算出する(S203)。
図7に戻り、先頭中間値算出部133は、最初の区間の開始点(0, Y)のx’, y’, wを各ラインのx’, y’, wの初期値x’0, y’ 0, w0に設定する(S105)。続いて、先頭中間値算出部133は、区間インデックスiを0に設定する(S106)。続いて、非先頭中間値算出部135は、先頭区間以外の各区間の開始点のx’, y’, wを算出し、最終値算出部136は、各区間におけるx, yの初期値x0i, y0iを算出し、座標増分値算出部138は、画素単位のx, yの増分値Δxh, Δyhを計算する(S107)。
図9は、図7のステップS107の詳細な処理手順を示すフローチャートである。まず、区間インデックスiが0の場合(S301のN)、ステップS302に進み、区間インデックスiが1以上の場合(S301のY)、ステップS303に進む。ステップS302では、最終値算出部136は、各ラインごとに、上記式(9)、式(10)により、最初の区間の開始点(0, Y)のx’, y’をそれぞれwで割り、最初の区間の開始点のx, yを算出し、ステップS303に進む。
ステップS303では、非先頭中間値算出部135は、現区間のx’, y’, wにそれぞれの増分値Δx’hi, Δy’ hi, Δw hiを加算し、次の区間の開始点(X+256, Y)のx’, y’, wを算出する。続いて、最終値算出部136は、次の区間の開始点(X+256, Y)のx’, y’ をそれぞれwで割り、次の区間の開始点(X+256, Y)のx, yを算出し、次の区間のx, yの初期値とする(S304)。座標増分値算出部138は、現区間の次の区間のx, yの初期値x0i, y0iから現区間のx,yの初期値x0i, y0iをそれぞれ減算することにより、区間単位のx,yの差分を算出する(S305)。続いて、座標増分値算出部138は、区間単位のx, yを現区間の画素数を除算することにより、画素単位のx, yの増分値Δxh, Δyhを算出する(S306)。この除算は、ビットシフトや指数の減算などにより実行する。
図7に戻り、座標増分値加算部139は、各区間ごとの開始点のx座標の値Xを出力画像のx座標の値Xに設定する(S108)。続いて、座標増分値加算部139は、各画素のx, yを算出する(S109)。
図10は、ステップS109の詳細な処理手順を示すフローチャートである。まず、座標増分値加算部139は、出力画像のx座標の値Xが、現区間のXの初期値の場合(S401のN)、ステップS402に進み、座標増分値加算部139は、現区間の開始点(0, Y)にマッピングされるx, yを初期値に設定する。ステップS401にて、出力画像のx座標の値Xが現区間のXの初期値より大きい場合(S401のY)、ステップS403に進み、座標増分値加算部139は、x, yにそれぞれの増分値Δxh, Δyhを加算する。
図7に戻り、画素補間部104は、算出された補間座標(x, y)に相当する画素値を、入力画像から線形補間法などの画素補間法を用いて算出し、出力画像の対応する画素の座標(X,Y)の画素値に割り当てる(S110)。続いて、出力画像のx座標の値Xが一つ、インクリメントされる(S111)。現区間内の全画素の処理が終了するまで(S112のN)、ステップS109〜S111までの処理を繰り返す。現区間内の全画素の処理が終了したら(S112のY)、区間インデックスiが一つ、インクリメントされる(S113)。
当該ライン内の全区間の処理が終了するまで(S114のN)、ステップS107からS113までの処理を繰り返す。当該ライン内の全区間の処理が終了したら(S114のY)、出力画像のy座標の値Yが一つ、インクリメントされる(S115)。全ラインの処理が終了するまで(S116のN)、ステップS104からS115までの処理を繰り返す。全ラインの処理が終了したら(S116のY)、本画像処理手順は終了となる。
以上説明したように実施の形態1によれば、入力画像を透視変換して出力画像を生成する際の演算量を低減することができる。すなわち、出力画像内の代表画素のみ、正規に算出し、非代表画素を線形補間により算出することにより、出力画像内の全画素を正規に算出する場合より、大幅に演算量(とくに、除算の回数)を削減することができる。また、代表画素間の区間の画素数を二の乗数に設定することにより、乗算および除算を、ビットシフトや指数の加減算で実現することができ、乗算および除算の回数を削減することができる。これにより、ハードウェアへの実装も容易になる。
また、一区間の幅を調整可能なことにより、演算量と画質のバランスを調整することができる。区間の幅を広げるほど、演算量は低減されるが、線形補間される画素が多くなるため画質が低下する。一方、区間の幅を狭めるほど、演算量は増大されるが、正規に算出される画素が多くなるため画質が向上する。このように、演算量と画質とはトレードオフの関係にある。
(実施の形態2)
図11は、本発明の実施の形態2に係る画像処理装置100の代表画素座標算出部132の構成を示すブロック図である。代表画素座標算出部132は、初期中間値設定部533、ライン中間値算出部534、区間中間値算出部535および最終値算出部136を含む。なお、実施の形態2に係る代表画素座標算出部132以外の構成要素は、実施の形態1と同様であるため、それらの説明は省略する。
実施の形態2では、代表画素座標算出部132は、先頭ラインの先頭区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wを変換式(上記式(8)参照)の定数を用いて求める。また、代表画素座標算出部132は、その他の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wを当該変換式の係数から求められる、それらの主走査方向および副走査方向の増分値を、順次加算することにより求める。また、代表画素座標算出部132は、出力画像内の各代表画素の座標に対応すべき入力画像内の各画素の座標を求めるためのx’, y’, wをもとに、当該入力画像内の各画素のx座標およびy座標の最終値を求める。
以下、より具体的に説明する。初期中間値設定部533は、先頭ラインの先頭区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wのそれぞれに、第1の一次方程式の定数C、第2の一次方程式の定数Fおよび第3の一次方程式の定数Rのそれぞれを設定する。
上述したように、第1の一次方程式は、X,Yを変数として含み、x’を算出するための式である(上記式(6)、式(8)参照)。第2の一次方程式は、X,Yを変数として含み、y’を算出するための式である(上記式(7)、式(8)参照)。第3の一次方程式は、X,Yを変数として含み、wを算出するための式である(上記式(6)〜式(8)参照)。
ライン中間値算出部534は、先頭ラインの先頭区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wのそれぞれに、第1の一次方程式のy座標変数の係数B、第2の一次方程式のy座標変数の係数Eおよび第3の一次方程式のy座標変数の係数Qのそれぞれを、副走査方向に順次加算する。これにより、先頭ライン以外のラインの先頭区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wをそれぞれ算出する。
区間中間値算出部535は、ラインごとに、先頭区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wのそれぞれに、第1の一次方程式のx座標変数の係数Aに一区間の画素数Nを掛けた値、第2の一次方程式のx座標変数の係数Dに一区間の画素数Nを掛けた値および第3の一次方程式のx座標変数の係数Pに一区間の画素数Nを掛けた値のそれぞれを、主走査方向に順次加算する。これにより、先頭区間以外の区間の代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wをそれぞれ算出する。
最終値算出部136は、初期中間値設定部533、ライン中間値算出部534および区間中間値算出部535により求められた各代表画素の座標に対応すべき入力画像内の画素の座標を求めるためのx’, y’, wをもとに、x, yを算出する。
以下、実施の形態2に係る代表画素座標算出部132の処理を、上記図5、図6に則した例で説明する。初期中間値設定部533およびライン中間値算出部534は、出力画像の各ラインにおける開始点(すなわち、各ラインの最も左の画素)(0, Y)のx’, y’, wの初期値x’0, y’ 0, w0をそれぞれ算出する。すなわち、各ラインにおけるx’, y’, wの初期値x’0, y’ 0, w0を算出する。この際、実施の形態1では、上記式(8)用いて各ラインにおけるx’, y’, wの初期値x’0, y’ 0, w0を算出した。この点、実施の形態2では、あるラインにおけるx’, y’, wの初期値x’0, y’ 0, w0に、その次のラインへのx’, y’, wの増分値Δx’v, Δy’ v, Δw vをそれぞれ加算することにより、その次のラインにおけるx’, y’, wの初期値x’0, y’ 0, w0を求める。これにより、実施の形態2では実施の形態1より乗算の回数を削減することができる。
なお、初期中間値設定部533は、全ラインのx’, y’, wの初期値x’0, y’ 0, w0の初期値、すなわち、最初のラインのx’, y’, wの初期値x’0, y’ 0, w0に、上記式(8)に示した変換式内の変換行列の3列目の各係数C,F,Rの値をそれぞれ設定する。また、ライン中間値算出部534は、x’, y’, wの増分値Δx’v, Δy’ v, Δw vに、当該変換行列の2列目の各係数B,E,Qの値をそれぞれ用いる。
区間中間値算出部535は、あるラインにおいて、ある区間の開始点(N*i, Y)のx’, y’, wから水平方向に進んだその次の区間の開始点(N*(i+1), Y)のx’, y’, wへの増分値Δx’hi, Δy’ hi, Δw hiを算出する。区間中間値算出部535は、これら増分値Δx’hi, Δy’ hi, Δw hiを次のように算出する。すなわち、上記変換行列の1列目の各係数A, D, Pの値のそれぞれに、区間の幅N(画素数)を掛けて算出する。
なお、区間の幅Nに二の乗数が設定されている場合、乗算の代わりに、ビットシフトや指数部の加算により、上記増分値Δx’hi, Δy’ hi, Δw hiを算出することができる。たとえば、区間の幅Nが256に設定されている場合にて、整数演算や固定小数点演算では、数値を左に8ビットシフトさせる。また、IEEE754方式などによる浮動小数点演算では、指数部の値に8を足す。なお、指数部は2を基数としている。
区間中間値算出部535は、出力画像の各区間における開始点(すなわち、各区間の最も左の画素(N*i, Y))のx’, y’, wの初期値x’0i, y’ 0i, w0iをそれぞれ算出する。すなわち、各区間におけるx’, y’, wの初期値x’0i, y’ 0i, w0iを算出する。区間中間値算出部535は、ある区間のx’, y’, wの初期値x’0i, y’ 0i, w0iに、x’, y’, wの増分値Δx’hi, Δy’ hi, Δw hiをそれぞれ加算することにより、その次の区間のx’, y’, wの初期値x’0i, y’ 0i, w0iを算出する。
なお、各ラインの開始点(0, Y)は各ラインの最初の区間の開始点でもある。したがって、各ラインの最初の区間のx’, y’, wの初期値x’0i, y’ 0i, w0iには、各ラインにおけるx’, y’, wの初期値x’0, y’ 0, w0を設定する。もちろん、上記式(8)を用いて行列の積和演算によりx’, y’, wを直接算出してもよいが、本実施の形態では増分値の加算により乗算回数を減らしている。
最終値算出部136は、出力画像の各区間における開始点(すなわち、各区間の最も左の画素(N*i, Y))のx, yの初期値x0i, y0iを算出する。すなわち、各区間におけるx, yの初期値x0i, y0iを算出する。より具体的には、最終値算出部136は、各区間ごとに、上記式(9)、式(10)を用いて、各区間の開始点のx’ 0i, y’ 0iをそれぞれw0iで割り、各区間の開始点のx, yの初期値x0i, y0iを算出する。
図12は、実施の形態2に係る画像処理装置100の処理手順を示すフローチャートである。まず、区間設定部131は、出力画像の各ラインを分割すべき区間の幅を設定する(S501)。ここでは、N=256とする。このとき、各区間における区間インデックスiと開始点のx座標を、上記図6に示した値に設定する。続いて、変換行列算出部102は、上述した手法を用いて上記式(8)に示した変換式内の変換行列を算出する(S502)。続いて、出力画像のy座標の値Yが0に設定される(S503)。これは、画面内の上から0番目のラインの画素を補間することを意味している。
続いて、初期中間値設定部533は、当該変換行列の3列目の係数C,F,Rを、各ラインにおけるx’, y’, wの初期値x’0, y’ 0, w0の、最初のラインの値として設定する(S504)。すなわち、これら係数C,F,Rの値は、最初のラインの最初の区間におけるx', y', wの初期値x’i 0, y’ i 0, wi 0となる。
続いて、ライン中間値算出部534は、ある区間の開始点(N*i, Y)のx', y', wからその次の区間の開始点(N*(i+1), Y)のx', y', wへの増分値Δx’hi, Δy’ hi, Δw hiを算出する(S505)。具体的には、上記変換行列の1列目の各係数A,D,Pに区間の幅Nを掛けることにより算出する。なお、この乗算は、区間の幅Nの値が2の乗数であれば、ビットシフトまたは指数部の加算により演算することができる。
続いて、ライン中間値算出部534は、各ラインにおけるx’, y’, wの初期値x’0, y’ 0, w0を、各ラインの最初の区間のx’, y’, wの初期値x’0i, y’0i, w0iとして設定する(S506)。続いて、区間インデックスiが0に設定される(S507)。続いて、ライン中間値算出部534は、各区間におけるx, yの初期値x0i, y0iを算出し、画素単位でのx, yの増分値Δxh, Δyhを算出する(S508)。このステップS508の詳細な処理手順は、図9に示したフローチャートと同様の処理手順となる。
続いて、座標増分値加算部139は、出力画像のx座標の値Xを、各区間の開始点(N*i, Y)のx座標の値(すなわち、(N*i))に設定する(S509)。続いて、座標増分値加算部139は、各画素のx, yを算出する(S510)。このステップS510の詳細な処理手順は、図10に示したフローチャートと同様の処理手順となる。
続いて、画素補間部104は、算出された補間座標(x, y)に相当する画素値を、入力画像から線形補間法などの画素補間法を用いて算出し、出力画像の対応する画素の座標(X,Y)の画素値に割り当てる(S511)。続いて、出力画像のx座標の値Xが一つ、インクリメントされる(S512)。これは、次に画面の左からX番目の右隣の画素を補間することを意味している。
続いて、現区間内の全画素の処理が終了していなければ(S513のN)、次の画素、すなわち、右隣の画素の処理を開始し(S510)、現区間内の全画素の処理が終了するまで、ステップS510からS512までの処理を繰り返す。現区間内の全画素の処理が終了したら(S513のY)、区間インデックスiが一つ、インクリメントされる(S514)。これは、次に画面の左からX番目の区間の右隣の区間を補間することを意味している。
続いて、区間中間値算出部535は、次の区間の演算を行うために、次の区間のx’, y’, wの初期値x’ ni, y’ ni, wniを、x’0i, y’0i, w0iに設定する(S515)。現ライン内の全区間の処理が終了していなければ(S516のN)、次の区間(すなわち、右隣の区間)の処理を開始し(S508)、現ライン内の全区間の処理が終了するまで、ステップS508〜S515までの処理を繰り返す。現ライン内の全区間の処理が終了したら(S516のY)、出力画像のy座標の値Yが一つ、インクリメントされる(S517)。これは、次に画面の上からY番目のラインの一つ下のラインの画素を補間することを意味している。
続いて、ライン中間値算出部534は、現ラインのx’, y’, wの初期値x’0, y’0, w0に、上記変換行列の2列目の係数B,E,Qの値をそれぞれ加算し、次のラインのx’, y’, wの初期値x’0, y’ 0, w0を算出する(S518)。ここでは、当該変換行列の2列目の係数B,E,Qの値をそれぞれ、あるラインのx’, y’, wの初期値x’0, y’ 0, w0から、その次のラインのx’, y’, wの初期値x’0, y’ 0, w0への増分値Δx’v, Δy’ v, Δw vを示す値として用いている。
続いて、全ラインの処理が終了していなければ(S519のN)、次のライン(すなわち、一つ下のライン)の処理を開始し(S504)、全ラインの処理が終了するまで、ステップS504〜S518までの処理を繰り返す。全ラインの処理が終了したら(S519のY)、本画像処理手順は終了となる。
以上説明したように実施の形態2によれば、実施の形態1と同様の効果を奏する。実施の形態2では、代表画素のx’, y’, wを算出する際、上記変換行列内の係数および定数を用いることにより、実施の形態1と比較し、さらに演算量を削減することができる。
以上、本発明をいくつかの実施の形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
たとえば、区間設定部131は、上記区間の幅Nを適応的に変化させてもよい。たとえば、水平方向の画素数が大きい場合、上記区間の幅Nを広げる。また、処理負荷が所定の閾値を超えたとき(たとえば、コマ落ちしたとき)、上記区間の幅Nを広げる。また、区間設定部131は、ユーザ操作に起因して上記区間の幅Nを適応的に変化させてもよい。ユーザから画質を上げたい旨の指示が入力された場合、上記区間の幅Nを狭める。