(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0017】
本発明は、歪曲収差等で歪みが生じた画像の歪みを補正するために、格子状のパターン等を描画したチャートを撮像し、撮像されたチャート(チャート画像)中から各直線の交点を探索し、探索された交点(探索交点)と歪みが生じていない場合の画像での交点(目標交点)との差分を基に、歪みを補正するための補正パラメータ(補正量)を算出する。交点の探索は交点の検出と交点の決定とで実施される。交点の検出では、各交点に対して検出を開始するポイント(検出開始点)を設定し、そこを出発点として輝度の大小に基づいて2方向の直線を検出し、検出した直線の交点(検出交点)を検出する。この際、直前に検出された交点(直前交点)の検出において設定された検出開始点を移動させて次の検出開始点を設定するが、その移動の方向及び大きさを表すベクトル(以下、「開始点移動ベクトル」とする)を、直前交点及び直前交点の周囲の検出交点に基づいて算出する。これにより、チャート画像の歪みが大きい場合でも、的確に検出開始点を設定することができる。交点の決定では、交点の検出では検出できなかった交点(未検出交点)を、近傍の検出交点を基に見つけ出す。つまり、未検出交点の近傍の検出交点から未検出交点で交差している直線(X直線、Y直線)を推測し、推測した直線の交点(決定交点)を決定する。X直線及びY直線の推測では、未検出交点の両隣又は後方或いは前方2つの交点が検出交点の場合(パターンA1、パターンB1)、その2つの検出交点を結ぶ直線をX直線又はY直線とし、そうではない場合、未検出交点の後方又は前方の2つの交点を基に、その2つの交点を横切る複数の直線(暫定X直線、暫定Y直線)を想定し、その直線上で未検出交点が存在すると推測される範囲内の画素の輝度に基づいてX直線又はY直線を選定する。これにより、交点がぼやけていても見つけ出すことができる。また、本発明では、隣接する検出交点との間隔(格子間隔)の変化量が予め定められた範囲(以下、「間隔レート範囲」とする)を外れる検出交点を探索交点から外すことも可能である。これにより、誤検出により本来の位置からずれて検出された検出交点を外すことができる。
【0018】
以下に、本発明の実施の形態を、図面を参照して詳細に説明する。
【0019】
本実施形態では、
図1に示されるような複数の垂直線(以下、「垂直格子線」とする)と複数の水平線(以下、「水平格子線」とする)が等間隔に配置された格子状のパターンが描画されたチャートを使用する。
図1において、横方向が水平方向、縦方向が垂直方向である。垂直格子線は一定の間隔で平行して配置されており、それらに直交するように水平格子線が一定の間隔で平行して配置されている。垂直格子線の間隔と水平格子線の間隔は同じでも異なっていても良い。本実施形態では、このチャートを撮像した画像(チャート画像)中から、垂直格子線と水平格子線の交点(以下、「格子点」とする)を探索する。
【0020】
チャートを、例えば自動車に搭載され、自動車の前方を撮像するカメラで撮像する場合、
図2に示されるように、自動車の前方に一定の距離を置いて、カメラ1の正面に、カメラ1の撮像面と平行になるように、チャート2を設置する。
【0021】
本実施形態では、チャート画像の中心近辺の格子点から探索を開始する。これは、歪曲収差により画像に歪みが生じた場合、画像の中心から周辺に行く程、歪みが大きくなるので、歪みが最も少ないと想定される画像の中心から探索を始めるのが、より正確な探索が期待できるからである。そのために、まず、チャート画像の中心近辺の4つの格子点La
11、Lb
11、Lc
11及びLd
11を検出する。例えば、
図3に示されるようなチャート画像中の格子線と同程度の幅をもつ垂直格子線と水平格子線が直交する画像を用いたパターンマッチングを、チャート画像の中心近辺の範囲で行い、上記4つの格子点を検出する。
【0022】
格子点La
11、Lb
11、Lc
11及びLd
11を検出したら、
図4に示されるように、それらの中心、即ち、格子点La
11とLc
11を結ぶ直線と格子点Lb
11とLd
11を結ぶ直線の交点を原点Opとし、原点Opを中心にしてチャート画像を、
図5に示されるように、4つの象限(象限I、II、III、IV)に分割し、象限毎に格子点の検出を行う。この際、格子点La
11、Lb
11、Lc
11及びLd
11で形成される格子の水平方向の間隔(以下、「X格子間隔」とする)Wxと垂直方向の間隔(以下、「Y格子間隔」とする)Wyを各格子点の座標より算出する。
【0023】
各象限での格子点の検出は、原点Opから水平格子線に沿ってチャート画像の周辺に向かう方向(X方向)への検出を、原点Opから垂直格子線に沿ってチャート画像の周辺に向かう方向(Y方向)へと行っていく。即ち、
図6に示されるように、破線の矢印で示されるX方向の検出を、太線の矢印で示されるY方向に向かって行っていく。
【0024】
各格子点の検出は、検出を開始するポイント(検出開始点)を設定し、そこを出発点として行われる。最初に設定される検出開始点は、各象限共通で、原点Opである。以下に、検出開始点から出発して格子点を検出する手順について、
図7のフローチャートを参照して説明する。
【0025】
検出開始点を出発点としてX方向に画素の輝度を順次確認し(以下、この確認する画素の並びを「X検出ライン」とする)、輝度が減少から増加に転じる最小の輝度を有する画素を探す(ステップS10)。輝度が最小の画素を探したら、その画素及びX方向においてその画素の両隣である画素を用いて、サブピクセル精度で最も輝度が小さい点(以下、「極小点」とする)P1を求める(ステップS20)。サブピクセル精度での極小点P1の求め方については後述する。この極小点P1は垂直格子線上の点だと推測される。極小点P1を求めたら、検出開始点よりY方向に1画素分だけ移動した画素を出発点として(ステップS30)、ステップS10〜S20と同様の動作により極小点P2を求める。その後、同様にしてY方向に1画素分ずつ移動して、X検出ラインでの検出を続けて、極小点P3、P4、・・・を求める。そのようにして極小点を求めていくと、輝度が小さい値のままで殆ど変化しないX検出ライン(以下、「小輝度X検出ライン」とする)に遭遇する。これは、水平格子線に到達したからだと推測されるので、小輝度X検出ラインに遭遇したら(ステップS40)、そのラインでの検出は行わず、更にY方向に1画素分だけ移動して(ステップS50)、X検出ラインでの検出を続け、極小点を求める(ステップS60、S70)。小輝度X検出ラインであるかの判断は、輝度に対して所定の閾値を設定し、その閾値以下の輝度が所定の数続いたら、そのX検出ラインを小輝度X検出ラインとすることにより行う。小輝度X検出ラインに遭遇したポイントからのY方向への移動量がY格子間隔Wyの1/2になるまで検出を続け、Wy/2に到達したら(ステップS80)、それ以上の検出は行わない。そして、それまでに求められた極小点に対して、最小二乗法により直線(以下、「推測垂直格子線」とする)を求める(ステップS90)。
【0026】
次に、検出開始点を出発点として、検出する方向をY方向にし、移動する方向をX方向にして、ステップS10〜S90と同様の動作により、水平格子線と推測される直線(以下、「推測水平格子線」とする)を求める(ステップS100)。この場合の検出終了の判断では、X格子間隔Wxを使用する。
【0027】
推測垂直格子線及び推測水平格子線が求められたら、これらの交点を、求める格子点(以下、「検出格子点」とする)とする(ステップS110)。
【0028】
上記の動作において、小輝度X検出ライン、或いはY方向における同様のライン(以下、「小輝度Y検出ライン」とする)に遭遇しない場合、検出をし続けることになるので、小輝度X検出ライン又は小輝度Y検出ラインに依存しない所定の上限値を設定し、移動量が上限値に達したら検出を終了するようにしても良い。または、同じX検出ライン、或いはY方向における同様のライン(以下、「Y検出ライン」とする)において極小点が複数求められたら、検出を終了するようにしても良い。なお、小輝度X検出ライン又は小輝度Y検出ラインを越えてからの移動量がY格子間隔Wyの1/2又はX格子間隔Wxの1/2になったら検出を終了しているが、1/2ではなく、その前後の割合でも良く、画像の歪みを考慮して、検出開始点の位置に応じて割合を変えても良い。また、推測垂直格子線及び推測水平格子線を最小二乗法で求めているが、最小二乗法以外の近似方法で求めても良い。
【0029】
ここで、サブピクセル精度での極小点の求め方について説明する。
【0030】
図8は、連続する画素の輝度を、横軸を連続する画素の位置、縦軸を輝度として模擬化した図で、s2において最小の輝度になっているとする。
図8において、輝度は最小値付近では線形近似できると仮定し、輝度が最小となる位置のs2とその前後の位置の輝度のうち輝度が大きい方の位置(
図8ではs3)を直線で結び(
図8では直線s2s3)、さらに傾きがその直線の傾きと逆符号で輝度が小さい方の位置(
図8ではs1)を通る直線を引き、2つの直線の交点を極小点とする。なお、最小値付近での輝度を線形近似ではなく、二次曲線等で近似しても良い。
【0031】
最初に設定される検出開始点は原点Opであるが、その後の検出開始点は、直前に設定された検出開始点を基にして設定される。
【0032】
原点OpからX方向への検出開始点の設定は、
図9(A)に示されるように、原点OpをX方向にX格子間隔Wxだけ順次移動させたポイントを検出開始点とする。同様に、原点OpからY方向への検出開始点の設定は、
図9(B)に示されるように、原点OpをY方向にY格子間隔Wyだけ順次移動させたポイントを検出開始点とする。
【0033】
検出した格子点の周囲に検出格子点が存在する場合は、それら周囲の検出格子点から算出される開始点移動ベクトルを用いて、次の検出開始点を設定する。
図10は第IV象限における設定方法を説明した図で、検出開始点Sd
ijを出発点として格子点La
ijが検出され、次の検出対象である格子点La
i+1jを検出するための検出開始点Sd
i+1jを設定する場合を示している。この場合、検出格子点La
ijの直前に検出された検出格子点La
i−1jを始点とし、検出格子点La
ijを終点とするベクトル(第1ベクトル)V
i−1jと、Y方向において検出格子点La
ijより前に検出された(
図10では上に位置する)検出格子点La
ij−1(Y方向隣接交点)を始点とし、検出格子点La
ij−1の次に検出された検出格子点La
i+1j−1を終点とするベクトル(第2ベクトル)V
ij−1を用いて、下記の数1より開始点移動ベクトルMV
ijを求める。
【0034】
【数1】
そして、検出開始点Sd
ijを開始点移動ベクトルMV
ijの大きさと向きだけ移動したポイントを次の検出開始点Sd
i+1jとする。このように、直前の検出開始点(
図10の場合は検出開始点Sd
ij)の近傍の検出格子点の並びを基にして次の検出開始点を設定するので、チャート画像の歪みが大きい場合でも、その歪みに合わせて、的確な検出開始点を設定することができる。
【0035】
上述のような格子点検出を、
図6に示される順序で行った結果、検出できなかった格子点(以下、「未検出格子点」とする)があった場合、未検出格子点の近傍の格子点を基に、未検出格子点を通るX方向の直線(X直線)及びY方向の直線(Y直線)を推測し、X直線とY直線の交点を、その未検出格子点に対応する格子点(以下、「決定格子点」とする)とする。以下、X直線及びY直線の推測方法について説明する。
【0036】
未検出格子点の両隣、後方2つの交点又は前方2つの交点が検出格子点の場合(パターンA1、パターンB1)、その2つの検出格子点を結ぶ直線をX直線又はY直線とする。例えば、格子点La
ijが未検出の場合、
図11(パターンA1)において、
図11(A)では検出格子点La
i−1j及びLa
i+1jを結ぶ直線をX直線とし、
図11(B)では検出格子点La
i−2j及びLa
i−1jを結ぶ直線をX直線とし、
図11(C)では検出格子点La
i+1j及びLa
i+2jを結ぶ直線をX直線とする。
図12(パターンB1)において、
図12(A)では検出格子点La
ij−1及びLa
ij+1を結ぶ直線をY直線とし、
図12(B)では検出格子点La
ij−2及びLa
ij−1を結ぶ直線をY直線とし、
図12(C)では検出格子点La
ij+1及びLa
ij+2を結ぶ直線をY直線とする。
【0037】
パターンA1ではなく、未検出格子点の後方又は前方の2つの格子点が検出格子点又は決定格子点の場合(パターンA2)、その2つの格子点を基にX直線を推測する。例えば、格子点La
ijが未検出の場合、
図13(A)に示されるように格子点La
i−1jが検出格子点で格子点La
i−2jが決定格子点のとき、
図13(B)に示されるように格子点La
i−1jが決定格子点で格子点La
i−2jが検出格子点のとき、又は、
図13(C)に示されるように格子点La
i−1j及びLa
i−2jが共に決定格子点のとき、格子点La
i−1j(X1交点)及びLa
i−2j(X2交点)を基にX直線を推測し、
図13(D)に示されるように格子点La
i+1jが検出格子点で格子点La
i+2jが決定格子点のとき、
図13(E)に示されるように格子点La
i+1jが決定格子点で格子点La
i+2jが検出格子点のとき、又は、
図13(F)に示されるように格子点La
i+1j及びLa
i+2jが共に決定格子点のとき、格子点La
i+1j(X1交点)及びLa
i+2j(X2交点)を基にX直線を推測する。
【0038】
パターンB1ではなく、未検出格子点の後方又は前方の2つの格子点が検出格子点又は決定格子点の場合(パターンB2)も同様に、その2つの格子点を基にY直線を推測する。例えば、格子点La
ijが未検出の場合、
図14(A)に示されるように格子点La
ij−1が検出格子点で格子点La
ij−2が決定格子点のとき、
図14(B)に示されるように格子点La
ij−1が決定格子点で格子点La
ij−2が検出格子点のとき、又は、
図14(C)に示されるように格子点La
ij−1及びLa
ij−2が共に決定格子点のとき、格子点La
ij−1(Y1交点)及びLa
ij−2(Y2交点)を基にY直線を推測し、
図14(D)に示されるように格子点La
ij+1が検出格子点で格子点La
ij+2が決定格子点のとき、
図14(E)に示されるように格子点La
ij+1が決定格子点で格子点La
ij+2が検出格子点のとき、又は、
図14(F)に示されるように格子点La
ij+1及びLa
ij+2が共に決定格子点のとき、格子点La
ij+1(Y1交点)及びLa
ij+2(Y2交点)を基にY直線を推測する。
【0039】
これらのパターンでのX直線及びY直線の推測方法について、
図13(A)〜(C)に示されるパターンを例にして説明する。
【0040】
図15に示されるように、まず、Y方向において格子点La
i−2jの中心から±1画素の範囲内で所定の刻み幅で刻み点を設定し、格子点La
i−1jに対しても同様にして刻み点を設定し、両方の刻み点を結ぶ直線(暫定X直線)を作成する。例えば、刻み幅を0.1画素とした場合、21個の刻み点がそれぞれ設定され、441本の暫定X直線が作成される。次に、各暫定X直線において、未検出格子点La
ijに隣接する方の格子点La
i−1jのX方向の近傍に所定の範囲、例えば格子点La
i−1jから1画素ずつで15画素まで伸ばした範囲(
図15において濃淡がある四角で構成された範囲。なお、
図15ではイメージを表しているので、画素数等はここでの記載と一致していない。以下、この範囲を「輝度加算範囲」とする)を設定し、輝度加算範囲内にある画素の輝度を全て加算する。この際、
図16(A)に示されるように、暫定X直線が1つの画素Px1を通る場合は画素Px1の輝度Bn1を用いるが、
図16(B)に示されるように2つの画素Px1及びPx2に跨って通る場合は、両方の画素の輝度を重み付けして加算した値をそのポイントでの輝度として用いる。例えば、1画素分の大きさを有し、暫定X直線が中心を通る、
図16(B)の点線で示されるような枠を設定し、その枠内で画素Px1及びPx2の占める割合がそれぞれr1及びr2(r1+r2=1)の場合、Bn1×r1+Bn2×r2(Bn2は画素Px2の輝度)をそのポイントでの輝度とする。各暫定X直線における輝度の加算値を算出したら、その中で最も小さい加算値を有する暫定X直線をX直線とする。このように、連続する隣接の格子点を基に暫定X直線を作成し、未検出格子点が存在すると推測される範囲内の輝度を基に暫定X直線の中からX直線を選定するので、格子点がぼやけていても適切なX直線を見つけ出すことができる。なお、輝度の加算値が最も小さい暫定X直線をX直線としているが、その他の選定方法、例えば、輝度に対して閾値を設定し、閾値より小さい輝度を有する画素の数が最も多い暫定X直線をX直線とする等の方法を用いても良い。また、刻み点を設定する範囲及び刻み幅は±1画素及び0.1画素以外でも良く、格子点La
i−2jと格子点La
i−1jとで変えても良い。
【0041】
図13(D)〜(F)に示される場合も、上記と同様の手順でX直線を推測し、
図14(A)〜(F)に示される場合も、方向を変えるだけで、同様の手順でY直線を推測する。なお、輝度加算範囲は上記の範囲に限らず、未検出格子点が存在すると推測される範囲として適宜設定して良く、格子の間隔(X格子間隔又はY格子間隔)や格子点の位置等に応じて可変としても良い。
【0042】
図13に示されるパターンA2において、
図17(A)、(B)及び(C)に示されるように、未検出格子点La
ijの後方の2つの格子点La
i−1j及びLa
i−2jの内のいずれか又は両方が未検出格子点の場合、又は、
図17(D)、(E)及び(F)に示されるように、未検出格子点La
ijの前方の2つの格子点La
i+1j及びLa
i+2jの内のいずれか又は両方が未検出格子点の場合(以下、これらの場合を「パターンA3」とする)、後方又は前方の未検出格子点(以下、「近傍未検出格子点」とする)のY方向での近傍の検出格子点に基づいて、近傍未検出格子点を求め、その結果を基に、
図13に示されるパターンA2の場合と同様に、暫定X直線を作成してのX直線の推測を行う。
図17において、白丸で示される格子点が求めたい未検出格子点、灰色の丸が検出格子点又は決定格子点、点線の白丸が近傍未検出格子点である。例えば、
図17(A)の場合において、
図18に示されるように、近傍未検出格子点La
i−2jに対して近傍の検出格子点La
i−2j−1及びLa
i−2j−2が存在する場合、検出格子点La
i−2j−1及びLa
i−2j−2を外挿して近傍未検出格子点La
i−2jを求め、近傍未検出格子点La
i−2j及び格子点La
i−1jを基に暫定X直線を作成し、輝度の加算値が最も小さい暫定X直線をX直線とする。外挿による近傍未検出格子点La
i−2jの導出は、例えば、検出格子点La
i−2j−1を、ベクトルLa
i−2j−2La
i−2j−1と同じ大きさで同じ向きに移動し、その移動先を近傍未検出格子点La
i−2jとする。なお、外挿等により近傍未検出格子点を求めるために、2つではなく3つ以上の検出格子点を使用しても良い。例えば、3つの検出格子点La
i−2j−1、La
i−2j−2及びLa
i−2j−3を使用して近傍未検出格子点La
i−2jを求める場合、ベクトルLa
i−2j−2La
i−2j−1とベクトルLa
i−2j−3La
i−2j−2の差分をベクトルLa
i−2j−2La
i−2j−1に加算したベクトルと同じ大きさで同じ向きに検出格子点La
i−2j−1を移動した移動先を近傍未検出格子点La
i−2jとする。
【0043】
図14に示されるパターンB2において、
図19(A)、(B)及び(C)に示されるように、未検出格子点La
ijの後方の2つの格子点La
ij−1及びLa
ij−2の内のいずれか又は両方が未検出格子点の場合、又は、
図19(D)、(E)及び(F)に示されるように、未検出格子点La
ijの前方の2つの格子点La
ij+1及びLa
ij+2の内のいずれか又は両方が未検出格子点の場合(以下、これらの場合を「パターンB3」とする)も、
図17に示されるパターンA3の場合と同様に、近傍未検出格子点を、そのX方向での近傍の検出格子点に基づいて求め、その結果を基に、暫定Y直線を作成してのY直線の推測を行う。
【0044】
図17や
図19に示されるパターンA3及びB3のような場合は、例えば、
図20に示されるように、画像の歪みにより格子点が画面から外れてしまった場合にも適用される。
図20(A)に示されるように、格子点La
i−2jが画面の下端から外れたために近傍未検出格子点となった場合は、
図18の場合と同様の手順にてX直線を推測する。
図20(B)に示されるように、格子点La
ij−1及びLa
ij−2が画面の右端から外れたために近傍未検出格子点となった場合は、検出格子点La
i−1j−1及びLa
i−2j−1を外挿して近傍未検出格子点La
ij−1を求め、検出格子点La
i−1j−2及びLa
i−2j−2を外挿して近傍未検出格子点La
ij−2を求め、それらを基に暫定Y直線を作成し、輝度の加算値が最も小さい暫定Y直線をY直線とする。なお、
図20に示されるような画面の周囲近辺での未検出格子点の決定において、X直線又はY直線を推定するために使用される検出格子点が画面の端のギリギリ、例えば画面の端より2画素内側の線より外側に存在する場合、暫定X直線又は暫定Y直線における輝度の計算が正確に行えなかったり、検出精度が他の検出格子点より低い可能性があったりするので、そのような検出格子点は近傍未検出格子点として扱っても良い。
【0045】
図21は本発明に係る補正量演算装置の構成例を示すブロック図である。本構成例の補正量演算装置3は、チャート画像CPを入力し、チャート画像CP中から探索された格子点(以下、「探索格子点」とする)LPを出力する交点探索部10と、探索格子点LP及び歪みが生じていない場合のチャート画像での格子点(以下、「目標格子点」とする)に基づいて補正パラメータCMを算出する補正量算出部20を備え、交点探索部10は、画像入力部110、画像記憶部120、検出開始点設定部130、交点検出部140、交点記憶部150、交点除外部160、交点決定部170及び交点出力部180を備える。
【0046】
画像入力部110はチャート画像CPを入力する。チャート画像CPは所定の輝度階調(例えば、256階調のグレースケール)でデジタル化された画像データで、画像データにより規定される画像平面はi−j座標系で、水平方向をi座標軸、垂直方向をj座標軸とする。画像入力部110は、カメラで撮像されたチャート画像CPを直接入力しても良いし、別途撮像されたチャート画像CPを格納した記憶媒体から入力するようにしても良い。入力されたチャート画像CPは、画像記憶部120に格納される。
【0047】
画像記憶部120に格納されたチャート画像CPは、検出開始点設定部130、交点検出部140及び交点決定部170での処理において使用される。
【0048】
検出開始点設定部130は、原点Opの決定と検出開始点の設定を行う。原点Opの決定では、まず、チャート画像CPの中心付近に4つの格子点を含む程度の探索範囲(以下、「中心探索範囲」とする)を設定し、中心探索範囲内において、
図3に示される画像を用いたパターンマッチングを行い、チャート画像CPの中心近辺の4つの格子点La
11、Lb
11、Lc
11及びLd
11を検出する。そして、
図4に示されるように、格子点La
11とLc
11を結ぶ直線と格子点Lb
11とLd
11を結ぶ直線の交点を原点Opとして、検出した4つの格子点の座標を基に原点Opの座標を算出する。また、4つの格子点の座標からX格子間隔Wx及びY格子間隔Wyを算出する。検出開始点の設定では、各格子点の検出の出発点となる検出開始点Sdを求め、交点検出部140に出力する。格子点の検出は、
図5に示される4つの象限毎に象限IV→I→II→IIIの順番で行われ、各象限においては
図6に示される順序で行われるので、検出開始点の設定もそれに合わせて行われる。象限IVにおける最初の検出開始点は原点Opで、原点Opの座標を検出開始点Sdとして出力する。それ以降は、原点OpからX方向(i座標軸方向)に、
図9(A)に示されるように、X格子間隔Wxだけ順次移動させたポイントを検出開始点とし、そのポイントの座標を検出開始点Sdとして出力する。原点OpからX方向への検出開始点Sdの設定が終了したら、次は原点OpからY方向(j座標軸方向)に、
図9(B)に示されるように、Y格子間隔Wyだけ移動させたポイントを検出開始点とし、そのポイントの座標を検出開始点Sdとして出力する。そして、そのポイントからX方向への検出開始点Sdの設定を行うが、最初の設定は、X格子間隔Wxだけ移動させたポイントを検出開始点Sdとするが、その後は、
図10に示されるように、交点記憶部150に格納されている探索格子点LPの座標を用いて、数1により開始点移動ベクトルMV
ijを求め、開始点移動ベクトルMV
ijの大きさと向きだけ直前に設定された検出開始点を移動したポイントを次の検出開始点とし、そのポイントの座標を検出開始点Sdとして出力する。開始点移動ベクトルMV
ijを求めるために使用する探索格子点が検出されていない場合、適切な検出開始点の設定が行えないので、検出開始点の設定は行わず、それ以降のそのX方向での検出開始点の設定も行わない。X方向での検出開始点の設定が終了したら、Y方向にY格子間隔Wyだけ移動させた次のX方向での検出開始点の設定を上記と同様の手順で行っていく。そして、画面の下端まで到達し、象限IVでの検出開始点Sdの設定が終了したら、象限I→II→IIIの順番で、象限IVの場合と同様の手順で検出開始点Sdの設定を行う。
【0049】
交点検出部140は、検出開始点設定部130から出力される検出開始点Sdを出発点として、
図7に示される手順にて、画像記憶部120に格納されているチャート画像CP中から格子点を検出し、検出した格子点の座標を検出格子点LP1として出力する。検出格子点LP1は探索格子点として交点記憶部150に格納される。交点記憶部150には、格子点の座標を格納するために、探索すべき格子点の数だけの領域が確保されており、検出格子点LP1(座標)はそこに順次格納されていき、検出されなかった格子点(未検出格子点)のところには、検出されなかったことを示すデータ(例えばゼロや最大値。以下、「未検出指標データ」とする)が格納される。動作開始時に交点記憶部150内の全てのデータを未検出指標データにし、格子点を検出したら、検出格子点LP1で上書きするようにしても良い。探索すべき格子点の数は、原点Op近傍の水平格子線及び垂直格子線それぞれで検出された格子点の数を基に決定する。例えば、画像の歪みの主因である歪曲収差が樽型の場合、
図22に示されるように、原点Opの近傍を通る水平格子線及び垂直格子線以外の格子線上では格子点の数が多くなり、全画面の中で歪みの補正ができない箇所(例えば画面の四隅)ができるおそれがあるからである。また、上述の水平格子線及び垂直格子線それぞれで検出された格子点の数で画像の横及び縦の画素数を割った値を、新たにX格子間隔Wx及びY格子間隔Wyとしても良い。
【0050】
交点除外部160は、交点検出部140での格子点の検出が終了した後、例えば、
図23に示されるように、本来の位置からずれて検出された格子点(
図23の場合、検出格子点La
ij)を見つけ出し、その検出格子点を探索格子点から外す。ずれた検出格子点の隣接の検出格子点との間隔(格子間隔)は、周囲の検出格子点での格子間隔に対して滑らかに変化せずに不連続に大きくなったり小さくなったりするので、格子間隔の変化量に基づいて、ずれた検出格子点を見つける。具体的には、例えば
図23の場合、検出格子点La
i-2j及びLa
i−1j間の格子間隔Wx
i−1jと検出格子点La
i-1j及びLa
ij間の格子間隔Wx
ijの変化量dW
ij=|Wx
ij−Wx
i−1j|が間隔レート範囲の上限値RUより大きいか又は下限値RLより小さいならば、検出格子点La
ijはずれていると判断し、検出格子点La
ijを探索格子点から外すために、交点記憶部150での格子点La
ijに対するデータを未検出指標データに書き換える。書き換えるためのデータ(座標、未検出指標データ)を除外格子点LPdとして出力する。なお、格子間隔の変化量として、Y方向での変化量、例えば
図23の場合、検出格子点La
ij-2及びLa
ij−1間の格子間隔と検出格子点La
ij-1及びLa
ij間の格子間隔の変化量を使用しても良く、X方向とY方向両方での変化量を組み合わせて使用しても良い。
【0051】
交点決定部170は、交点記憶部150において未検出指標データが格納されている格子点、つまり、未検出格子点及びずれていると判断された格子点(以下、これらを纏めて「未検出格子点」とする)を、未検出格子点の周辺の探索格子点を基に見つけ出す。格子点La
ijが未検出格子点とした場合、まず、未検出格子点La
ijを通るX直線を推測する。具体的には、未検出格子点La
ijに対して
図11に示されるパターンA1が存在する場合、2つの検出格子点を結ぶ直線をX直線とする。パターンA1は存在せず、
図13に示されるパターンA2が存在する場合、近傍のX1交点及びX2交点を基に、
図15に示されるような暫定X直線を作成し、各暫定X直線において輝度加算範囲内の輝度を加算し、輝度の加算値が最も小さい暫定X直線をX直線とする。輝度の加算において、
図16(B)のように暫定X直線が2つの画素に跨っている箇所がある場合は、上述のように、2つの画素の輝度を重み付けして加算した値をその箇所の輝度とする。輝度は、画像記憶部120に格納されているチャート画像CPから求める。パターンA1及びA2は存在せず、
図17に示されるパターンA3が存在する場合、近傍未検出格子点を、その近傍のY方向での検出格子点の外挿等により求め、パターンA2の場合と同様の手順にてX直線を推測する。次に、未検出格子点La
ijを通るY直線を推測する。具体的には、X直線の推測の場合と同様に、
図12に示されるパターンB1、
図14に示されるパターンB2、
図19に示されるパターンB3の順番でそれぞれが存在するか確認し、存在していたら、各パターンに応じた処理によりY直線を推測する。X直線及びY直線が推測されたら、その交点を決定格子点とし、決定格子点の座標を決定格子点LP2として交点記憶部150に出力する。交点記憶部150では、決定格子点とされた未検出格子点の座標を未検出指標データから決定格子点LP2に書き換えることにより、決定格子点LP2を探索格子点として格納する。X直線及び/又はY直線が推測されない場合は、未検出格子点の座標は未検出指標データのままである。
【0052】
交点決定部170での処理により、例えば、
図24(A)にて黒丸で示される格子点までしか検出されていない場合、
図24(B)で示されるように、パターンB3に対する処理により、点線の白丸で示される2つの近傍未検出格子点を近傍の検出格子点の外挿で求めてY直線を推測し、パターンA1に対する処理により、X直線を推測し、その交点である実線の白丸で示される格子点を決定格子点とすることができる。同様にして、その下の格子点も決定格子点として求めることができ、
図24(C)の斜線の白丸で示される決定格子点が求められる。そして、それらの決定格子点を利用して、
図24(D)で示されるように、その上の2つの決定格子点を求めることができる。このようにして、交点決定部170での処理により、X方向に決定格子点を広げていくことができ、同様の処理により、Y方向にも広げていくことができる。
【0053】
交点決定部170での処理が終了したら、交点出力部180は、交点記憶部150に格納された探索格子点LPを補正量算出部20に出力する。
【0054】
補正量算出部20は、探索格子点LPと予め保持している目標格子点TPとの差分を算出し、その差分を補正パラメータとする。つまり、探索格子点LPに含まれる各探索格子点の座標(LP
i、LP
j)と、その探索格子点に対応する目標格子点の座標(TP
i、TP
j)の差分(ΔP
i、ΔP
j)(ΔP
i=LP
i−TP
i、ΔP
j=LP
j−TP
j)を、その格子点に対する補正パラメータとする。更に、格子点外の座標に対する補正パラメータを、格子点に対する補正パラメータに基づき、既知の補間法により算出する。これらの処理で算出された補正パラメータを補正パラメータCMとして出力する。
【0055】
このような構成の補正量演算装置3の動作例を
図25及び
図26のフローチャートを参照して説明する。なお、動作開始の際、交点記憶部150内の全てのデータは未検出指標データになっているとする。
【0056】
画像入力部110がチャート画像CPを入力すると(ステップS210)、チャート画像CPは画像記憶部120に格納される。
【0057】
検出開始点設定部130は、チャート画像CPが画像記憶部120に格納されたのを確認すると、中心探索範囲を設定し、パターンマッチングにより4つの格子点La
11、Lb
11、Lc
11及びLd
11を検出する(ステップS220)。そして、検出した4つの格子点の座標から原点Opの座標並びにX格子間隔Wx及びY格子間隔Wyを算出する(ステップS230)。
【0058】
次に、検出開始点設定部130及び交点検出部140にて、象限IV→I→II→IIIの順番で、各象限にて格子点の検出が行われる(ステップS240〜S270)。
【0059】
格子点検出の動作について、
図26のフローチャートを参照して説明する。
【0060】
検出開始点設定部130は原点Opを最初の検出開始点として、その後、交点検出部140での1つの格子点の検出動作の終了を待って、順次、上述の順で検出開始点を設定し(ステップS510)、その座標を検出開始点Sdとして交点検出部140に出力する。検出開始点の設定に当たり、開始点移動ベクトルMV
ijを求めるために使用する探索格子点が検出されていない場合は、次のX方向での検出開始点の設定を行う。
【0061】
交点検出部140は、検出開始点Sdを出発点として、画像記憶部120に格納されたチャート画像CP中から格子点の検出を行い(ステップS520)、格子点を検出したら、検出格子点LP1を交点記憶部150に格納する(ステップS530)。格子点を検出できなかったら、次の検出開始点Sdの入力を待つ。
【0062】
上記ステップS510〜S530を、対象の象限の末端まで行う(ステップS540)。
【0063】
全ての象限での格子点の検出が終了したら、交点除外部160は、各検出格子点の格子間隔の変化量を算出し(ステップS280)、変化量が予め設定された間隔レート範囲を外れていた場合(ステップS290)、除外格子点LPdを出力し、交点記憶部150でのその検出格子点に対するデータを未検出指標データに書き換える(ステップS300)。外れていない場合は、書き換えず、そのままとする。
【0064】
全ての検出格子点に対して、上記ステップS280〜S300の処理が終了したら(ステップS310)、交点決定部170は、交点記憶部150内の各未検出格子点に対して、パターンA1→パターンA2→パターンA3の順で各パターンが存在するか確認し、存在していたら、各パターンに応じた処理によりX直線を推測し(ステップS320)、パターンB1→パターンB2→パターンB3の順で各パターンが存在するか確認し、存在していたら、各パターンに応じた処理によりY直線を推測する(ステップS330)。X直線及びY直線が推測された場合(ステップS340)、その交点の座標を決定格子点LP2として出力し、交点記憶部150での対象の未検出格子点のデータを、未検出指標データから決定格子点LP2に書き換える(ステップS350)。X直線及び/又はY直線が推測されない場合(ステップS340)、未検出格子点のデータは未検出指標データのままとする。
【0065】
全ての未検出格子点に対して、上記ステップS320〜S350の処理が終了したら(ステップS360)、交点出力部180は、交点記憶部150に格納された探索格子点LPを補正量算出部20に出力する(ステップS370)。
【0066】
補正量算出部20は、探索格子点LPと目標格子点TPとの差分を算出し(ステップS380)、その差分を補正パラメータとする。更に、その差分を用いて、格子点外の座標に対する補正パラメータを算出する(ステップS390)。算出された全ての補正パラメータは補正パラメータCMとして出力される(ステップS400)。
【0067】
なお、上述の実施形態では、チャートに描画されるパターンとして、
図1に示されるような垂直格子線と水平格子線が直交するようなパターンを用いているが、複数の直線が2方向に規則的に配置されているパターンであれば、例えば、直線が斜めに配置されて交差しているようなパターンでも良い。検出開始点設定部130は、チャート画像の中心近辺の4つの格子点La
11、Lb
11、Lc
11及びLd
11をパターンマッチングで検出しているが、他の方法で検出しても良く、例えば、チャート画像の中心近辺に仮の原点を設定し、その仮の原点を検出開始点として、交点検出部140での格子点検出と同様の処理で4つの格子点を検出しても良い。また、検出開始点設定部130は、
図10に示されるような第1ベクトル及び第2ベクトルを用いて開始点移動ベクトルを求めているが、どちらか一方だけを用いて求めても良く、他のベクトル、例えば検出格子点La
i−1j−1を始点とし検出格子点La
ij−1を終点とするベクトルも加え、それら全て或いは組み合わせて開始点移動ベクトルを求めても良い。更には、X方向ではなくY方向のベクトルを用いて開始点移動ベクトルを求めても良い。交点検出部140は、検出開始点を出発点として格子点を検出するために、画素の輝度の確認をX方向及びY方向で行っているが、検出開始点の設定の場合と同様に、周囲の検出格子点から求められるベクトルの向きで行うようにしても良い。例えば、
図10において、検出開始点Sd
i+1jを出発点として格子点La
i+1jを検出する場合、X方向ではなくベクトルV
ij−1の向きに、また、Y方向ではなく検出格子点La
ij−1を始点とし検出格子点La
ijを終点とするベクトルの向きに画素の輝度を確認するようにしても良い。これにより、より的確に推測垂直格子線及び推測水平格子線を求めることができる。交点除外部160での除外処理に用いる間隔レート範囲の上限値及び下限値は固定値としているが、ずれているか判断する検出格子点の位置に応じて可変としても良い。これにより、画像の歪みが大きい場合でも、適切な間隔レート範囲を設定することができる。
【0068】
また、上述の構成例では、画像記憶部120と交点記憶部150を別々にしているが、1つの記憶部として纏めても良い。
【0069】
更に、上述の動作例では、全ての格子点の検出が終了した後、交点除外部160での除外処理を行っているが、格子点を検出する毎に、除外処理を行うようにしても良い。また、交点除外部160での除外処理及び/又は交点決定部170での決定処理は、象限毎に行っても、画像全体を1つとして行っても良く、象限毎に行う場合は、検出開始点設定部130、交点検出部140、交点除外部160及び交点決定部170での処理を一纏めとして象限毎に行うようにしても良い。
【0070】
補正量演算装置3を搭載した補正装置の構成例を
図27に示す。本構成例の補正装置は、
図21に示される補正量演算装置3の他に、補正パラメータ記憶部4、画像補正部5及び切換部6を備える。
【0071】
補正パラメータ記憶部4は、補正量演算装置3から出力される補正パラメータCMを格納する。
【0072】
画像補正部5は、補正パラメータ記憶部4に格納された補正パラメータCMを用いて、カメラ1で撮像された画像Pの歪みを補正する。画像Pはチャート画像CPと同様に所定の輝度階調でデジタル化された画像データで、補正パラメータCMは、上述のように、画像の座標毎に算出された差分のデータ(ΔP
i、ΔP
j)で構成されている。画像補正部5は、画像Pの座標に補正パラメータCMを加算することにより座標を変換し、変換後の座標で補正された画像Pcを出力する。
【0073】
切換部6は、補正パラメータを演算する場合は、接点aに接続し、画像P(この場合はチャート画像CPとなる)を補正量演算装置3に入力させ、画像を補正する場合は、接点bに接続し、画像Pを画像補正部5に入力させる。
【0074】
本構成の補正装置の動作例について説明する。
【0075】
まず、切換部6は接点aに接続し、カメラ1でチャートを撮像し、撮像された画像(チャート画像)Pは補正量演算装置3に入力される。補正量演算装置3は、上述の動作により補正パラメータCMを演算し、補正パラメータ記憶部4に格納する。補正パラメータCMが格納されたら、切換部6は接点を接点aから接点bに切り換える。そして、カメラ1で撮像された画像Pは画像補正部5に入力され、画像補正部5は、補正パラメータCMを用いて画像Pを補正し、画像Pcとして出力する。
【0076】
以上、本発明に係る補正量演算装置及び補正装置について説明したが、本発明は上述の実施形態に限らず、本発明の要旨を逸脱することなく、その他種々の構成、方法を採り得ることは勿論である。また、本発明に係る補正量演算装置及び補正装置は、コンピュータシステムを利用し、ソフトウェア(コンピュータプログラム)により実装されることができ、そして、ASIC(Application Specific Integrated Circuit)、GPU(Graphics Processing Unit)やFPGA(Field Programmable Gate Array)等のハードウェアにより実装されることも勿論できる。