(実施例1)
本実施例では視差倍率PM(Parallax Magnification)を用いて、平行法にて撮像された両眼視差画像である平行法両眼視差画像の視差をPM倍に再調節する。
図1および図2(a)を用いて平行法両眼視差画像について定義する。図1はXYZ直交座標系で表される三次元空間を模式的に表した図である。101は三次元空間、103は原点O、102は原点Oを含むXZ平面である。
図2は、Y軸方向の負から正の方向へ見たときのXZ平面102を表した図である。201はレフトカメラであり、両眼視差画像における左目視点の画像を撮像する。202はライトカメラであり、両眼視差画像における右目視点の画像を撮像する。203はレフトカメラ・ライトカメラのそれぞれの撮像素子平面に対応する共通無限遠方XY平面である。204はオブジェクトである。205は共通無限遠方XY平面におけるレフトカメラでのオブジェクトの写像点である。206は共通無限遠方XY平面におけるライトカメラでのオブジェクトの写像点である。
ここで、レフトカメラ視点PLはPL(xL,yL,zL,θxL,θyL,θzL)、ライトカメラ視点PRはPR(xR,yR,zR,θxR,θyR,θzR)と、それぞれ6次元の座標系で定義する。xL・xRは三次元空間上のX軸方向座標値である。yL・yRは三次元空間上のY軸方向座標値である。zL・zRは三次元空間上のZ軸方向座標値である。θxL・θxRはX軸回転角である。X軸を回転軸としてX軸の負から正の方向へ見たときに反時計回りすると角度が増加する。Z軸方向において角度は0である。θyL・θyRはY軸回転角である。Y軸を回転軸としてY軸の負から正の方向へ見たときに反時計回りすると角度が増加する。X軸方向において角度は0である。θzL・θzRはZ軸回転角である。Z軸を回転軸としてZ軸の負から正の方向へ見たときに反時計回りすると角度が増加する。Y軸方向において角度は0である。
平行法両眼視差画像においては、レフトカメラ視点PLとライトカメラ視点PRの関係は、以下の数1.1のとおりである。平行法にて撮像された平行法両眼視差画像は、画像を取得するレフトカメラの視点PLとライトカメラの視点PRとの差が基線距離α=|xL−xR|のみで表されるときの両眼視差画像である。尚、dはカメラ視点注視点間距離である(詳細は後述する)。
次に図2(b)を用いて再調節するPM倍の視差について定義する。207は仮想レフトカメラであり、再調節された視差を持つ両眼視差画像のうち、左目視点の画像を撮像する。208は仮想ライトカメラであり、再調節された視差を持つ両眼視差画像のうち、右目視点の画像を撮像する。209は共通無限遠方XY平面における仮想レフトカメラでのオブジェクトの写像点である。210は共通無限遠方XY平面における仮想ライトカメラでのオブジェクトの写像点である。
ここで、仮想レフトカメラ視点PVLはPVL(xVL,yVL,zVL,θxVL,θyVL,θzVL)、仮想ライトカメラ視点PVRはPVR(xVR,yVR,zVR,θxVR,θyVR,θzVR)と、それぞれ6次元の座標系で定義する。xVL・xVRは三次元空間上のX軸方向座標値である。yVL・yVRは三次元空間上のY軸方向座標値である。zVL・zVRは三次元空間上のZ軸方向座標値である。θxVL・θxVRはX軸回転角である。X軸を回転軸としてX軸の負から正の方向へ見たときに反時計回りすると角度が増加する。Z軸方向において角度は0である。θyVL・θyVRはY軸回転角である。Y軸を回転軸としてY軸の負から正の方向へ見たときに反時計回りすると角度が増加する。X軸方向において角度は0である。θzVL・θzVRはZ軸回転角である。Z軸を回転軸としてZ軸の負から正の方向へ見たときに反時計回りすると角度が増加する。Y軸方向において角度は0である。
平行法両眼視差画像においては、仮想レフトカメラ視点PVLと仮想ライトカメラ視点PVRの関係は、以下の数1.2のとおりである。即ち、PM倍の視差を再調節することは、レフトカメラの視点PLとライトカメラの視点PRとの基線距離aがPM倍された位置に位置する、仮想レフトカメラからの視点PVLと仮想ライトカメラからの視点PVRの画像を生成することである。
尚、本実施例ではa=1(cm)として処理を行なうが、aの長さを限定するものではない。
視差倍率PMは0≦PM<∞の範囲における実数値を取ることができる。視差倍率PMがPM=0の場合、視点PVLと視点PVRの基線距離|xVL−xVR|が|xVL−xVR|=0となり、視差が0になる。視差倍率PMが0<PM<1の場合、|xVL−xVR|<aとなり、視差が両眼視差画像よりも小さくなる。視差倍率PMがPM=1の場合、|xVL−xVR|=aとなり、視差は入力される両眼視差画像と等しくなる。視差倍率PMが1<PM<∞との場合、|xVL−xVR|>aとなり、視差は入力される両眼視差画像よりも大きくなる。
図3は、実施例1において本発明が実施されるコンピュータのハードウェア構成の一例を示す図である。
CPU(Central Proccesing Unit)301は、外部記憶装置(ハードディスク)307に格納されているOS(Operating System)、アプリケーションプログラム等を実行して画像処理装置300の動作を制御する。なお、CPU301は、対応する処理プログラムを実行する。
また、RAM(Random Access Memory)303にプログラムの実行に必要な情報、ファイル等を一時的に格納する制御を行う。ROM(Read Only Memory)302は、基本I/Oプログラム等のプログラムが記憶されている。RAM303は、CPU301の主メモリ、ワークエリア等として機能する。
ネットワークI/F304は、PAN(Personal Area Network)、LAN(Local Area Network)、WAN(Wide Area Network)に接続して外部装置と通信するためのインタフェースである。
入力装置305は、ユーザーからの入力を受け付けるマウス、キーボードの他、被写体の画像を撮影して画像入力を行うための撮像装置を含むことができる。当該撮像装置を有することにより、画像処理装置300はデジタルカメラ、或いは、デジタルビデオカメラとして機能することができる。
出力装置306は、液晶ディスプレイのような表示装置である。外部記憶装置307は、アプリケーションプログラム、ドライバプログラム、OS(Operating System)、制御プログラム、実施例1に対応する処理を実行するための処理プログラム等を格納している。システムバス308は、装置内のデータの流れを司る。
図4は、CPU301によって行われる本実施例の視差再調節プログラム(以下、本処理プログラム1と略す)を説明するフローチャートである。本フローチャートで表される本処理プログラム1は、通常、外部記憶装置307に記録されており、処理を開始するにあたりCPU301が本処理プログラム1を外部記憶装置307から読み込んで、RAM303に展開する。
ステップS401は、本処理プログラム1の開始を表す。ステップS402は、視差倍率PMを設定する。本実施例ではPM=3とし、入力する両画像データに付いている視差を通常とした場合、通常の3倍に視差を再調節するように設定する。
ステップS403は、画像探索比SRを算出する。画像探索比SRは、近傍画像距離NIDと遠方画像距離FIDの比である。
近傍画像距離NIDは、生成する仮想視点画像の仮想視点と、仮想視点により近い視点で撮像するカメラの視点との距離である。遠方画像距離FIDは、仮想視点と、仮想視点により遠い視点で撮像するカメラの視点との距離である。
平行法両眼視差画像の視差再調節を行なう本実施例において、近傍画像距離NIDおよび遠方画像距離FIDは以下の数1.3のように求められる。
図2を用いて本発明における近傍画像距離NIDおよび遠方画像距離FIDの算出方法を説明する。
仮想レフトカメラ207におけるオブジェクト204の共通無限遠方XY平面203における写像点は209である。レフトカメラ201におけるオブジェクト204の共通無限遠方XY平面203における写像点は205である。ライトカメラ202におけるオブジェクト204の共通無限遠方XY平面203における写像点は206である。
ここで、仮想レフトカメラ207・レフトカメラ201・オブジェクト204が成す三角形Aと、写像点209・写像点205・オブジェクト204が成す三角形Bは相似である。また、仮想レフトカメラ207・ライトカメラ202・オブジェクト204が成す三角形Cと、写像点209・写像点206・オブジェクト204が成す三角形Dは相似である。
このことから、三角形Aの頂点である仮想レフトカメラ207とレフトカメラ201を結ぶ辺の長さと、三角形Cの頂点である仮想レフトカメラ207とライトカメラ202を結ぶ辺の長さの比は、以下の数1.4のように求められる。
三角形Aと三角形Cに共通する仮想レフトカメラ207とオブジェクト204を結ぶ辺のZ軸方向成分を高さとすると、三角形Aと三角形Cの面積比は、底辺である三角形Aの頂点である仮想レフトカメラ207とレフトカメラ201を結ぶ辺の長さと三角形Cの頂点である仮想レフトカメラ207とライトカメラ202を結ぶ辺の長さの比に一致する。
三角形Bと三角形Dの面積比は、三角形Aと三角形Bが相似であり、三角形Cと三角形Dが相似であることから、三角形Aと三角形Cの面積比に等しい。
三角形Bと三角形D共通する写像点209とオブジェクト204を結ぶ辺のZ軸方向成分を高さとすると、三角形Bと三角形Dの面積比は、底辺である三角形Bの頂点である写像点209と写像点205を結ぶ辺の長さと三角形Cの頂点である写像点209と写像点206を結ぶ辺の長さの比に一致する。
上記より、仮想レフトカメラに対して近傍に位置するレフトカメラに写像される画像を探索する際に使用する近傍画像距離NIDと、仮想レフトカメラに対して遠方に位置するライトカメラに写像される画像を探索する際に使用する遠方画像距離FIDを数1.3の様に算出する。
このため、 xVL_PM*a/2に位置する仮想レフトカメラ207により共通無限遠方XY平面203にオブジェクト204を写像してできる写像点209は、写像点205との距離と写像点206との距離の比が数1.4で表される。
ここで、視差倍率PMによるNIDおよびFIDの設定について補足説明する。数1.3により求められるNIDとFIDは、最も単純な整数の比で表すように値を修正して用いる。
視差倍率PM=3とする場合は、数1.3によりNID=2、FID=4である。ここでNIDとFIDにそれぞれ2で除することでNID=1、FID=2を得る。
別の例では、視差倍率PM=0とする場合はNID=−1、FID=1である。視差倍率PM=0.5とする場合はNID=−0.5、FID=1.5である。ここでNIDとFIDにそれぞれ2を乗じることでNID=−1、FID=3を得る。視差倍率PM=1とする場合はNID=0、FID=2である。ここでNIDとFIDにそれぞれ2で除することでNID=0、FID=1を得る。視差倍率PM=2とする場合はNID=1、FID=3である。視差倍率PM=4とする場合はNID=3、FID=5である。
このように、数1.3以降でNIDとFIDは最も単純な整数の比で表すように値を修正する。これは画像データが離散化されていることに起因する。連続データとして画像データを扱える環境であれば、値を修正する必要は無い。
ステップS404は、テンプレートマッチングすることで、平行法両眼視差画像の視差マップを生成する。
本実施例におけるテンプレートマッチング方法は、ステップS403にて説明したカメラとオブジェクトが成す三角形は、写像面とオブジェクトが成す三角形と相似になる特徴を用いている。即ち第一に、仮想レフトカメラに写像される画像を構成する画素ないし画素により構成される小領域を探索基準位置とする。第二に、レフトカメラに写像される画像内において探索基準位置からdd・NID離れた位置にある画素ないし画素により構成される小領域を選択する。第三に、ライトカメラに写像される画像内において探索基準位置からdd・FID離れた位置にある画素ないし画素により構成される小領域を選択する。第四に、選択された二つの画素ないし画素により構成される小領域をマッチングする。第五に、最もマッチングしたdd・NIDを、視差ベクトルとして検出する(ここでは簡単に距離変数ddにより視差ベクトルを表す。本実施例における視差ベクトルの厳密解は後述する)。
図5は図4中のステップS404における視差ベクトル検出処理のフローチャートである。尚、以下の説明では、視差ベクトル検出処理のフローチャートを本サブフローチャート1と称する。
本サブフローチャート1に入力する平行法両眼視差画像は、表示解像度、画素のbit精度、カラースペース・カラーフォーマット・撮像に用いたレンズの画角θLenが一致しているものとする。
又、本実施例では、入力する平行法両眼視差画像は両画像データとも、以下のように記録されているものとする。
表示解像度:2592×1728(pixel2)、カラースペース:RGB、カラーフォーマット:RGB(面順次)、画素のbit精度:8(bit)、画角:θLen=π/2(rad)
又、以下の処理ステップでは、面順次のRGBフォーマットの画像データを輝度信号Yに変換して行なう。輝度信号YはY=a1・R+a2・G+a3・Bのように、画素毎にRGBの画像信号を加重平均して算出することができる。a1,a2,a3をカラーマトリックと言い、入力画像の規格によってヴァリエーションがある。ITU−R BT.709 recommendation(Rec.709)の場合、a1=0.2126,a2=0.7152,a3=0.0722である。尚、輝度信号Yの代わりに画像データの単一成分(R・G・Bのいずれか1つ)を用いてもよい。又、RGB、YUV以外のカラースペースのデータを用いてもよい。
又、仮想ライト視点画像を生成する処理が、仮想レフト視点画像を生成する処理と異なるのは、レフトカメラ視点画像を近傍画像NIとするか遠方画像FIとするかの違いであり、処理内容は同じである。(仮想レフト視点画像を生成する場合は、近傍画像NIにレフトカメラ視点画像を設定して、遠方画像FIにライトカメラ視点画像を設定する。仮想レフト視点画像を生成する場合は、遠方画像FIにレフトカメラ視点画像を設定して、近傍画像NIにライトカメラ視点画像を設定する。)このため、仮想ライト視点画像を生成する処理の説明は省略する。以下の処理ステップでは、仮想レフトカメラ207が仮想的に撮像をした仮想レフト視点画像を生成する処理について説明する。
又、本実施例では、本処理プログラム1が実行される前に、両画像データとも、レンズ収差による歪曲・色割れ・撮像素子のセンサーノイズ・符号化ノイズは、必要に応じてこれらの画質劣化要因に対する補正処理が予め実行されており、これらの画質劣化要因によりテンプレートマッチングでマッチングミスが起こらないものとする。
又、画像信号がガンマ逆補正されている場合は本処理プログラム1が実行される前にガンマ補正を行なうものとする。ここでガンマ逆補正とは入力Xと出力Yがそれぞれ0≦X≦1、0≦Y≦1の値を取るとき、Y=Xgi、gi=5/11のように、入力Xの値が小さい程、出力Yが大きく出力される特性を持つ処理である。ガンマ補正とはY=Xgf、gf=gi−1=11/5のように、入力Xの値が小さい程、出力Yが小さく出力される特性を持つである。本実施例では画素のbit精度が8なので、画素値に対して2−8倍した値を上記入力Xとする。また上記出力Yに対して28倍してbit精度を8に戻す。
ステップS500は、本サブフローチャート1の開始を示している。ステップS501は、近傍画像NI(xin,yin)と遠方画像FI(xin,yin)を入力する。X軸方向座標ポインタxin、Y軸方向座標ポインタyinの取り得る値は、共に0もしくは正の整数である。近傍画像NI(xin,yin)と遠方画像FI(xin,yin)のX軸方向表示解像度がrsl_x、Y軸方向表示解像度がrsl_yで表される場合、xin・yinの取る値の範囲は、それぞれ0≦xin<rsl_x、0≦yin<rsl_yである。本実施例ではrsl_x=2592、rsl_y=1728であるので0≦xin<2592、0≦yin<1728である。
ステップS502は、画像探索比SRを入力する。画像探索比SRの代わりに、近傍画像距離NIDと遠方画像距離FIDを入力してもよい。本実施例では、視差倍率PM=3と設定しているので、数1.3によりNID=1、FID=2であり、SR=0.5である。
ステップS503は、テンプレートマッチングにおける基準マッチング処理条件を入力する。基準マッチング処理条件は、X軸方向基準ブロックサイズBS_BASICx、Y軸方向基準ブロックサイズBS_BASICy、X軸方向基準片側探索範囲SS_BASICx、ピクセル探索精度PSAである。本実施例では、BS_BASICx=8、BS_BASICy=8、SS_BASICx=8、PSA=0.5である。
ピクセル探索精度PSAはPSA=2−n(n=0,1,2,3,・・・)のように、2の冪乗の値を取る。nの値が大きくなる程、次探索における探索ブロックの移動量が指数関数的に減るので探索精度が向上する。本実施例ではPSA=0.5であり、入力画像の画素ピッチに対してその半分の探索ブロック移動量でテンプレートマッチングを行なう、1/2画素精度探索となる。
尚、平行法両眼視差画像において、幾何光学上では発生しない画像のY軸方向に対する視差が、画像のボケや歪曲により発生する可能性がある。本実施例ではこれら画質劣化要因はないと仮定しているが、実用性を考えてこれらの画質劣化要因に対応可能な処理構成について説明する。そのため、上記の基準マッチング処理条件に更にY軸方向基準片側探索範囲SS_BASICyを追加する。本実施例ではSS_BASICy=3とする。
ステップS504は、画像探索比SRと基準マッチング処理条件を用いて、テンプレートマッチングにおける拡張マッチング処理条件を算出する。拡張マッチング処理条件は、X軸方向拡張ブロックサイズBS_EXTEDx、Y軸方向拡張ブロックサイズBS_EXTEDy、X軸方向拡張片側探索範囲 SS_EXTEDxである。BS_EXTEDx・BS_EXTEDy・SS_EXTEDxはそれぞれ以下の数1.5により算出される。数1.5より、BS_EXTEDx=32、BS_EXTEDy=32、SS_EXTEDx=16である。
尚、基準マッチング処理条件にY軸方向基準片側探索範囲SS_BASICyを追加している場合、本ステップにて算出される拡張マッチング処理条件に更にY軸方向拡張片側探索範囲SS_EXTEDyが追加される。SS_EXTEDyは以下の数1.6のように算出される。数1.6より、SS_EXTEDy=6である。
ステップS505は、本サブフローチャート1にて生成する視差マップPMAP(ax,ay)を初期化する。X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayの取り得る値は、共に0もしくは正の整数である。両画像データのX軸方向表示解像度がrsl_x、Y軸方向表示解像度がrsl_yで表される場合、ax・ayの取る値の範囲は、それぞれ以下の数1.7で表される。本実施例では
rsl_x=2592、rsl_y=1728であるので、0≦ax<324、0≦ay<216である。axとayの組合せは324×216=69987通りであり、これは視差マップ PMAP(ax,ay)の参照領域と一致する。
尚、以下の数1.8で表せるように、所定のX軸方向探索基準ブロックポインタaxm、およびY軸方向探索基準ブロックポインタaynを用いて視差マップを参照することで、所定のX軸方向視差ベクトルΔxm,n、および所定のY軸方向視差ベクトルΔym,nを取得することが可能である。
ステップS506は、探索基準ブロック座標(BBC_x,BBC_y)を更新させる。探索基準ブロックX座標BBC_x、探索基準ブロックY座標BBC_yは以下の数1.9で表される。
X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayはそれぞれ数1.7の範囲において全ての組合せを採る。ax・ayの組合せ順序は任意である。本実施例では便宜的に以下のような組合せ順序をax・ayを採用する。
X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayの初期値はax・ay共に0である。1つずつaxを増加させ、axが取る値の範囲を超えたら0にaxを戻すとともに、1つayを増加させる。以上のような操作により探索基準ブロック座標を更新させる。
ステップS507は、探索基準ブロック座標(BBC_X,BBC_Y)にあるブロック画像に対する、近傍画像NIと遠方画像FIのそれぞれのマッチング座標を算出する。近傍画像NI内のX軸方向マッチング座標をNMC_X、Y軸方向マッチング座標をNMC_Y、遠方画像FI内のX軸方向マッチング座標をFMC_X、Y軸方向マッチング座標をFMC_Y、は以下の数1.10で表される。
X軸方向マッチングポインタmxは−SS_EXTENDx≦mx≦SS_EXTENDxの範囲の値を取る。Y軸方向マッチングポインタmyは−SS_EXTENDy≦my≦SS_EXTENDyの範囲の値を取る。mx・myは共に整数の値を取る。
ここで、X軸方向視差ベクトルΔx、およびY軸方向視差ベクトルΔyは、以下の数1.11のように定義する。数1.11より、上述した距離変数ddは、dd=mx・PSA/FIDと表される。
ステップS508は、近傍画像NIからマッチング座標(NMC_X,NMC_Y)を基準位置とするブロック画像を取得する。マッチング座標(NMC_X,NMC_Y)は、X軸方向表示解像度がrsl_x、Y軸方向表示解像度がrsl_yの近傍画像NIをFID/PSA倍させた拡大近傍画像ENIに対する座標である。そこで、X軸方向表示解像度がrsl_x・FID/PSA、Y軸方向表示解像度がrsl_y・FID/PSAの拡大近傍画像ENIを得て、ENI(NMC_X,NMC_Y)を基準とする面積BS_EXTENDx・BS_EXTENDyのブロック画像BKNを得る。
近傍画像NIから拡大近傍画像ENIを生成する画像補間方法は、最近傍補間法、バイリニア法、バイキュービック法、その他の画像補間方法を用いて構わない。
尚、後述する実施例2にて、すでに近傍画像NIがFID/PSA倍に画像拡大されている場合は、ステップS508で近傍画像NIを拡大近傍画像ENIとして処理する。
ステップS509は、遠方画像FIからマッチング座標(FMC_X, FMC_Y)を基準位置とするブロック画像を取得する。マッチング座標(FMC_X, FMC_Y)は、X軸方向表示解像度がrsl_x、Y軸方向表示解像度がrsl_yの遠方画像FIをFID/PSA倍させた拡大遠方画像EFIに対する座標である。そこで、X軸方向表示解像度がrsl_x・FID/PSA、Y軸方向表示解像度がrsl_y・FID/PSAの拡大遠方画像EFIを得て、EFI(FMC_X,FMC_Y)を基準とする面積BS_EXTENDx・BS_EXTENDyのブロック画像BKFを得る。
遠方画像FIから拡大遠方画像EFIを生成する画像補間方法は、最近傍補間法、バイリニア法、バイキュービック法、その他の方法を用いて構わない。
尚、後述する実施例2にて、すでに遠方画像FIがFID/PSA倍に画像拡大されている場合は、ステップS509で遠方画像FIを拡大遠方画像EFIとして処理する。
ステップS510は、ブロック画像BKNとブロック画像BKFのマッチングを行なう。マッチング演算では、数1.12で示される相関係数や、数1.13で示されるSAD値(差分絶対値和)を算出する。また、上記の他にも最小二乗マッチング法を適用してもよい。マッチング演算により算出されるマッチング係数(相関係数やSAD値)を出力する。
ステップS511は、ステップS507で更新されたマッチング座標毎にステップS510で算出されるマッチング係数同士の比較を行なう。ステップS510におけるマッチング演算に相関係数を用いている場合、以前のマッチング演算結果の中で最もマッチングした(最も高い値を示した)マッチング演算結果Rpreと、今回のマッチング演算結果Rcurを用いて、以下の比較結果Re sultを算出する。
又、ステップS510におけるマッチング演算にSAD値を用いている場合、以前のマッチング演算結果の中で最もマッチングした(最も低い値を示した)マッチング演算結果SADpreと、今回のマッチング演算結果SADcurを用いて、以下の比較結果Resultを算出する。
Re sult=1の場合、以前のマッチング演算結果の中で最もマッチングした場合よりも、今回のマッチング演算結果の方がマッチングしている。そのため、今回のマッチング演算に用いたブロック画像を参照するために用いた視差ベクトルが、より正しい視差ベクトルであると判断して、ステップS512へ処理を進める。Re sult=0の場合、以前のマッチング演算結果の中で最もマッチングした場合の方が信頼できるマッチング結果であると判断して、今回のマッチング演算結果は棄却する。棄却した後にステップS514へ処理を進める。
ステップS512は、次回のステップS511におけるマッチング係数同士の比較を行なう際に用いるため、数1.16(マッチング演算に相関係数を用いている場合)ないし数1.17(マッチング演算にSAD値を用いている場合)で示されるように今回のマッチング演算結果を保持する。
ステップS513は、今回のマッチング演算において、X軸方向マッチング座標NMC_X、Y軸方向マッチング座標NMC_Yを算出する際に、同時に算出される数1.11で表されるX軸方向視差ベクトルΔxおよびY軸方向視差ベクトルΔyを保持する。又、以前のマッチング演算時から保持していた以前のX軸方向視差ベクトルΔxおよびY軸方向視差ベクトルΔyを破棄する。
ステップS514は、X軸方向マッチングポインタmx、Y軸方向マッチングポインタmyの取り得る値の組合せが全て試されたかを判定する。全て試されたならば探索基準ブロック座標(BBC_X,BBC_Y)に対するマッチングは完了したのでステップS515へ処理を進め、全て試さていないのならばステップS507へ戻る。
ステップS515は、視差マップPMAP(ax,ay)のメモリ位置に、探索基準ブロック座標(BBC_X,BBC_Y)におけるX軸方向視差ベクトルΔxおよびY軸方向視差ベクトルΔyを保存する。
ステップS516は、X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayの取り得る値の組合せが全て試されたかを判定する。本実施例では324×216=69984通り、全て試されたならば、視差マップPMAPは完成したのでステップS517へ処理を進め、全て試されていないのならばステップS506へ戻る。
ステップS517は、本サブフローチャート1の終了を示している。
ここで、ステップS507における補足説明を行なう。X軸方向マッチングポインタmxとY軸方向マッチングポインタmyの組合せ順序をスキャンスキームと定義する。スキャンスキームにて定義されたmxとmyの組合せ順序で、近傍画像NIと遠方画像FIのそれぞれのマッチング座標を算出していく。本実施例におけるスキャンスキームは以下のような規則で生成される。
規則:2つ絶対値が異なるX軸方向マッチングポインタmx1、mx2があり、|mx1|>|mx2|のとき、mx1よりもmx2を先に用いて組み合わせる。
図6を用いて上記のようなスキャンスキームを用いる理由を説明する。図6(a)におけるオブジェクト204と図6(b)におけるオブジェクト601は、仮想レフトカメラ207から見ると共に写像点209に写像される。また、オブジェクト204はオブジェクト601よりも仮想レフトカメラ207から見て遠くにある。また、602はレフトカメラ201におけるオブジェクト601の写像点であり、603はライトカメラ202におけるオブジェクト601の写像点である。
|mx1|>|mx2|のとき、図6(a)における写像点209と写像点205の距離と、図6(b)における写像点209と写像点602の距離を比較すると、写像点209から写像点205までの距離はNMC_X=BBC_X+mx2・NIDで表すことができる。また、写像点209から写像点602までの距離はNMC_X=BBC_X+mx1・NIDで表すことができる。
写像点209から仮想レフトカメラ207へ伸びる光線上に存在する二つのオブジェクト204と601は、mxlを用いて表される写像点209から写像点602までの距離をマッチングしたときの方が、仮想レフトカメラ207に対してオブジェクトが近景にあることがわかる。
近景オブジェクト601と遠景オブジェクト204が同時に仮想レフトカメラ207に記録されることは有り得ない。そのため、マッチング結果が同じ場合(マッチング係数が同じである場合)は、絶対値が大きいX軸方向マッチングポインタを用いて近景オブジェクト601をマッチングした結果を採用する。
以上が、本サブフローチャート1の説明である。
ステップS405は、視差マップPMAP(ax,ay)と平行法両眼視差画像を入力して、視差補償を行なうことで、仮想レフトカメラ視点PVLと仮想ライトカメラ視点PVRの画像を生成する。
図7を用いて実施例1における視差補償方法を説明する。図7は図4中のステップS405における視差補償処理のフローチャートである。尚、以下の説明では、視差補償処理のフローチャートを本サブフローチャート2と称する。
本サブフローチャート2に入力する平行法両眼視差画像は、本サブフローチャート1で入力した近傍画像NI(xin,yin)を入力する。又は、ステップS508で生成した拡大近傍画像ENIを入力する。どちらの2画像を入力しても本サブフローチャート2における処理結果は同じである。このため、ソフトウェアの実装形態に適した方を入力すればよい。即ち、メモリ使用量を低減したいのであれば、拡大近傍画像ENIを処理中保持するのは得策ではないため、画像拡大前の近傍画像NI(xin,yin)を入力するようにした方がよい。また、処理速度を速めたいのであれば、画像拡大処理は1回に留める方が良く、画像拡大後の拡大近傍画像ENIを入力した方がよい。
又、以下の処理ステップでは、面順次のRGBフォーマットの画像データの内、Rの画像領域だけを用いて行なう。Gの画像領域とBの画像領域については、Rの画像領域を用いて行なう処理を同じであるので、説明を省略する。
又、本実施例では、本処理プログラム2が実行される前に、両画像データとも、レンズ収差による歪曲・色割れ・撮像素子のセンサーノイズ・符号化ノイズは、必要に応じてこれらの画質劣化要因に対する補正処理が予め実行されており、これらの画質劣化要因によりテンプレートマッチングでマッチングミスが起こらないものとする。
又、画像信号がガンマ逆補正されている場合は本処理プログラム2が実行される前にガンマ補正を行なうものとする。また、本処理プログラム2が実行された後にガンマ逆補正を行ない、入力画像データのガンマ特性に戻すものとする。ガンマ逆補正・ガンマ補正は本処理プログラム1で説明した内容と同じなので説明を省略する。
又、以下の処理ステップでは、ステップS404の処理説明同様に、仮想レフトカメラ207が仮想的に撮像をした仮想レフト視点画像を生成する処理について説明する。
ステップS700は、本サブフローチャート2の開始を示している。ステップS701は、近傍画像NI(xin,yin)、もしくは拡大近傍画像ENIを入力する。ステップS702は、視差マップPMAP(ax,ay)を入力する。
ステップS703は、本サブフローチャート2にて生成する視差補償画像PPI(xout,yout)の生成・初期化を行なう。X軸方向座標ポインタxout、Y軸方向座標ポインタyoutの取り得る値は、共に0もしくは正の整数である。視差補償画像PPI(xout,yout)のX軸方向表示解像度がrsl_x、Y軸方向表示解像度がrsl_yで表される場合、xout・youtの取る値の範囲は、それぞれ0≦xout<rsl_x、0≦yout<rsl_y、である。本実施例ではrsl_x=2592、rsl_y=1728であるので0≦xout<2592、0≦yout<1728である。
ステップS704は、X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayを更新する。X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayはそれぞれ数1.7の範囲において全ての組合せを採る。ax・ayの組合せ順序は任意である。本実施例では便宜的に以下のような組合せ順序をax・ayを採用する。
X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayの初期値はax・ay共に0である。1つずつaxを増加させ、axが取る値の範囲を超えたら0にaxを戻すとともに、1つayを増加させる。以上のような操作により探索基準ブロック座標を更新させる。
ステップS705は、所定のX軸方向探索基準ブロックポインタaxm、およびY軸方向探索基準ブロックポインタaynを視差マップPMAP(ax,ay)に対する入力として、数1.8より、所定のX軸方向視差ベクトルΔxm,n、および所定のY軸方向視差ベクトルΔym,nを取得する。
ステップS706は、視差ベクトルを用いて貼付するブロック画像を取得する。まず、数1.11を変形させた数1.18より、取得されたΔxm,n・Δym,nから探索基準ブロック座標(BBC_X,BBC_Y)に対するオフセットmx・NIDおよびmy・NIDを算出する。
次に、算出したオフセットmx・NIDおよびmy・NIDを用いて、数1.10より貼付するブロック画像の基準座標値NMC_X・NMC_Yを算出する。
ここで、ステップS701にて近傍画像NI(xin,yin)と遠方画像FI(xin,yin)を入力する場合、X軸方向表示解像度がrsl_x・FID/PSA、Y軸方向表示解像度がrsl_y・FID/PSAの拡大近傍画像ENIを得て、ENI(NMC_X,NMC_Y)を基準とする面積BS_EXTENDx・BS_EXTENDyのブロック画像BKNを得る。
ステップS701にて拡大近傍画像ENIおよび拡大遠方画像EFIを入力する場合、すでに拡大近傍画像ENIを得ているので、ENI(NMC_X,NMC_Y)を基準とする面積BS_EXTENDx・BS_EXTENDyのブロック画像BKNを得ればよい。
ステップS707は、視差補償画像PPI(xout,yout)に取得したブロック画像BKNを貼り付ける。ここでブロック画像BKNは拡大近傍画像ENIから取得されているので、拡大前の近傍画像NIの表示解像度に戻す必要がある。ブロック画像BKNに対して、X軸方向にPSA・SR倍、Y軸方向にPSA/FID倍、それぞれ縮小させる。その後、視差補償画像PPI(xout,yout)内における下記の数1.19で表される貼付け座標位置(CBC_x,CBC_y)に縮小させたブロック画像BKNを貼り付ける。
尚、後述する実施例2にて、近傍画像NIおよび遠方画像FIがFID/PSA倍に画像拡大されている場合は、ステップS707では画像縮小処理を行なわずに以下の数1.20で表される貼付け座標位置(CBC_x,CBC_y)に縮小させたブロック画像BKNを貼り付ける。
ステップS708は、X軸方向探索基準ブロックポインタax、Y軸方向探索基準ブロックポインタayの取り得る値の組合せが全て試されたかを判定する。本実施例では324×216=69984通り、全て試されたならば、視差補償画像PPI(xout,yout)は完成したのでステップS709へ処理を進め、全て試されていないのならばステップS704へ戻る。
ステップS709は、本サブフローチャート2の終了を示している。以上が、本サブフローチャート2の説明である。
ステップS406は、本処理プログラム1の終了を表す。以上が、本処理プログラム1の説明である。
以上の説明から明らかなように、本実施例で行なう視差再調節処理では、レフトカメラ画像・ライトカメラ画像を用いて、仮想レフトカメラ画像・仮想レフト画像を生成することで、レフトカメラ画像・ライトカメラ画像に付いている視差を再調節できることわかる。
又、本実施例で行なう視差ベクトル検出により生成される視差マップを視差補償時に用いることで、従来の視差補償時発生していた補償画像の非参照領域が発生しなくなるため、画質が向上することがわかる。
尚、視差倍率PM=1の場合、数1.3より近傍画像距離NID=1となる。この場合、数1.11よりX軸方向視差ベクトルΔx、およびY軸方向視差ベクトルΔyは共に0になる。数1.18で示されるオフセットmx・NIDおよびmy・NIDも0になり、視差補償画像PPI(xout,yout)は近傍画像NI(xin,yin)と等しくなる。このため、ステップS404およびステップS405の処理を行なわずに、視差補償画像PPI(xout,yout)として近傍画像NI(xin,yin)を出力してもよい。
尚、本実施例で用いた平行法両眼視差画像は必ずしも2つないし複数のカメラから取得する必要はない。単一のカメラから任意の視野や焦点に設定された画像を再構築できるものもある。このようなカメラの場合、単一の記録素子上で記録された画像データからも平行法両眼視差画像は生成可能である。このため、本実施例ではそのような単一のカメラを用いて生成された平行法両眼視差画像も使用可能である。
以上説明したように、本実施例によれば、視差倍率PMが0≦PM<∞の範囲における実数値を取ることができるので、異なる2視点から撮像された画像における視差再調節処理において、従来技術では実現できなかった撮像カメラ位置間よりも外側の仮想視点画像を生成することができる。
(実施例2)
本実施例では視差倍率PMを用いて、交差法にて撮像された両眼視差画像である交差法両眼視差画像の視差をPM倍に再調節する。尚、実施例2の説明において、実施例1と内容が重複する箇所は説明を省略する。
図8(a)を用いて交差法両眼視差画像について定義する。図8は、図1に示3次元空間において、Y軸方向の負から正の方向へ見たときの視点からXZ平面102を見た模式図である。801はレフトカメラであり、両眼視差画像における左目視点の画像を撮像する。802はライトカメラであり、両眼視差画像における右目視点の画像を撮像する。803はレフトカメラの撮像素子平面に対応するレフトカメラ無限遠方XY平面である。804はライトカメラの撮像素子平面に対応するライトカメラ無限遠方XY平面である。805はオブジェクトである。806はレフトカメラ無限遠方XY平面におけるレフトカメラでのオブジェクトの写像点である。807はライトカメラ無限遠方XY平面におけるライトカメラでのオブジェクトの写像点である。
交差法両眼視差画像においては、レフトカメラ視点PLとライトカメラ視点PRの関係は、以下の数2.1のとおりとする。尚、数2.1のdはカメラ視点注視点間距離である(詳細は後述する)。θpは視点間傾斜半値角である。のθp取る値の範囲は0≦θp<π/2である。交差法にて撮像された交差法両眼視差画像は、画像を取得するレフトカメラの視点PLとライトカメラの視点PRとの差、即ち基線距離aがa=2d・sin(θp)=|xL−xR|、Y軸方向回転角の差ΔθyがΔθy=2θp=|θyL−θyR|で表されるときの両眼視差画像である。
次に図8(b)を用いて再調節するPM倍の視差について定義する。808は仮想レフトカメラであり、再調節された視差を持つ両眼視差画像のうち、左目視点の画像を撮像する。809は仮想ライトカメラであり、再調節された視差を持つ両眼視差画像のうち、右目視点の画像を撮像する。810は仮想レフトカメラの撮像素子平面に対応する仮想レフトカメラ無限遠方XY平面である。811は仮想ライトカメラの撮像素子平面に対応する仮想ライトカメラ無限遠方XY平面である。812は仮想レフトカメラ無限遠方XY平面における仮想レフトカメラでのオブジェクトの写像点である。813は仮想ライトカメラ無限遠方XY平面における仮想ライトカメラでのオブジェクトの写像点である。
交差法両眼視差画像においては、仮想レフトカメラ視点PVLと仮想ライトカメラ視点PVRの関係は、以下の数2.2のとおりとする。即ち、PM倍の視差を再調節することは、レフトカメラの視点PLとライトカメラの視点PRとの基線距離aがsin(PM・θp)/sin(θp)倍された位置に位置して、Y軸回転角の差ΔθyがΔθy=2PM・θp=|θyVL−θyVR|と、レフトカメラの視点PLとライトカメラの視点PRに付いている視点間傾斜半値角θpに対してPM倍された仮想レフトカメラ視点PVLと仮想ライトカメラ視点PVRの画像を生成することである。
尚、本実施例ではa=1(cm)として処理を行なうが、本発明においてa
の長さを限定するものではない。また、視点間傾斜半値角θp=π/180(rad)として処理を行なうが、本発明において視点間傾斜半値角θpの値を限定するものではない。
視差倍率PMは0≦PM<∞の範囲における実数値を取ることができる。視差倍率PMがPM=0の場合、視点PVLと視点PVRの基線距離|xVL−xVR|が|xVL−xVR|=0となり、Y軸回転角の差ΔθyがΔθy=0となり、視差が0になる。視差倍率PMが0<PM<1の場合、|xVL−xVR|<aとなり、Δθy<2θPとなり、視差が両眼視差画像よりも小さくなる。視差倍率PMがPM=1の場合、|xVL−xVR|=aとなり、Δθy=2θPとなり、視差は入力される両眼視差画像と等しくなる。視差倍率PMが1<PM<∞との場合、|xVL−xVR|>aとなり、Δθy>2θPとなり、視差は入力される両眼視差画像よりも大きくなる。
交差法両眼視差画像における平行法両眼視差画像との違いは、レフトカメラ無限遠方XY平面803とライトカメラ無限遠方XY平面804はレフトカメラとライトカメラの視点間に付いている|θyL−θyR|に一致する傾斜を有していることである。それに伴い、写像点806と写像点807の間にはZ軸方向の差異が発生する。
又、レフトカメラ無限遠方XY平面803と仮想レフトカメラ無限遠方XY平面810は、再調節するPM倍の視差に応じて、|(PM−1)θp|の角度が付いている。それに伴い、写像点806と写像点812の間にはZ軸方向の差異が発生する。
実施例1で記載した処理は、XY平面において定義される2次元の画像を用いて視差を検出して、検出した視差を補償するものである。このためZ軸方向の差異を検出すること、およびZ軸方向の差異を補償することは、いずれも不可能である。この点において、交差法両眼視差画像の視差再調節処理は平行法両眼視差画像の視差再調節処理よりも難しい。
図9は、CPU301が処理する本発明の視差再調節プログラム(以下、本処理プログラム2と略す)を説明するフローチャートである。本フローチャートで表される本処理プログラム2は、通常、外部記憶装置307に記録されており、処理を開始するにあたりCPU301が外部記憶装置307から読み込んで、RAM303に展開する。
ステップS901は、本処理プログラム2の開始を表す。ステップS902は、視差倍率PMを設定する。本実施例ではPM=3とし、入力する両画像データに付いている視差を通常とした場合、通常の3倍に視差を再調節するように設定する。ステップS903は、視点間傾斜半値角θpを入力する。
ステップS904は、画角θLenを入力する。画角θLenは、レフトカメラ801およびライトカメラ802が撮像時に用いた撮像レンズの画角である。本実施例では広角レンズに分類される画角θLen=π/2(rad)とする。また、簡単のため、本実施例ではレフトカメラ801の画角θLen_Leftと、ライトカメラ802の画角θLen_Rightは同じとして、共に画角θLenで表す。また、画角は撮像時のズーム倍率によっても変わる。また、絞り値を設定することで変わる入射瞳径の大きさによっても変わる。本実施例で用いる画角θLenはズーム倍率・絞り値によるお入射瞳径も考慮したものとして扱う。
ステップS905は、投影変換を行ない、レフトカメラ無限遠方XY平面803と、レフトカメラ無限遠方XY平面804を、共通無限遠方XY平面に投影変換する。
図10を用いて共通の無限遠方XY平面への投影変換方法を説明する。図10(a)は新たに定義するX’Z’座標系を用いて図示されるレフトカメラ視点801とレフトカメラ無限遠方XY平面803の模式図である。X’Z’座標系における原点は、XZ座標系と同じ原点103である。又、X’Z’座標系はXZ座標系に対してY軸回転角が視点間傾斜半値角θPだけ傾いている。X’Z’座標系にてZ軸はz’=−x’/tan(θP)で表される。また、X軸は以下の数2.3で表される。
図10(a)において、103はXYZ三次元空間における原点、801はレフトカメラ視点、803はレフトカメラ無限遠方XY平面、805はオブジェクト、806はオブジェクト805のレフトカメラ無限遠方XY平面803における写像点、1001はレフトカメラ無限遠方XY平面803の左側端点、1002はレフトカメラ無限遠方XY平面803の右側端点、1003はレフトカメラ無限遠方XY平面803に平行で、原点103を含む位置に存在するレフトカメラ有限近傍XY平面、1004はレフトカメラ有限近傍XY平面1003の左側端点、1005はレフトカメラ有限近傍XY平面1003の右側端点、1006はオブジェクト805のレフトカメラ有限近傍XY平面1003における写像点、1007はX軸に平行で、原点103を含む位置に存在するレフトカメラ有限近傍投影変換XY平面、1008はレフトカメラ有限近傍投影変換XY平面1007における写像点、1009はレフトカメラ有限近傍投影変換XY平面1007の左側端点、1010はレフトカメラ有限近傍投影変換XY平面1007の右側端点、1011はレフトカメラ有限近傍投影変換XY平面1007の出力画像における左側端点、1012はレフトカメラ有限近傍投影変換XY平面1007の出力画像における右側端点である。
レフトカメラ無限遠方XY平面803は撮像素子平面に対応するので、左側端点1001と右側端点1002が成す線分の長さは、レフトカメラ画像のX軸方向の長さと一致する。
レフトカメラ有限近傍XY平面1003は、レフトカメラ無限遠方XY平面803に平行である。また、レフトカメラ視点801・左側端点1001・右側端点1002が成す三角形Eと、レフトカメラ視点801・左側端点1004・右側端点1005が成す三角形Fは相似であり、相似比はE:F=∞:dである。このレフトカメラ有限近傍XY平面1003も撮像素子平面に対応する。レフトカメラ画像のX軸方向の長さを2w(pixel)とすると、左側端点1004と右側端点1005が成す線分の長さも2wである。
原点103をO(0,0)、左側端点1004をW(w,0)、写像点1006をW0(xin,yin,zin)、レフトカメラ視点801をD(0,d)、写像点1008をQ(xout,yout,zout)、とする。xinの取る値の範囲は−1≦xin≦1、yinの取る値の範囲は−1≦yin≦1である。左側端点1001・左側端点1004・原点103のなす角をθLと定義する。θLは以下の数2.4により表される。
W(w,0)と D(0,d)を結ぶ線分の方程式は以下の数2.5で表される。
オブジェクト805・写像点1006・原点103のなす角をθ0と定義すると、W0(xin,yin,zin)とD(0,d)を結ぶ線分の方程式は以下の数2.6で表される。
z’=zin=0のとき、数2.5と数2.6より、dとθ0は以下のように求められる。
数2.6に数2.7を代入することで数2.8が得られる。
左側端点1009と原点103を結ぶ線分の方程式は数2.3と一致する。x’=xoutのとき、数2.3と数2.8はQ(xout,yout,zout)で交わる。xoutは以下の数2.9のように求められる。
図10(b)は、新たに定義するX’Y’Z’直交座標系を用いて、三次元空間101を表した模式図である。X’Y’Z’直交座標系における原点は、XYZ直交座標系と同じ原点103である。又、X’Y’Z’直交座標系はXYZ直交座標系に対してY軸回転角が視点間傾斜半値角θPだけ傾いている。
1013は写像点1006に対して、X’座標値、Z’座標値が等しく、Y座標値が0となる点である。1014は写像点1008Q(x’,y’,z’)に対して、X’座標値、Z’座標値が等しく、Y座標値が0となる点である。1015は写像点1008Q(x’,y’)に対して、Z’座標値が等しく、X’座標値、Y座標値が0となる点である。
レフトカメラ視点801と写像点1006を結ぶ線分Eと、レフトカメラ視点801と写像点1008を結ぶ線分Fの比は、レフトカメラ視点801と原点103を結ぶ線分と、レフトカメラ視点801と点1015を結ぶ線分の比に等しい。
さらに、レフトカメラ視点801と原点103を結ぶ線分と、レフトカメラ視点801と点1015を結ぶ線分の比は、原点103と写像点1013を結ぶ線分と、点1015と写像点1014を結ぶ線分の比に等しい。
写像点1006のy座標値をyin、写像点1008のy座標値をyoutとすると、上記の関係は以下の数2.10で表すことができる。数2.10より、youtはyinとxinを用いて表すことができる。
写像点1008Q(xout,yout)は、数2.4、数2.9および数2.10より、レフトカメラ画像のX軸方向の長さを2w、画角θLen、視点間傾斜半値角θPおよびxinとyinを用いて表すことができる(尚、Q(zout)もyinとxinを用いて表すことができるが後の処理で用いないため説明を省略する)。
ライトカメラに関しては図示しないが、ライトカメラ無限遠方XY平面804からライトカメラ有限近傍投影変換XY平面を求める場合、数2.3の視点間傾斜半値角θPを−θPに置換すればよい。
即ち、数2.11において定数である、画角θLen(ズーム倍率・絞り値によるお入射瞳径を考慮している)、視点間傾斜半値角θP、入力画像のX軸方向の長さ2wの3つ定数により、レフトカメラ画像の座標値W0(xin,yin)を入力して、z≡0の投影面への投影変換座標値Q(xout,yout)を得ることができる。
レフトカメラ有限近傍投影変換XY平面1007と、図示しないライトカメラ有限近傍投影変換XY平面のZ軸方向の差異ΔzはΔz≡0となり、これらが共通無限遠方XY平面となる。Δz≡0となる共通の無限遠方XY平面において、Z軸方向の位置ずれが交差法両眼視差画像対になくなる。このため、2次元の画像同士のテンプレートマッチングにて正確に視差ベクトルを検出することが可能になる。
上記投影変換を行なうことで得られる座標を図11に示す。レフトカメラ801とライトカメラ802は図に示すCGチャートに対して、それぞれ視点間傾斜半値角θP傾いているので、得られる画像は、画素位置ごとにX軸方向・Y軸方向にそれぞれ歪んでいる。これを投影変換することで、歪みのない画像を得る。歪みのない画像同士はオブジェクトのZ軸方向の距離に応じて記録されるオブジェクトのずれがX軸方向にのみ発生する。本実施例において、テンプレートマッチングに先立ち、交差法両眼視差画像対を投影変換するのは、上記に示した理由によるものである。
図12を用いてステップS905における投影変換方法を説明する。図12は図9中のステップS905における投影変換処理のフローチャートである。尚、以下の説明では、投影変換処理のフローチャートを本サブフローチャート3と称する。
本サブフローチャート3に入力する交差法両眼視差画像は、表示解像度、画素のbit精度、カラースペース・カラーフォーマット・撮像に用いたレンズの画角θLenが一致しているものとする。
又、本実施例では、入力する交差法両眼視差画像は両画像データとも、以下のように記録されているものとする。
表示解像度:2592×1728(pixel2)、カラースペース:RGB、カラーフォーマット:RGB(面順次)、画素のbit精度:8(bit)、画角:θLen=π/2(rad)
又、以下の処理ステップでは、面順次のRGBフォーマットの画像データの内、Rの画像領域だけを用いて行なう。Gの画像領域とBの画像領域については、Rの画像領域を用いて行なう処理を同じであるので、説明を省略する。
又、以下の処理ステップでは、レフトカメラ画像の投影変換について説明する。上述したように、レフトカメラ画像の投影変換とライトカメラの投影変換の違いは、視点間傾斜半値角θPの正負が異なるだけであるので、ライトカメラ画像の投影変換については説明を省略する。
ステップS1200は本サブフローチャート3の開始を示している。ステップS1201はX軸方向画像サイズおよびY軸方向画像サイズを入力する。本実施例ではX軸方向画像サイズ=2592、Y軸方向画像サイズ=1728である。ステップS1202は画角θLenを入力する。ステップS1203は視点間傾斜半値角θPを入力する。
ステップS1204は投影変換傾斜角θPPを算出する。S905における投影変換では、以下の数2.12のように投影変換傾斜角θPPを算出する。φは投影変換補正角である。本実施例ではφ=0とする。
ステップS1205はメモリ上に投影正変換座標順参照マップProjMapI(x,y)および投影変換座標逆参照マップProjMapI(x,y)を生成する。
ステップS1206は投影変換座標マップを算出する。入力画像を構成する画素のX座標値とY座標値の全ての組合せを取り、数2.11を用いて投影変換後の座標値を算出する。数2.11はx
座標、y座標がそれぞれ−1≦xin≦1、−1≦yin≦1でスケーリングされているので、入力画像の表示解像度にあわせてリスケーリングする。入力画像のX軸方向表示解像度をResl_x、Y軸方向表示解像度をResl_yとすると、以下の数2.13のようにリスケーリングした出力画像の座標値(xrout,yrout)を得る。
投影変換前の座標値を(xin,yin)、投影変換後の座標値を(xout,youtn)とすると、以下の数2.13により、(xin,yin)から(xrout,yrout)を得る。算出した(xrout,yrout)は(xin,yin)とマッピングして保持する。
投影正変換座標順参照マップProjMapF(x,y)は、入力座標値(xin,yin)を入力して、出力座標値(xrout,yrout)を出力するマップである。ここで、数2.13の出力座標(xrout,yrout)は小数を取り、出力画素間距離が整数値間隔とならないため、非参照出力座標値が発生する。そのため、出力座標(xout,yout)を入力として、入力座標値(xin,yin)を出力する投影変換座標逆参照マップProjMapI(x,y)を生成することで、非参照出力座標値の発生を抑える。投影変換座標逆参照マップProjMapI(x,y)を生成するために、(xin,yin)について数2.11を解くと、以下の数2.15で表される投影逆変換関数を得ることができる。
数2.15において、(xout,yout)の取る値の範囲は、−1≦xout≦1、−1≦yout≦1である。このため、入力画像の表示解像度にあわせてリスケーリングすることで、以下の数2.16のようにリスケーリングした入力画像の座標値(xrin,yrin)を得る。
投影逆変換関数を用いて算出した(xrin,yrin)は(xout,yout)とマッピングして保持する。
尚、数2.11や数2.15において、tan(θL)、w・tan(θL)、tan(θP)などの定数項は、本ステップの処理の前で算出可能である。予め算出してメモリに保持して、適宜読み込むようにしても良い。また、入力される画像サイズが限定されているなら、投影順変換座標マップProjMapF(x,y)および投影逆変換座標マップProjMapI(x,y)を予め計算して、メモリに保持して、適宜読み込むようにしても良い。
ステップS1207は投影変換座標拡大倍率ex_magを算出する。本実施例の投影変換では、数2.11や数2.15から明らかなように、出力画像の画素間距離が入力画像の画素間距離に対して広がる領域と狭まる領域がある。画素間距離が広がる領域に対しては、投影変換により画像拡大処理がなされ、画素間距離が狭まる領域に対しては、画素補間および再標本化処理により画像縮小される。ここで画像縮小が起こる領域は空間周波数特性が、入力画像の対応領域に対して損なわれてしまう。
そのため、最も画素間距離が狭まる領域における狭まる割合を算出して、投影変換座標値に乗じることで、投影変換後全ての画像領域において画像拡大処理にすることで、入力画像の空間周波数特性を保存する。
本処理ステップにおける投影変換は、視差再調節画像を出力するためではなく、精度よく視差ベクトルを検出するために行なう処理である。そのため、画像の表示解像度を保存する必要はなく、後に画像の表示解像度を戻すのであれば、画像拡大しても出力画像の表示解像度が変わることはない。
画素間距離が狭まる割合を縮小率red、最も画素間距離が狭まる割合を最大縮小率max_redとする。
縮小率redは入力画像を構成する画素のX座標値とY座標値の全ての組合せを取るため、縮小率マップred(x,y)が算出できる。入力画像のxy座標値がxm・ynのとき、 red(xm,yn)は以下の数2.18で示されるように、投影変換前と後での隣接画素間の距離比となる。
最大縮小率max_redは、数2.18により算出された縮小率マップred(x,y)おける縮小率redの最小値である。最大縮小率max_redの逆数を投影変換座標拡大倍率ex_magとして出力する。max_red≦1であり、1<x_magである。尚、ex_magは小数値であるため、算出されたex_magよりも大きい整数値でex_magを置換しても構わない。また、実施例1で説明したように、本発明の視差マップ生成処理ではFID/PSA倍に画像を拡大させるので、この投影変換時に最大縮小率ex_mag=FID/PSAとしてもよい。
また、入力される画像サイズが限定されているなら、数2.11から、変換座標値がわかるため、投影変換処理に先立ちex_magを算出することも出来るため、メモリに保持して、適宜読み込むようにしても良い。
ステップS1208は投影変換座標拡大倍率ex_magを用いて、投影正変換座標順参照マップProjMapF(x,y)および投影変換座標逆参照マップProjMapI(x,y)を倍率補正する。出力座標値(xrout,yrout)および入力座標値(xrin,yrin)から倍率補正出力座標値(xreout,yreout)および倍率補正入力座標値(xrein,yrein)を算出する。
ステップS1209は投影変換後の出力画像データ領域を生成して初期化する。入力画像データ領域に対してX軸・Y軸ともex_mag倍した領域を生成する。
ステップS1210はレフトカメラ画像を入力する。
ステップS1211は画像の表示解像度と投影変換後の座標値を(xout,yout)を比較して、端部判定を行なう。図10(a)に示すように、投影変換後座標値(xout,yout)には、レフトカメラ有限近傍投影変換XY平面1007の出力画像における左側端点1011と、レフトカメラ有限近傍投影変換XY平面1007の左側端点1009を結ぶ線分のように、投影変換前に対応する画素がないために投影変換できない領域がある。投影逆変換関数を用いて、この領域を特定する。投影逆変換関数の出力値が画像の表示解像度外の値であった場合、投影変換不能であるとして、ステップ1213へ処理を進める。表示解像度内の値であった場合、投影変換可能であるとして、ステップ1212へ処理を進める。
ステップS1212は投影逆変換関数の出力値(xrin,yrin)を用いて、投影変換後の座標値を(xreout,yreout)に対する画素値を生成する。図13に示すように、投影変換後の整数値間隔の画素の配置座標位置に対して、(xrin,yrin)は小数値を取る。補間においては、最近傍補間法を用いる場合は、xrin,yrinを絶対値が最も近い整数値に変換する。絶対値が最も近い整数値に変換したxrin,yrinの位置にある画素値を(xrout,yrout)に貼り付ける。
最近傍補間法以外にもバイリニア補間法やバイキュービック補間法などを用いても良い。
図13ではバイキュービック補間法における入力画素の選定方法を図示している。図13において、Dで表される出力座標値に対して、対応する小数精度の(xrin,yrin)が取得できる。絶対値が最も近い整数値に(xrin,yrin)を変換することで図13における(xrin,yrin)で示される入力画素を特定する。特定された入力画素を用いてCで示される近傍16点を選定することで、Dをバイキュービック補間するための入力画素を得る。
生成した(xrout,yrout)に対応する画素から、数2.19により画像を補間して画像を拡大させる。この時も上記説明した画素補間法を適用することが出来る。
ステップS1213は、入力x座標値、入力y座標値の取り得る値の組合せが全て試されたかを判定する。本実施例では2592×1728=4478976通り、全て試されたならば、投影変換処理は完成したのでステップS1214へ処理を進め、全て試されていないのならばステップS1211へ戻る。ステップS1214は本サブフローチャート3の終了を示している。
以上が、本サブフローチャート3の説明である。
ステップS906は、画像探索比SRを算出する。画像探索比SRは、近傍画像距離NIDと遠方画像距離FIDの比である。図14を用いて実施例2における近傍画像距離NIDおよび遠方画像距離FIDの算出方法を説明する。
1401はライトカメラ有限近傍XY平面、1402は仮想レフトカメラ有限近傍XY平面、1403はライトカメラ有限近傍XY平面におけるオブジェクト805の写像点、1404は共通有限近傍XY平面(レフトカメラ有限近傍投影変換XY平面1007に等しく、図示しないライトカメラ有限近傍投影変換XY平面に等しい)におけるライトカメラ視点からオブジェクト805の写像点、1405は仮想レフトカメラ有限近傍XY平面1402におけるオブジェクト805の写像点、1406は共通有限近傍XY平面における仮想レフトカメラ視点からオブジェクト805の写像点、1407はレフトカメラ視点補正位置、1408はライトカメラ視点補正位置である。
共通有限近傍XY平面において、オブジェクト805がレフトカメラ視点801からは写像点1008に、ライトカメラ視点802からは写像点1404にそれぞれ写像されるとき、仮想レフトカメラ視点808からは写像点1406に写像される。そのため、視差マップ生成処理においては、写像点1406に探索基準位置を設定したとき、近傍画像距離NID:遠方画像距離FID=|写像点1406−写像点1008|:|写像点1406−写像点1404|となるように、画像探索比SRを設定することで、写像点1406を基準とする視差ベクトル検出ができる。
この近傍画像距離NID:遠方画像距離FIDを、各カメラの配置座標を用いて算出する。交差法両眼視差画像における画像探索比SRを求める上で注意すべき点は、仮想レフトカメラ視点808はレフトカメラ視点801とライトカメラ視点802に対してZ軸方向に位置ずれが生じている点である。そこで、写像点1406と仮想レフトカメラ視点808を通る直線において、レフトカメラ視点801のZ軸方向座標値と等しくなる位置に、仮想レフトカメラ視点補正位置1407を設定する。
ここで、近傍画像距離NID:遠方画像距離FID=|写像点1406−写像点1008|:|写像点1406−写像点1404|=|仮想レフトカメラ視点補正位置1407−レフトカメラ視点801|:|仮想レフトカメラ視点補正位置1407−ライトカメラ視点802|であることから、近傍画像距離NID、遠方画像距離FID、および画像探索比SRを算出する。
写像点1406をW0(xrin,0)とする。W0(xrin,0)とPVL(xVL,zVL)を通る直線の関数は、数2.1および数2.2の定義を用いて以下の数2.20で表すことができる。
仮想レフトカメラ視点補正位置1407をPVL(xPVLP,zPVLP)とすると、これは数2.20で示される直線の関数上に存在する。zPVLPの=ZL=ZR=d・cos(θP)
とき、xPVLPは以下の数2.21で表すことができる。
数2.4で求められたθL=π/2+θLen/2、数2.7で求められたd=−w・tan(θL)、および数2.21で求められたxPVLPを用いて、近傍画像距離NID:遠方画像距離FIDは以下の数2.22のように求めることが出来る。
数2.22から明らかなように、交差法両眼視差画像の視差ベクトル検出では、画像探索比SRが探索基準位置(写像点1406)xrinに依存する。このため、探索比マップSRMAP(x)を生成して、全てのx座標値における画像探索比SRを算出する。
尚、数2.22において、tan(θL)、cos(θP)などの定数項は、本ステップの処理の前で算出可能なので、メモリに保持して適宜読み込むようにしても良い。また、入力される画像サイズ・視点間傾斜半値角θP・視差倍率PMが限定されているなら、探索比マップSRMAP(x)は予め計算可能であるため、メモリに保持して適宜読み込むようにしても良い。
また、数2.22で表される画像探索比SRは、従来法の視差補償において視差ベクトルから補償画素位置を算出する際の補正倍率に相当する。従来法の視差ベクトル検出では、写像点1008と写像点1404がマッチングすると、レフトカメラ視点801と写像点1008を結ぶ直線の関数と、ライトカメラ視点802と写像点1404を結ぶ直線の関数の交点であるオブジェクト805の座標値を求めて、オブジェクト805と仮想レフトカメラ視点808を結ぶ直線の関数において、写像点1406を算出することが可能である。この写像点1406の座標値を算出することが、本発明における画像探索比SRを算出することに相当する。
従来の視差ベクトル検出では、写像点1406の座標値の算出をマップ化すると、探索の単位であるブロックの個数とブロックあたりの探索回数の積のオーダーになる。これに対して探索比マップSRMAP(x)は、ブロックの個数分だけ持てばよい。本実施例では、ブロックあたりの探索回数24なので、マップの面積を1/24にできる。
尚、実施例1同様に、実施例2でもNIDとFIDは最も単純な整数の比で表すように値を修正する。これは画像データが離散化されていることに起因する。連続データとして画像データを扱える環境であれば、値を修正する必要は無い。
ステップS907は、ステップS905により共通無限遠方XY平面に投影変換された左目視点の画像および右目視点の画像を用いて、視差ベクトル検出を行ない、視差マップを生成する。投影変換された近傍画像における、探索基準ブロック座標とNIDとに応じたブロック画像と、投影変換された遠方画像における、該探索基準ブロック座標とFIDに応じたブロック画像とを用いて、探索基準ブロック座標に対応する視差ベクトルを決定する。本処理は実施例1で説明した処理と一致するので、本実施例では説明を省略する。
ステップS908は、視差マップPMAP(ax,ay)と投影変換後交差法両眼視差画像を入力して、視差補償を行なうことで、仮想レフトカメラ視点PVL用補償画像と仮想ライトカメラ視点PVR補償画像を生成する。本処理は実施例1で説明した処理と一致するので、本実施例では説明を省略する。
ステップS909は、仮想レフトカメラ視点PVL用補償画像を投影変換して仮想レフトカメラ視点PVL画像を生成する。図15を用いて実施例2における処理パイプラインにおける本ステップの処理の位置付けを説明する。
図15において、1501はレフトカメラ有限近傍投影変換XY平面1007(図示しないライトカメラ有限近傍投影変換XY平面と一致する共通有限近傍XY平面)上における、写像点1008を視差補償した視差補償写像点、1502は仮想レフトカメラ有限近傍投影変換XY平面、1503は仮想レフトカメラ有限近傍投影変換XY平面1502における視差補償写像点である。
レフトカメラ801は視点間傾斜半値角θP傾いており、レフトカメラ無限遠方XY平面803において写像点806にオブジェクト805を写像する。
オブジェクト805はレフトカメラ有限近傍XY平面1003において、写像点1006に写像される。
ステップS905における投影変換により、生成されるレフトカメラ有限近傍投影変換XY平面1007において、写像点1006は写像点1008へ写像される。
レフトカメラ有限近傍投影変換XY平面1007において、写像点1008は視差ベクトル検出により、視差補償写像点1501の探索基準位置においてマッチングする。マッチングにより算出された視差ベクトルを用いた視差補償により、写像点1008は視差補償写像点1501に補償される。
視点間傾斜半値角θPのPM倍反対側に傾くように、レフトカメラ有限近傍投影変換XY平面1007を投影変換することで、仮想レフトカメラ有限近傍投影変換XY平面1502の写像面を生成する。これにより視差補償写像点1501は視差補償写像点1503へ写像される。
仮想レフトカメラ有限近傍投影変換XY平面1502は仮想レフトカメラ無限遠方XY平面810に対応する写像面なので、視差補償写像点1503は写像点812に写像することが出来る。
ステップS909は、この実施例2における処理パイプラインのうち、視点間傾斜半値角θPの−PM倍傾けることで、仮想レフトカメラ有限近傍投影変換XY平面1502からレフトカメラ有限近傍XY平面1007を生成するための投影変換処理に相当する。
図16の処理フローチャート図を用いてステップS909における投影変換方法を説明する。尚、以下の説明では、投影変換処理のフローチャートを本サブフローチャート4と称する。
ステップS1600は本サブフローチャート4の開始を示している。ステップS1601はX軸方向画像サイズおよびY軸方向画像サイズを入力する。本実施例ではX軸方向画像サイズ=2592、Y軸方向画像サイズ=1728である。ステップS1602はステップS1202と処理が同じなので説明を省略する。ステップS1603はステップS1203と処理が同じなので説明を省略する。ステップS1604は視差倍率PMを入力する。
ステップS1605は投影変換傾斜角θPPを算出する。以下の数2.23のように投影変換傾斜角θPPを算出する。φは投影変換補正角である。本実施例ではφ=0とする。
ステップS1606はステップS1205と処理が同じなので説明を省略する。ステップS1607はステップS1206と処理が同じなので説明を省略する。ステップS1608はステップS1207で算出した投影変換座標拡大倍率ex_magを入力する。
ステップS1609は投影変換座標拡大倍率ex_magを用いて、投影正変換座標順参照マップProjMapF(x,y)および投影変換座標逆参照マップProjMapI(x,y)を倍率補正する。
ステップS1610は投影変換後の出力画像データ領域を生成して初期化する。入力画像データ領域と面積が一致する領域を生成する。ステップS1611は仮想レフトカメラ視点PVL用補償画像を入力する。ステップS1612はステップS1211と処理が同じなので説明を省略する。ステップS1613はステップS1212と処理が同じなので説明を省略する。ステップS1614はステップS1213と処理が同じなので説明を省略する。ステップS1615は本サブフローチャート4の終了を示している。
以上が、本サブフローチャート4の説明である。
ステップS910は、本処理プログラム2の終了を表す。以上が、本処理プログラム2の説明である。
ここで、ステップS905における投影変換とステップS909における投影変換について補足説明を行なう。ステップS905において、レフトカメラ有限近傍XY平面1003は、視点間傾斜半値角θP傾いたレフトカメラ有限近傍XY平面1007に投影変換するが、θPに限定して投影変換する必要は無く、投影変換補正角φを用いて数2.12にように投影変換してよい。
又、ステップS909においてもPM・θPに限定して投影変換する必要は無く、投影変換補正角φを用いて数2.23にように投影変換してよい。
ステップS905とステップS909の2回の投影変換により、最終的に視点間傾斜半値角θPのPM倍の傾斜が付けばよい。
以上の説明から明らかなように、本実施例で行なう視差再調節処理では、レフトカメラ画像・ライトカメラ画像を用いて、仮想レフトカメラ画像・仮想レフト画像を生成することで、レフトカメラ画像・ライトカメラ画像に付いている視差を再調節できることわかる。
又、本実施例で行なう視差ベクトル検出により生成される視差マップを視差補償時に用いることで、従来の視差補償時発生していた補償画像の非参照領域が発生しなくなるため、画質が向上することがわかる。
又、本実施例で行なう交差法両眼視差画像への投影変換により、交差法両眼視差画像間のオブジェクトのZ軸方向の位置ずれがなくなり、正確に視差ベクトルが検出できるため、立体視に好適な画像を視聴可能となることがわかる。
又、本実施例で行なう視差補償画像への投影変換により、視差再調節画像におけるオブジェクトのZ軸方向の位置ずれを再現可能となるため、立体視に好適な画像を視聴可能となることがわかる。
尚、視差倍率PM=1の場合、数2.22より近傍画像距離NID=0となる。この場合、
数1.11よりX軸方向視差ベクトルΔx、およびY軸方向視差ベクトルΔyは共に0になる。数1.18で示されるオフセットmx・NIDおよびmy・NIDも0になり、視差補償画像PPI(xout,yout)は近傍画像NI(xin,yin)と等しくなる。このため、ステップS404およびステップS405の処理を行なわずに、視差補償画像PPI(xout,yout)として近傍画像 NI(xin,yin)を出力してもよい。
又、数2.12と数2.23よりレフトカメラ視点位置と仮想レフトカメラ視点位置は同じになる。このため、仮想レフト視点画像としてレフト視点画像を出力してもよい。
尚、本実施例で用いた交差法両眼視差画像は必ずしも2つないし複数のカメラから取得する必要はない。たとえば、特開2009−124213号に記載されているように、単一の記録素子上で記録された画像データから両眼視差画像は生成可能である。このため、本実施例ではそのような単一のカメラを用いて生成された両眼視差画像も使用可能である。
(実施例3)
本実施例では視差倍率PMを用いて、交差法にて撮像された両眼視差画像である交差法両眼視差画像の視差をPM倍に再調節する。尚、実施例3の説明において、実施例1および実施例2と内容が重複する箇所は説明を省略する。
数2.22において、近傍画像距離NID:遠方画像距離FIDは入力X軸方向座標値xrinにより変わる。離散空間である画像に対して近傍画像距離NID:遠方画像距離FIDに基づいて処理を行なうために、X軸方向座標値xrinごとに倍率を設定して拡大補間した画像を生成して、これを視差ベクトル検出に用いる。
又、X軸方向座標値xrinごとに倍率を設定して拡大補間した画像を生成するのではなく、X軸方向の一定領域ごとに、X軸方向座標値xrinの代表値を数2.22に入力して得られた近傍画像距離NID:遠方画像距離FIDに基づいて、X軸方向の一定領域内ではその近傍画像距離NID:遠方画像距離FIDと、X軸方向座標値xrinの代表値による倍率を設定して拡大補間した画像を生成して、これを視差ベクトル検出に用いてもよい。
又、実施例2における数2.22を用いて算出される近傍画像距離NID:遠方画像距離FIDが、実施例1における数1.4を用いて算出される近傍画像距離NID:遠方画像距離FIDと比べて、X軸方向座標値 xrinごとに探索比率の変化が微小であるとき、数1.4を用いて算出される近傍画像距離NID:遠方画像距離FIDを用いて視差ベクトル検出に用いてもよい。
(実施例4)
本実施例では視差倍率PMを用いて、交差法にて撮像された両眼視差画像である交差法両眼視差画像の視差をPM倍に再調節する。尚、実施例5の説明において、実施例1、実施例2、実施例3および実施例4と内容が重複する箇所は説明を省略する。
図10において、視点間傾斜半値角θPが小さいとき、写像点1006と写像点1008のX軸方向の差異およびZ軸方向の差異は微小となる。この場合、図9における入力画像対投影変換ステップS905は行なわずに図で表される本処理プログラム2を実行する。
(実施例5)
図4で示した構成は本処理プログラム1は撮像装置などのハードウェアとして構成してもよい。この場合、この本処理プログラム1は、LSI(Large Scale Integration)等の電子回路に実装されることになる。そして、この撮像装置などのハードウェアが有するCPUに相当する制御部がこのLSI等の電子回路を実行することで、対応する機能部の機能を実現することができる。
図17は2眼の撮像装置を表す模式図である。図17において、1700は撮像装置本体、1701は第一の交換レンズ、1702は第二の交換レンズ、1703は第一の撮像素子、1704は第二の撮像素子、1705はCPU、1706はROM、1707はRAM、1708はI/F部、1709は信号処理部、1710は信号バス、1711はビデオ駆動部、1712は電源部である。
撮像素子本体1700は内部に有する電源部1712より供給される電気を用いて、内部に有する他の処理部に適宜通電させることで起動および稼動させることができる。CPU1705は、第一の撮像素子1703、第二の撮像素子1704、ROM1706、RAM1707、I/F部1708および信号処理部1709など、撮像素子本体1700の内部の他の処理部と画像データ信号や制御信号を授受し、必要に応じてデータの演算を行なうことができる。信号バス1710は、撮像素子本体1700の内部の処理部間の画像データ信号や制御信号のバスである。第一の交換レンズ1701で集光された光は第一の撮像素子1703の平面上に照射され光電変換により電圧に変換される。変換された電圧は設定された量子化閾値により量子化され、画像信号データに変換される。第二の交換レンズ1702で集光された光は第二の撮像素子1704の平面上に照射され光電変換により電圧に変換される。変換された電圧は設定された量子化閾値により量子化され、画像信号データに変換される。
I/F部1708は、ユーザーによる操作を受付け、又はユーザーに図示しないLCD(Liquid Crystal Display)などを用いて撮像素子本体1700内部で処理したデータを表示することが出来る。又、また図示しない外部記憶装置から画像データを読み込むことが出来る。ROM1706は、BIOS(Basic Input Output System)やOSなどの基本ソフトや基本ソフトにコールされて起動する応用ソフトが記録されている。これら基本ソフトや応用ソフトは撮像素子本体1700の起動時にCPU1705によって、RAM1707に展開され、プログラム処理が行なわれる。
RAM1707は、撮像素子本体1700が稼働中に変更され得るデジタルデータを一時保存する領域である。画像信号データも一時的にRAM1707に保存される。信号処理部1709は、RAM1707から画像データを読み込んで、様々な画像処理を行なうLSIである。図4で示した構成は、この信号処理部1709に実装される。ビデオ駆動部1711は、図示しない外部記憶装置へ信号処理部1709で画像処理された画像データを蓄積する。
図18は、信号処理部1709にて実装される本発明の信号処理の処理ブロック図である。1801は視差倍率設定手段である。1802は平行法探索比率算出部である。1803は視差マップ生成部である。1804は視差補償部である。視差倍率設定手段1801は視差倍率PMを設定する。I/F部1708からユーザーによる入力でもいいし、ROM1706に予め記録されている値を用いて視差倍率PMとしてもよい。平行法探索比率算出部1802は視差倍率PMを入力して、数1.4を用いることで、探索比率SR、近傍画像距離NID:遠方画像距離FIDを算出する。
視差マップ生成部1803は平行法両眼視差画像対と探索比率SR、近傍画像距離NID:遠方画像距離FIDを入力して、図5で示した本サブフローチャート1が実装された電子回路上で画像処理を行なうことで、視差マップを生成する。視差補償部1804は平行法両眼視差画像対と視差マップを入力して、図7で示した本サブフローチャート2が実装された電子回路上で画像処理を行なうことで、視差補償画像を生成する。
尚、本実施例で用いた平行法両眼視差画像は必ずしも2つのレンズおよび撮像素子を用いて取得する必要はない。特許文献2では、単一のカメラから任意の視野や焦点に設定された画像を再構築できると書かれており、単一の記録素子上で記録された画像データからも平行法両眼視差画像は生成可能である。このため、本実施例ではそのようなカメラを用いて生成された平行法両眼視差画像も使用可能である。
(実施例6)
図9で示した構成は本処理プログラム2は撮像装置などのハードウェアとして構成してもよい。この場合、この本処理プログラム1は、LSI等の電子回路に実装されることになる。そして、この撮像装置などのハードウェアが有するCPUに相当する制御部がこのLSI等の電子回路を実行することで、対応する機能部の機能を実現することができる。
図17は2眼の撮像装置を表す模式図である。装置構成は実施例5と同じなので説明を省略する。図19は、信号処理部1709にて実装される本発明の信号処理の処理ブロック図である。1901は視差倍率設定手段である。1902は画像表示解像度入力手段である。1903はレンズ画角入力手段である。1904は視点間傾斜半値角入力手段である。1905は入力画像対射影変換部である。1906は交差法探索比率算出部である。1907は視差マップ生成部である。1908は視差補償部である。1909は視差補償画像対射影変換部である。視差倍率設定手段1901は実施例5と処理内容が同じなので説明を省略する。画像表示解像度入力手段1902は入力される画像のX軸方向解像度およびY軸方向解像度を入力する。ROM1706に予め記録されている値を用いて入力する。
レンズ画角入力手段1903はレンズ画角θLenを入力する。ROM1706に予め記録されている値を用いて入力する。第一の交換レンズ1701と第二の交換レンズ1702のレンズ情報を入力するようにしてもいい。
視点間傾斜半値角入力手段1904は視点間傾斜半値角θPを入力する。ROM1706に予め記録されている値を用いて入力する。第一の交換レンズ1701と第二の交換レンズ1702が成す傾きを入力するようにしてもいい。
入力画像対射影変換部1905は画像のX軸方向解像度およびY軸方向解像度、レンズ画角θLen、視点間傾斜半値角θPおよび交差法両眼視差画像対を入力して、図12で示した本サブフローチャート3が実装された電子回路上で画像処理を行なうことで、投影変換を行なう。
交差法探索比率算出部1906は画像のX軸方向解像度およびY軸方向解像度、レンズ画角θLen、視点間傾斜半値角θP、および視差倍率PMを入力して、数2.22を用いることで、探索比率SR、近傍画像距離NID:遠方画像距離FIDを算出する。視差マップ生成部1907は実施例5と処理内容が同じなので説明を省略する。視差補償部1908は実施例5と処理内容が同じなので説明を省略する。視差補償画像対射影変換部1909は画像のX軸方向解像度およびY軸方向解像度、レンズ画角θLen、視点間傾斜半値角θP、および視差倍率PMおよび仮想レフトカメラ視点PVL用補償画像および仮想ライトカメラ視点PVR用補償画像を入力して、図16で示した本サブフローチャート4が実装された電子回路上で画像処理を行なうことで、投影変換を行ない、仮想レフトカメラ視点PVL画像および仮想ライトカメラ視点PVR画像を生成する。
尚、本実施例で用いた交差法両眼視差画像は必ずしも2つのレンズおよび撮像素子を用いて取得する必要はない。特許文献2では、単一のカメラから任意の視野や焦点に設定された画像を再構築できると書かれており、単一の記録素子上で記録された画像データからも交差法両眼視差画像は生成可能である。このため、本実施例ではそのようなカメラを用いて生成された交差法両眼視差画像も使用可能である。
(実施例7)
本実施例では視差倍率PMを用いて、平行法により撮像された両眼視差画像である平行法両眼視差画像の視差をPM倍に再調節する。尚、本実施例の説明において、実施例1と同一の構成については説明を省略する。
図20は、実施例7における視差ベクトル検出処理(S404)のフローチャートである。尚、以下の説明では、視差ベクトル検出処理のフローチャートを本サブフローチャート5と称する。
ステップS2003は、テンプレートマッチングにおける基準マッチング処理条件を設定する。図21は、実施例6における探索基準条件設定処理のフローチャートを示す。尚、以下の説明では、視差ベクトル検出処理のフローチャートを本サブフローチャート6と称する。
ステップS2100は、本サブフローチャート6の開始を示している。ステップS2101は、テンプレートマッチングにおけるX軸方向基準ブロックサイズBS_BASICx、Y軸方向基準ブロックサイズBS_BASICyを入力する。本実施例では、BS_BASICx=8およびBS_BASICy=8である。
ステップS2102は、テンプレートマッチングにおけるピクセル探索精度PSAを入力する。本実施例ではPSA=0.5である。
ステップS2103は、z軸方向の処理対象深度長DepthLengthを入力する。処理対象深度長DepthLengthは撮像レンズの光軸に対して平行な線分の長さである。被写界深度同様に、z軸方向において中心被写体を基準とした、所定の範囲を設定することが好ましい。
ここで被写界深度とは、物側のピント面が存在する中心被写体距離に対して、よりレンズ近傍にある前側被写界深度DofNと、よりレンズ遠方にある後側被写界深度DofFによって定義される撮影深度方向の距離を示している。前側被写界深度DofNは数6.1、後側被写界深度DofFは数6.2で示される。数6.1および数6.2において、fは撮像レンズの焦点距離、aは中心被写体距離、FはFナンバー、εは許容錯乱円直径を示している。本実施例では、f=30.234mm、a=1m、F=20.5およびε=0.03mmとする。数6.1および数6.2にこれらの値を代入することで前側被写界深度DofN=0.444m、後側被写界深度DofF=0.487mが得られる。
処理対象深度長DepthLengthは、前側被写界深度DofNと後側被写界深度DofFを用いて数6.3で示される。数6.3において、wnおよびwfは補正倍率であり、それぞれ
の範囲の値を取る。本実施例ではwn=1、wf=1とし、処理対象深度長DepthLength=0.931mとする。
尚、本実施例では、レフト視点カメラとライト視点カメラにて用いている撮像レンズより算出される被写界深度をもとに処理対象深度長DepthLengthを設定するが、本発明は処理対象深度長DepthLengthとしてどの範囲を設定するかを限定するものではない。
ステップS2104は、処理対象深度長DepthLengthを用いて、X軸方向基準探索範囲最小値SS_BASIC_MINxおよびX軸方向基準探索範囲最大値SS_BASIC_MAXxを設定する。
X軸方向基準探索範囲最小値SS_BASIC_MINxおよびX軸方向基準探索範囲最大値SS_BASIC_MAXxは、X軸方向の探索範囲をSS_BASIC_MINx以上かつSS_BASIC_MAXx以下に指定する。
探索範囲に0を含めて探索することは、無限遠方にマッチングするオブジェクトが存在することを想定して探索することである。ここでは、z軸方向においてマッチングする可能性が高い範囲を予め想定して、その範囲内に一致する場合だけ探索するように、X軸方向基準探索範囲最小値SS_BASIC_MINxおよびX軸方向基準探索範囲最大値SS_BASIC_MAXxを用いる。
図22を用いて、X軸方向拡張探索範囲最小値SS_EXTEND_MINxおよびX軸方向拡張探索範囲最大値SS_EXTEND_MAXxの設定方法を説明する。図22は、Y軸方向の負から正の方向へ見たときのXZ平面102を表した図である。
103は原点Oである。201はレフトカメラであり、同一の座標位置に撮像レンズの主点があるとする。202はライトカメラであり、同一の座標位置に撮像レンズの主点があるとする。207は仮想レフトカメラであり、同一の座標位置に撮像レンズの主点があるとする。
本実施例では、レフトカメラ201、ライトカメラ202および仮想レフトカメラ207のレンズ光軸はそれぞれ平行である。また実施例1同様に、各カメラの配置位置におけるz座標値が等しいものとする。
また、レフトカメラ201とライトカメラ202のカメラ間の基線長は5mmとする。また数1.2より、レフトカメラ201と仮想レフトカメラ207のカメラ間の基線長は5mmとなる。
2201は第一撮像センサー平面であり、仮想レフトカメラ207が有する仮想的な撮像センサー上の平面である。2202は第二撮像センサー平面であり、レフトカメラ201が有する撮像センサー上の平面である。2203は第三撮像センサー平面であり、ライトカメラ202が有する撮像センサー上の平面である。
第一撮像センサー平面2201、第二撮像センサー平面2202および第三撮像センサー平面2203は、撮像条件がそれぞれ等しいため、1つの平面上に投影したのと幾何的な条件が同じになるとする。
第一撮像センサー平面2201、第二撮像センサー平面2202および第三撮像センサー平面2203のセンサーサイズは全て同じであり、x方向センサー長SensorX、y方向センサー長SensorYで表される。本実施例では、フルサイズの撮像センサーを使用するのでSensorX=36mm、SensorY=24mmである。
2204は前方処理対象面、2205は後方処理対象面である。これらは処理対象深度長DepthLengthの距離だけ離れている。レフトカメラ201、ライトカメラ202および仮想レフトカメラ207は、前方処理対象面2204および後方処理対象面2205を共有しているものとする。
2206は写像点Aであり、仮想レフトカメラ207の第一撮像センサー平面2201における所定の座標位置である。
2207は候補点Bであり、写像点A2206と仮想レフトカメラ207を結ぶ半直線と前方処理対象面2204が交差する点である。写像点A2206に結像されるオブジェクトのうち、処理対象深度長DepthLengthの範囲において、最もz座標値が小さい点である。2208は候補点Cであり、写像点A2206と仮想レフトカメラ207を結ぶ半直線と後方処理対象面2205が交差する点である。写像点A2206に結像されるオブジェクトのうち、処理対象深度長DepthLengthの範囲において、最もz座標値が大きい点である。
2209は写像点Dであり、候補点B2207が第二撮像センサー平面2202に結像される際の座標位置である。2210は写像点Eであり、候補点C2208が第二撮像センサー平面2202に結像される際の座標位置である。2211は写像点Fであり、候補点B2207が第三撮像センサー平面2203に結像される際の座標位置である。2212は写像点Gであり、候補点C2208が第三撮像センサー平面2203に結像される際の座標位置である。
2213は同一UV座標位置Hであり、第一撮像センサー平面2201に存在する写像点A2206とセンサー面上のUV座標系における座標値が等しくなる、第二撮像センサー平面2202における座標位置である。2214は同一UV座標位置Iであり、第一撮像センサー平面2201に存在する写像点A2206とセンサー面上のUV座標系における座標値が等しくなる、第三撮像センサー平面2203における座標位置である。ここで、UV座標系とは、センサー平面上の2次元の座標系である。UV座標系と三次元空間を表すXYZ座標系は、幾何的に対応付けることができる。
第一撮像センサー平面2201、第二撮像センサー平面2202および第三撮像センサー平面2203の各センサー平面からレンズ主平面までの距離bは、レンズ結像公式が
である、中心被写体距離a=1m、撮像レンズの焦点距離f=30.234mmであることから、およそb=31.177mmとなる。
レンズ主平面から前方処理対象面2204までの距離DNは、DN=a−DofN=0.556mである。
候補点B2207、仮想レフトカメラ207およびレフトカメラ201を頂点とする三角形Aと、候補点B2207、写像点A2206および写像点D2209を頂点とする三角形Bは相似である。三角形Aと三角形Bの相似比はDN:(DN+b)=1:1.056となる。
レフトカメラ201と仮想レフトカメラ207のカメラ間の基線長は5mmである。ここから、写像点D2209と写像点A2206の距離は5×1.056=5.28mmとなる。
写像点Aと同一UV座標位置H2213の距離は、レフトカメラ201と仮想レフトカメラ207のカメラ間の基線長と等しい。このため写像点D2209と同一UV座標位置H2213の距離βは5.28−5=0.28mmとなる。
β=0.28mmをピクセル換算するとSensorX=36mm、X軸方向表示解像度rsl_x=2592pixelであることから
である。ここからX軸方向拡張探索範囲最大値SS_EXTEND_MAXx=21として、
よりも大きい整数のうち、最も小さい整数を設定する。
レンズ主平面から後方処理対象面2204までの距離DFは、DF=a+DofF=1.487mである。
候補点C2208、仮想レフトカメラ207およびレフトカメラ201を頂点とする三角形Cと、候補点C2208、写像点A2206および写像点E2210を頂点とする三角形Dは相似である。三角形Cと三角形Dの相似比はDF:(DF+b)=1:1.021となる。
ライトカメラ202と仮想レフトカメラ207のカメラ間の基線長は5mmである。ここから、写像点E2210と写像点A2206の距離は5×1.021=5.105mmとなる。
写像点Aと同一UV座標位置H2213の距離は、レフトカメラ201と仮想レフトカメラ207のカメラ間の基線長と等しい。このため写像点E2210と同一UV座標位置H2213の距離Xは5.105−5=0.105mmとなる。
X=0.105mmをピクセル換算すると、SensorX=36mm、X軸方向表示解像度rsl_x=2592pixelであることから、
である。ここから、X軸方向拡張探索範囲最大値SS_EXTEND_MINx=7として、
よりも小さい整数のうち、最も大きい整数を設定する。
ステップS2105は、本サブフローチャート6の終了を示している。以上が、本サブフローチャート6で表されるステップS2003の説明である。
ステップS2004は、画像探索比SRと基準マッチング処理条件を用いて、テンプレートマッチングにおける拡張マッチング処理条件を算出する。拡張マッチング処理条件は、X軸方向拡張ブロックサイズBS_EXTENDx、Y軸方向拡張ブロックサイズBS_EXTENDy、X軸方向拡張探索範囲最小値SS_EXTEND_MINxおよびX軸方向拡張探索範囲最大値SS_EXTEND_MAXxである。BS_EXTENDx、BS_EXTENDy、SS_EXTEND_MINxおよびSS_EXTEND_MAXxは、以下の数6.4のように定義される。数6.4より、BS_EXTENDx=32、BS_EXTENDy=32、SS_EXTEND_MINx=14およびSS_EXTEND_MAXx=42である。
ステップS2005はステップS505と、ステップS2006はステップS506と、それぞれ同内容の処理であるので説明を省略する。
ステップS2007は、探索基準ブロック座標(BBC_X、BBC_Y)にあるブロック画像に対する、近傍画像NIと遠方画像FIのそれぞれのマッチング座標を算出する。近傍画像NI内のX軸方向マッチング座標をNMC_X、Y軸方向マッチング座標をNMC_Y、遠方画像FI内のX軸方向マッチング座標をFMC_X、Y軸方向マッチング座標をFMC_Yと定義する。NMC_X、NMC_Y、FMC_XおよびFMC_Yは以下の数6.5で表される。数6.5において、X軸方向マッチングポインタmxは、
の範囲の整数値を取る。
ステップS2008からS2017は、ステップS508からステップS517と、それぞれ同内容の処理であるので説明を省略する。
以上が、本サブフローチャート5の説明である。
以上の説明から明らかなように、本実施例では処理対象深度長DepthLengthを用いて、探索するz軸方向の範囲を設定することで、視差拡大倍率が大きい場合でも狭い探索範囲でマッチングを行なうことができる。これにより、実視点からより離れた仮想視点をより正確に生成することが可能になる。