以下、本発明に係わる測長技術について各実施形態を挙げ図面を参照しながら説明する。
図1Aは、本発明の一実施形態における撮像装置の概略構成例を示す機能ブロック図である。本実施形態における撮像装置100は、撮像部101と、画像処理部102と、記録部103と、表示部104と、入力部105と、測定制御部106と、を有している。測定制御部106の詳細な構成に関しては後述する。
撮像部101は、少なくとも2つの撮像部である第1撮像部101a、第2撮像101bを有し、それぞれの撮像部101a・101bは、レンズとCCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor)などの撮像素子、それらの動作を制御する制御部、メモリなどから構成される一般的な構成を有する。2つの撮像部101a・101bは、平行にずれた位置に配置されており、それぞれの撮像部101a・101bで撮影された画像は視差を有する。例えば、ある被写体上のある点は、2つの画像上では撮影位置、すなわち視点位置が異なるため、水平方向にずれた場所に位置し、このずれ量を視差という。この場合、平行に配置して撮影された画像の視差は、被写体が撮像装置に近いほど視差が大きく、逆に遠いほど視差が小さくなり、撮像部間の長さに対して非常に遠い、すなわち無限遠領域での視差はほぼ0となる。ある距離における視差値は、撮像部間の距離である基線長や光学系、解像度などの撮像素子に関連するパラメータによって決まる。本実施形態では、2つの撮像部101a・101bは同等の特性(仕様)を有し、レンズ、撮像素子などは同じものを使用しているものとして説明する。仕様が異なる場合には、基準となる撮像部に対してもう一方の撮像部の各パラメータを正規化する必要がある。このようにして、撮像部101で撮影された撮影画像データD1は、画像処理部102に出力される。また、この時、撮影時の基線長や焦点距離情報など必要な撮影情報D2をカメラパラメータ取得部115に出力する。なお、カメラパラメータ取得部115は別途カメラパラメータを事前に保持することで、撮像部101から直接出力しない構成も取り得る。
なお、以降、1回の撮影において取得される撮像部101で撮影された視差を有する画像を画像a、bと表記し、撮影位置1で撮影された視差を有する画像を画像1a、1bとし、上記撮影位置1とは異なる撮影位置2で撮影された視差を有する画像を画像2a、2bのように表すものとする。
画像処理部102は撮像部101によって撮影された画像データの明るさの調整や色の調整などの処理、表示部104に合わせたデータ形式への変換(D3)、記録部103とのデータ出力や読み出し処理などを行う(D4)。また、後述する測定時に撮影位置を移動させながら撮影した複数の撮影画像を関連づけて記録部103に出力して記録したり、測定制御部106への画像データを出力したり、測定制御部106から得られた情報を基に撮影画像に文字やマーク、図などの情報を重畳して出力するなどの処理を行う(D5)。本実施形態では、撮像部101からの撮影画像データは視差値の調整がされていないものとするが、例えば、立体映像の立体感調整のために、画像a、bの視差値を調整して出力される場合には、元の配置の状態に戻すよう処理をして測定制御部106へと出力する。
記録部103はハードディスクやフラッシュメモリなどで構成され、画像処理部102から出力された画像データ(D4)の記録を行う。例えば、本実施形態では複数枚の静止画像を撮影して長さの測定を行うため、測定において撮影した画像、つまり、各撮影位置で撮影された画像a、bを関連づけて記録する。
表示部104は画像処理部102から受け取った画像(D3)などを表示する装置であり、例えば液晶ディスプレイなどで構成される。表示部104は、タッチパネル液晶のように後述する入力部105と一体型となった構成でも構わない。
入力部105は、ユーザーによる選択や決定のコマンド(D6)を入力するものであり、例えば画像上のポインタを動かすための十字キーやタッチパネルによる入力である。本実施形態においては、表示部104と一体型となったタッチパネル液晶によって構成され、画像上の測定点を選択する場合には、指定したい箇所をタッチすることで測定したい部分などの選択ができる。
測定制御部106は、測定領域検出部111と、視差値算出部112と、3次元位置情報算出部113と、長さ情報算出部114と、カメラパラメータ取得部115と、移動方向提示部116と、から構成され、撮影された画像データからユーザーの測定したい領域の長さを算出する。測定においては、撮像装置100を移動させながら撮影位置の異なる複数組みの視差を有する画像a、bを取得し、これらを関連づけて処理を行い、異なる位置で撮影された画像に写る測定開始点と測定終了点との間の実際の長さを算出する。なお、撮影位置の移動とは、撮像装置100の光軸の向きや位置を変えて撮影することを意味し、例えば、撮影者であるユーザー自身の立つ位置を変えて撮影する場合や、同じ立ち位置から撮影方向を変える場合など、撮像装置100の向きや位置を変えて撮影することを表す。本実施形態では、撮影位置の異なる撮影画像とは、上記のように撮像装置100の光軸の向きや位置の異なる撮影画像を示し、移動方向とは撮影時の光軸の変移方向を示すものとする。また、複数の撮像部101を有する場合、それぞれの撮像部101で光軸を持つため複数の光軸が存在するが、ここでは説明を簡単にするため、撮像装置100の基準位置を撮像部101間の中心位置とし、その基準位置から撮像部101の配置方向の平面に対して垂直となる方向(撮影方向)を撮像装置100の光軸とする。
ここで、測定全体の流れを説明しながら各動作について詳述する。図2A、図2Bは、それぞれ、測定方法と測定時の処理の流れを示したフローチャート図である。図2Aは、本実施形態の撮像装置を用い測定したい領域を測定する場合の、撮影から測定結果確認までの測定方法を示した図であり、測定領域の開始点から終了点まで撮影位置を変えながら撮影し、長さを測定する作業の概要を表す図である。また、図2Bは上記の測定処理において、本実施形態の撮像装置100の各構成部で実行される処理の流れを示しており、撮影画像の取得から測定領域の長さ算出までの処理の概要を表す。詳細な説明は後述することとし、まず、測定する対象や撮影状況について記載する。
まず、図3(a)に示す、被写体300上の2点AB間の長さWを測定する場合を考える。図3(b)は、被写体300とユーザー(撮影者)Xとの位置関係を示した上面図であり、ユーザーXは撮影位置310から本実施形態における撮像装置を被写体300に向けて、被写体300を撮影する状態を示している。この時、ユーザー位置310と被写体300との距離を撮影距離L、撮像装置の光軸を311、画角を312とし、画角312における撮影範囲の両端をそれぞれ313a、313bとする。1回の撮影において、この画角内(313aと313bの間の領域)の視差を有する画像a、bが得られるものとする。実際には、平行配置された2つの撮像部101a・101bから得られた画像は、撮像部101a、101b間の距離である基線長に応じそれぞれの撮像部でしか得られない領域、つまり2つの画像の重ならない領域が発生するが、ここで示す画角や撮影領域は重ならない領域を排除し、2つの画像の共通領域を撮影範囲とする。
ここでは、撮影距離Lが小さく、撮像装置の画角内に測定点A、Bが入りきらない状況を説明する。図4(a)は、ユーザーXと被写体300との位置関係を示した上面図であり、ユーザーXの立ち位置からは被写体300上の測定したい領域が画角内に入りきらないため、撮像装置を左から右側に撮影方向(撮影位置)を移動させて2回撮影し測定を行った際の撮像装置の向きとその撮影範囲を示している。ここで、ユーザーXの位置410と被写体300との撮影距離をL0とし、1回目の撮影時の光軸を光軸411、その撮影範囲の両端を413a、413b、2回目の撮影時の光軸を光軸414、その撮影範囲の両端を415a、415bとする。ここでは1回目と2回目の撮影時の画角は同じ画角としているが、特にこれに制限はされない。また、図4に記載しないが、撮像装置において被写体に向かって左側の第1撮像部101aで撮影された画像を画像a、右側の第2撮像部101bで撮影された画像を画像bとし、1回目の撮影で撮影された視差を有する画像をそれぞれ画像1a、1bとして以降、数字が異なれば移動して撮影されたものとする。
図4(b)と図4(c)とは、各撮影位置における撮影画像であり、1回目の撮影画像を図4(b)、2回目の撮影画像を図4(c)とする。1回目の撮影では測定したい部分の開始点Aが画角内に入るように撮影し、2回目の撮影では測定の終了点Bが画角内に入るように撮影する。
上記の撮影状況において、図2Aの撮影フローを用いて撮影手順に関して説明する。ユーザーXは測定対象が撮像装置の画角に内に収まらない際に、本実施形態における測定モードを起動させることにより処理が開始される。ユーザーXは測定したい領域の端点である測定開始点A、測定終点Bの位置を確認し、撮像装置から提示された移動方向と測定点AからBの方向がおおよそ合うように撮像装置の向きを合わせる(S201)。次に、測定開始点Aが画角内に入るようにしてシャッターボタンを押し第1の画像1a、1bを撮影する(第1の撮影: S202)。続いて、ユーザーXは提示された移動方向に撮像位置を変える(向きを変更: S203)。この時、画面にはプレビュー画像と共に指定撮影領域が表示され、その領域が入るようにして第2の画像2a、2bを撮影する(第2の撮影: S204)。指定撮影領域とは、第1の撮影画像と第2の撮影画像との共通する領域において、2組の視差を有する画像の位置関係の算出が可能となる特徴点を含んだ領域である。つまり、撮影位置を移動させて撮影する場合に、指定撮影領域を入れて撮影することにより、より確実に測定ができるようになる。詳細については後の処理フローで説明する。次に、2回目の撮影で撮影された画像において、測定終点Bが含まれているか否かを判断する(S205)。測定終点Bが含まれていれば(YES)撮影を終了し、含まれていなければ(NO)、ステップS203に戻り、さらに提示された移動方向に撮像装置を移動させて3回目の撮影を行う。この時、3回目の撮影においても提示された指定撮影領域を画角内に入れて撮影することで、長さ算出時に第2の撮影画像との関連付けができるため、確実に測定できるようになる。このように測定終点Bが撮影されるまでS203〜S205までの処理を繰り返す。2回目の撮影以降の撮影画像に測定終点Bが含まれていれば(YES)、撮影モードを終了し、測定点の入力へ移行する(S206)。測定点の入力への移行は、例えば、測定終点Bが撮影できた時点で実行ボタンを押せば、これまで撮影した画像群を関連付けて保存し、測定点の入力画面が立ち上がるようにしてもよい。
次に長さを測定したい箇所へ測定点を入力する(S207)。本実施形態のように、点Aから点Bの長さを測定したい場合には、測定開始点Aが写った第1の撮影画像を選択し、画像上の測定点Aを選択して開始点として決定する。続いて、測定終点Bが写った画像を選択し、画像上の測定終点Bを選択して測定点の入力を終了する。入力の終了は測定点Bを入力した時点で実行ボタンを押せば、入力が終了し、次の長さの算出に移行するなどすればよい。測定点の入力方法に関しては図2Aの処理例に限定されず、ユーザーXが長さを測定したい箇所において画像上の2点の座標値が取得できればよい。
次に、決定された2点に対して長さが算出され、画面上に表示された結果を確認し、測定モードを終了する(S208)。この時、算出された長さの情報と画像データを関連付けて保存してもよい。例えば、画像上に測定点とその長さを表示した画像を保存できれば後で確認がし易くなる。このようにして測定の一連の作業が行われる。
次に、上記の測定作業に対応して図2Bを用いて各構成部の処理の流れを説明する。測定対象が撮像装置100の画角内に収まらない際、本実施形態における測定モード起動の入力が行われ、測定モードを立ち上げる。この際、表示部104の画面上には第2撮像部101bのプレビュー画像と共に、移動方向提示部116によって移動方向情報が表示(提示)される(S211)。移動方向情報は、2回目以降の撮影方向を示し、2回目以降の撮影をどちらの方向に移動させ撮影するかの誘導情報である。移動方向の指示は、移動方向提示部116によって2つの第1・第2撮像部101a、101bの配置方向を判別し、2回目以降の撮影の移動方向をこの撮像部の配置方向となるように示す。例えば、水平方向に測定点A、Bが位置し、水平方向に移動させて撮影する場合は、提示された移動方向となるよう撮像装置100を構え、撮像装置100を移動させながら2回の撮影を行う。提示する移動方向と撮像部101の配置方向とを一致させ、移動させる方向を誘導することで、測定方向と撮像部101の配置方向とが略一致した複数の視差を有する画像a、bを得ることができる。一般的には、ある2点AB間の長さを測る場合、測定点A、B上では線分ABの方向に対し垂直方向に特徴を有する成分が強い。より具体的には、ある物体の横方向の長さを測定したい場合、縦方向のエッジ上の2点を選択することが多く、逆に上下方向の長さを測定したい場合には横方向のエッジ上の2点を選択する場合が多い。例えば、図3(a)の横方向の長さWを測定する場合にはエッジ301とエッジ302上の点から測定点を選択する場合が多い。本実施形態では、測定点A、Bは縦方向のエッジの端点を選択している。ここで、測定点A、Bはコーナーのため、横方向のエッジ上の点にも該当することになるが、コーナーでは両方向の特徴を有しており、縦方向のエッジ上の点としても扱うことができる。ここで、撮影された画像は撮像部101の配置方向に視差が付くため、配置方向に対して垂直方向の特徴成分が大きな画素の場合には、後述する測定点の視差値を算出する際に対応点の検出がし易く、視差を正確に算出できる。逆に、撮像部101の配置方向に対して同じ方向に強い特徴のある画素(この場合、横方向のエッジ成分上の画素)では、画像a、b間の対応点検出の際に隣接画素との判別が付きにくく、検出精度が低下してしまう。このように、撮影時に移動方向を提示し、撮像部101の配置方向と測定方向をおおよそ合わせて撮影するように誘導することで測定精度を向上させることができる。
図5(a)は、1回目の撮影時における表示画像の例を示しており、移動方向を示す矢印マーク501を提示し、ユーザーが2回目以降の撮影はこの矢印マーク501の方向に移動させて撮影を行うように誘導する。ユーザーはこのマーク501の方向に撮像装置の向きを合わせて移動して撮影するだけでよい。このように、移動方向を視覚的に分かりやすく明示することが望ましい。また、図5(a)中のメッセージ502「測定開始点が入るように撮影して下さい」のように測定開始時には測定点を画角内に入れて撮影するように誘導するメッセージによる誘導手段を設けるのが望ましい。本実施形態では2回の撮影で測定を行うが、さらに多くの撮影回数によって測定を行う際に、ユーザーに多くの撮影画像の中から測定開始点Aの写った画像を抽出させ、その画像上で測定開始点Aを入力させる場合がある。この場合、上記のような誘導メッセージにより、初めの撮影画像に測定開始点Aが写ることになるため、その画像を自動で抽出することで測定点の入力時の作業を削減できる。また、同様に測定終点Bを撮影した時点で撮影を終了するように誘導することで、1つの測定において撮影した画像群からの中から最初の撮影画像と最後の撮影画像を順に表示して2つの測定点を簡単に入力できるようにするなどの方法で作業性を良くするのでもよい。
また、移動方向の提示手段として表示部104に移動方向マーク501を表示したが、これに制限されるものではなく、左右のランプによって右に移動させるなら右ランプを点灯させるなど他の方法でも構わない。また、本実施形態では、移動方向を第1撮像部101aから第2撮像部101bへの方向としているが、これに制限されることなく、逆方向でも構わない。その場合には、まず測定点Bを画角内に入れて撮影し、測定点Bから測定Aの方向に移動させながら撮影すればよい。
次に、ユーザーXは測定開始点Aが画角内に入るように、図4(a)の光軸411の方向に撮像装置100を向けて撮影を行われ、撮影画像が記録される(図2BのS212)。この時の撮影された視差を有する画像を画像1a、1bとする。
撮影画像1a、1bはさらに画像処理部102から視差値算出部112に出力される(D5)。視差値算出部112では、異なる撮影位置で撮影された画像間の位置関係を算出するための共通する特徴点の検出と、それに対応する各画像a、b間での視差値の算出を行う。また、後述する測定領域検出部111によって入力された測定点に対して視差の算出を行う。
視差値算出部112では、撮影画像1bに対して順に特徴領域検出処理(S213)、視差値の算出処理(S214)、判定処理(S215)を順に実行し、2回目の撮影画像との位置関係を求めるために有効な特徴点を抽出する。有効な特徴点とは視差の算出が可能であり、異なる位置での撮影画像間で共通する点であると判別可能な特徴点である。
本実施形態では、特徴点3点以上を抽出するものとする。これは3つの共通点により2つの3次元空間の位置関係が識別できるためである。視差値算出部112では移動させながら撮影する場合において、撮影位置の異なる画像間で特徴点から共通の領域が存在するか検出し、かつその検出された領域の特徴点で視差が算出可能であるかの判断を行う。ここで、S213〜S215の処理に関して詳細に述べる。
図1Bは、視差値算出部112の一構成例を示す機能ブロック図である。図1Bに示すように、視差値算出部112は、特徴領域検出処理部112−1と、視差値演算部112−2と、特徴点検出部112−3と、特徴点選択部112−4と、を有している。
特徴領域検出処理部112−1は、画像上の濃淡値の変化が大きい点や領域を抽出し、その点や領域に対して特徴量を規定する処理を行い、その中でより識別しやすい特徴量を有する特徴点を選択する(S213)。例えば、コーナーやエッジなど変化の大きな点や領域では濃淡値の変化が大きく、類似性を比較した際にそれが同一の点であるのか判別しやすいため特徴点として選択されやすくなる。また、このような特徴点を抽出し、その類似性を識別するための方法として様々な手法があるが、ここではSHIFT(Scale−Invariant Feature Transform)を用いた特徴量検出を用いている。これは、特徴点の周辺を数画素のブロックに分割し、ブロックごとに8方向の勾配ヒストグラムを求めて128次元の特徴ベクトルで示すものである。また、本実施例ではSHIFTを用いているが、これに制限されることなくSURF(Supeeded-Up Robust Features)やGLOH(Gradient Location−Orientation Histgram)といった他の特徴点抽出手法を用いても構わない。
次に、視差値演算部112−2では、特徴領域検出処理部112−1で抽出した特徴点に対して画像a、b間から視差値の演算を行う(S214)。ここでは、同様に画像1a上から特徴点を抽出し、画像1bで選択された特徴点と類似性を比較し、同一と認識される特徴点(対応点)の画像上の座標位置を求める。続いて、同一とみなされた2つの特徴点に対して撮像部の配置方向の座標位置の差分を視差値とする。画像a、b間で対応点を求める場合には、2つの画像は平行に固定配置された2つの撮像部から生成されるため、画像1bの特徴点と同じラインに近い領域に制限して類似する特徴点を抽出するようにすれば処理量の削減ができる。このように各特徴点に対して画像a、b間で対応点を検出し、そのずれ量を視差値として演算する。ここでの視差値演算部112−2には、上記のように特徴量を用いた特徴ベースのマッチング方法を用いたが、ブロックマッチングのような領域ベースのマッチング方法でもよい。特徴ベースのマッチングは明るさの変化やひずみ、回転などの影響が小さいので特徴が得られる画素に対しては有効な手法であるが、十分な特徴量を得られる画素は疎になるという特徴を有する。一方で、領域ベースのマッチングは対象の画素を中心に周辺領域を含めて類似性を判定して視差を算出するため、基本的には全ての画素に対して密に視差値を求めることができるが、その分だけ処理量が多くなる。後述する測定点に対する視差値算出には、指定された箇所が必ずしも特徴点検出によって特徴が得られる画素とは限らないため、画素ごとに視差の算出ができるブロックマッチングによる視差算出の方が望ましい。本実施形態では、このように2つの撮像位置間の関係を求める特徴点に関してのマッチングは特徴点ベースのマッチング手法を用い、指定点に対するマッチングではブロックマッチングを用いているが、これに制限されない。
ここで、ブロックマッチングによる視差算出に関して述べる。ブロックマッチング法による視差算出は、ブロック単位での類似度により2つの画像間で同じ被写体の特徴点位置を検出し、そのずれ量(視差)を検出する。この特徴点に係る2つの画像中の共通の点を対応点と呼ぶ。対応点の探索を行うために評価関数としてSAD(Sum of Absolute Difference)を用いる。SADでは画像1、画像2のそれぞれで注目画素を中心にウィンドウを設定し、設定したウィンドウ間の各画素の輝度の差を求め、その各画素間から得られた輝度の差の総和を算出する。同様な処理を画像2側の注目画素を変えながら行い、値が最も小さい注目画素が対応点であるとする。
ここで、上述の処理内容を具体的に説明する。図6(a)には被写体Oを水平方向に視点の異なる位置から撮影した場合の概要図を示している。左視点から撮影された画像は画像1であり、右視点から撮影された画像は画像2になる。このとき、撮影された画像を図6(b)に示している。図6(b)では視点位置が異なることで、被写体Oの位置がそれぞれの画像で異なる位置に存在することが分かる。図6(c)と(d)を用いて、画像1を基準に視差値を算出する場合において、被写体O上の一つの頂点を特徴点とした際のブロックマッチングの説明をする。この特徴点が画像1上の画素aに存在するとした場合に、画素aを中心とした3×3の大きさのウィンドウM1を設定する。次に、画像2において画素aと同一の位置にある画素a’
0を探索開始点として設定し、3×3のウィンドウM2を設定する。次に設定したウィンドウ間の各画素の輝度の差を求め、その各画素間から得られた輝度の差の総和を算出する。例えば、図6(d)のように、それぞれの設定したウィンドウの画素の値をX1〜X9、X’1〜X’9とすると、
式(1)のような計算を行い、SAD値を求める。平行配置された撮像部で撮影された視差を有する画像は無限遠が視差0であり、近くの被写体になるほど視差が大きくなる。このとき、画像1を基準として画像2が右視点の場合には、画像2上の特徴点は左側に移動する。そこで、探索方向を左側として画素a’0から左方向に注目画素を変更していき、上述したSAD値を順次求め、得られたSAD値の中で最小値をとる注目画素を対応点とする。この場合、対応点である画像2上の画素a’1が最も値が小さい結果となれば、この画素を対応点とする。
対応点を求めたい画素に対し、このような処理を行うことでその画素に対する視差値を取得することができる。本実施形態では、画像1と画像2のサイズは1920×1080、ウィンドウサイズは注目画素を中心に16×16として設定し視差値の算出を行っている。尚、ここでは上記の画像やブロックサイズを設定したが、これに限定されるものではなく精度や処理量を考慮し、適宜設定すればよい。また、本実施形態ではSADを用いたブロックマッチングによって求めたが、他の評価関数でも構わない。
このようにして特徴領域検出処理部112−1が検出した特徴点とそれに対応する視差値から、特徴点検出部112−3が候補となる特徴点を抽出し、抽出された特徴点から特徴点選択部112−4が、3つの特徴点を選定する。ここで特徴点の選択について説明する。特徴点検出部112−3による特徴点の検出処理は撮影画像において移動方向側の領域から検出するものとする。例えば、図5(b)は撮影画像1bにおいて画像全体に特徴点検出を行った場合に検出された特徴点511〜516を示すが、特徴点検出部112−3が、移動方向側の4つの特徴点511、512、513、514を候補特徴点として選択する。これは、移動後の撮影画像においても選択された特徴点が画角内に入っている必要があり、提示する移動方向側の画像領域内の特徴点を選択することで移動範囲を大きくとることができるためである。例えば、特徴点511の替わりに特徴点516を選択すると2回目の撮影では516が画角内に収まるように撮影する必要があり、特徴点511を選択したときに比べ移動量が減少する。この場合であれば、2回目の撮影で測定点Bを入れて撮影することができずに、3回の撮影が必要になる。そのため、特徴点を選択する際には、移動方向側の領域から選択することで撮影位置を大きく移動することが可能となり、長さの測定に必要な共通領域を確保したまま、より少ない回数の撮影で測定することができる。また、処理に必要とする画像数を削減することが可能であるため、処理量やメモリ量を低減させることができる。本実施例では、撮影画像に対して移動方向側の1/2の領域に対して特徴量検出を行い、移動方向側の領域内の特徴点から優先的に特徴点を選択するものとしている。ここで、特徴点を検出する領域の範囲はこれに制限されることなく、より処理量を低減させるために移動方向側1/4の領域にするなど、自由に設定できるものとする。また、特徴点を検出する画像は移動方向側に配置された撮像部101bの撮影画像1bから行う方が望ましい。これは2回目の撮影画像と共通点を検出する際に撮影位置が近いほど類似性が高くなり、移動方向側の撮像部の撮影画像を用いることで検出精度の向上が行えるためである。
次に、特徴点選択部112−4が、選定した特徴点に対して視差算出を行い、視差値を求めることができるか否かを判定する(S215)。視差値の取得は画像1b上の特徴点に対して画像1aから対応点を検出し、その視差値を算出する。優先度の高い特徴点から視差値を算出し、算出された視差値に対してエラーが出るようであれば、他の特徴点を選択して同様に視差の算出が可能であるかを判定する。例えば、選択された特徴点511〜514のうち移動方向側の特徴点から視差値を算出し、算出された視差値にエラーのないものから3点選択する。特徴点511〜513の3点が基準を満たせば3点を選択し、特徴点512の視差値がエラーと判定されば、次の候補である特徴点514の視差値を判定して選択するか決める。ここでは、3つの特徴点511〜513が選択されたものとして説明を進める。
特徴点の検出と共に視差値を算出するのは、長さの算出時に各点の視差値から3次元位置を算出し長さを算出するため、視差に大きな誤差があれば測定ができなかったり、長さを算出できても結果に大きな誤差が出る要因となったりするためである。本実施形態のように視差値を用いて判定することで確実に測定を行える。
また、選択する特徴点は視差値の大きな方が望ましい。これは視差値が小さいほど遠方の領域を示し、類似性を判定するマッチング精度が低下するためである。例えば、閾値αを設定し、視差値がα以下である場合には選択しないことで精度の向上が図れる。視差値と距離の関係は解像度や画素ピッチなどのパラメータや基線長に依存するため、閾値αの設定値はこのようなパラメータによって適切に設定する必要がある。もし、S213で候補選定された特徴点で基準を満たす特徴点3点がない場合には再度特徴点検出を行い(N: S215からS213に戻る)、異なった特徴点を選定し、同様の手順で判定すればよい。
次に、1回目の撮影が終了し、2回目の撮影を行う。その際に、2回目の撮影画像によって測定が可能か否かを提示する通知手段を設けるのが望ましい(S216)。この場合、図5(b)の特徴点511〜513が選択されたので、2回目の撮影時にこれら領域を含む部分がハイライトされて視認できるようにするなどである。例えば、図5(c)は2回目の撮影時のプレビュー画像の例を示しているが、このように2回目の撮影画像のプレビュー画面上に特徴点511〜513に対応する特徴点511’〜513’をトラッキングし指定撮影領域として表示し、ユーザーはその領域を確認しその部分が画角内に入るように撮影するよう誘導する。このように、どの領域を画角内に入れて撮影すれば測定可能かを示すことで測定の失敗を防ぐことが可能となる。また、上記はプレビュー時にもトラッキング処理を行った例であるが、例えば1回目の撮影後に撮影された画像と選択された特徴領域とを表示し、ユーザーはそれを確認した上で2回目の撮影を行ってもよい。この場合、撮影ごとに撮影画像の確認が必要になるが、リアルタイムでトラッキング処理する処理量を低減することができる。また逆に、2回目の撮影において、共通する特徴点を検出できない場合にそれを通知するものでもよく、移動させすぎて必要な共通が不足しているなどユーザーが判断できるものでもよい。この場合、有効な特徴点が検出できなければ表示の色を変えたり、検出できないとメッセージを表示したりするのでもよい。このように、撮影が適切であるかを判定するための特徴点を含む領域を検出し、それが移動後の撮影で撮影されるかユーザーへ通知することで確実な測定が行える。
次に、2回目の撮影を行い、撮像画像を1回目の撮影画像と関連付けて記録する(S217)。記録された2回目の撮像画像の画像2aから特徴点検出を行い、画像1bで検出された特徴点と最も類似度の高い特徴点とをそれぞれ検出する(S218)。移動前後の撮影画像間で共通する特徴点を検出する場合は、移動前の画像からは移動方向側に配置された撮像部101bの撮影画像を、移動後の撮影画像からは移動方向と逆側に配置された撮像部101aで撮影された画像を用いるのが望ましい。これは、撮影時の実空間上の位置関係がより近い画像同士の類似性が高く、マッチング精度が向上するためである。この場合、1回目と2回目の撮影画像において、1回目の撮影画像1bと2回目の撮影画像2aとが最も実空間上の位置が近いため、その2画像間を選択し、対応する特徴点を検出するのが有効である。続いて、画像2aから検出された特徴点に対して、画像2b上から対応点を検出し、その視差値を算出する(S219)。
本実施形態では、2回目の撮影で測定終点Bが画角内に収まっている例を示しており、この時点で撮影を終わるものとしているが、測定対象範囲が2回目の撮影でも入らない場合には、同様にS211〜S219の処理を繰り返し、撮影位置を移動させながら撮影を行い、測定終点Bが撮影されるまで撮影する。
次に撮影が終了し、測定点の座標情報を取得する測定点の検出処理を行う(S220)。本実施形態では測定点の検出はタッチパネル上に画像を表示し、ユーザーによって画像上の点を選択してもらい、その座標位置を検出する。測定領域検出部111はこのようにしてユーザーによって指定された画素位置を取得して視差値算出部112に出力する(D7)。この時、測定点Aが写った1回目の画像と測定点Bが写った最後の画像を自動で順に表示し、それぞれから開始点と終了点を選択して作業性をよくすることが望ましい。例えば、3回以上の撮影によって測定する場合には中間撮影位置の撮影画像から測定点を選択する必要はないので、上記のように中間位置での撮影画像表示することなしに、選択することで作業の効率化が図れる。
また、測定点の入力方法に関してはこれに制限されることなく、画面上にカーソルを表示し、撮像装置に供えられた十字キーによって移動/選択するものや、例えば撮影時に測定点を決めるガイドが表示されており、ガイドに合わせるように撮影することで自動に測定点を取得するようなものでも構わない。また、測定点の選択時の画像の表示方法もこれに制限されない。
測定点の座標位置が検出できた後は、それぞれの点に対して視差値算出部112が、視差値を算出する(S221)。ここでは、前述したブロックマッチング法による視差算出を行い、視差値を求めるが、これに制限はされず、他の視差値算出方法でもよい。測定点の視差値算出時の基準画像は特徴点検出を行った画像とするのがよい。これは、後で説明する特徴点の座標位置と測定点の座標位置を関連づける際に、同じ画像を基準画像にした方が処理しやすいためである。この場合は、画像1bと画像2aが視差算出時の基準画像となる。視差値算出部112によって算出された視差値は各撮影位置の撮像画像ごとに関連づけて3次元位置情報算出部113に出力される(D8)。具体的に言えば、1回目の撮影画像から得られた測定点Aと3つ以上の特徴点の座標位置と視差値を関連付け、2回目の撮影画像から得られた測定点Bと特徴点の座標位置と視差値を関連付けて出力する。
次に、3次元位置情報算出部113は入力された各点の視差値とカメラパラメータ取得部115から入力された情報を基に、各点の実際の3次元位置情報を算出する(S222)。ここで、カメラパラメータ取得部115によって入力された情報D9とは撮像部101の外部カメラパラメータや内部カメラパラメータを示す。カメラパラメータ取得部115は撮像部101からこのようなパラメータ(D2)を取得したり、データベースとして保持していたりする。ここで、撮像部の外部カメラパラメータとは2つの画像がどのような配置の撮像部によって撮影されたかを示す情報であり、例えば2つの撮像101a、101b間の距離である基線長や撮像部間の光軸の相対的角度を示す輻輳角などである。また、内部カメラパラメータは撮影における撮像部の焦点距離情報、撮像素子の画素ピッチなどの情報である。カメラパラメータ取得部115はこのようなパラメータ情報を3次元位置情報算出部113へ出力する。
3次元位置情報算出部113は入力された各点における実際の3次元的な位置情報を算出する。ここでの3次元位置は各撮影位置において、視差値算出時の基準画像を撮影した撮像部の光学中心を基準とした実空間座標位置であり、撮像装置から被写体までの距離や左右上下方向の位置を表す。ここで、各撮影位置における3次元位置座標の算出に関して説明する。3次元位置座標は基準画像の中心を原点とする。例えば基準画像上の左上を原点とした場合のある座標点K(x、y)があるとし、画像の中心を原点として変換した場合に、点Kの座標は(x’、y’)と表せるとする。この時、点Kに対する視差値をD、撮影時の焦点距離をf、基線長をB、センサーの画素ピッチをPとすると、基準画像を撮影した撮像部の光学中心を基準点として点Kまでの実空間上の距離Zは下記のように表すことができる。
Z=(B×f)/(D×P)
また、センサー1画素あたりの大きさは距離Zの平面上ではZ*P/fと示せるので基準画像中心を基準とした3次元位置情報(X,Y,Z)のXとYは下記のように表せる。
X=x’×B/D
Y=y’×B/D
上記のように各点において実際の空間上の3次元位置情報を求めると、それぞれの撮影位置で撮影された画像ごとに各点の位置関係が分かる。このとき、一対の視差を有する画像から算出される3次元位置情報は同一の空間座標系に配置される。次に、測定点Aと測定点Bの相対的な位置関係を求める。これは、上記により撮影位置1の撮影画像1a、1bから点Aと3つの特徴点511〜513の位置関係が、撮影位置2の撮影画像2a、2bから点Bと3つの特徴点511〜513の位置関係が分かるので、共通する特徴点511〜513の位置を基に点Aと点Bの3次元的な位置関係を求めればよい。簡単に言えば、点Aと点Bを同一の3次元空間座標系に位置するように座標を変換する。ここでは点Aの座標をA(Xa、Ya、Za)、2回目の空間座標上での点Bの座標をB(Xb、Yb、Zb)とし、点Bの座標を点Aの所属する座標系を基準に変換した座標をB’(Xb’、Yb’、Zb’)とする。
次に、長さ情報算出部114では算出された点A,Bの座標情報(D10)から長さを算出する(S223)。この時、2点A,Bそれぞれの3次元位置情報から下記のように長さLを算出する。
L=√(|Xa−Xb’|2+|Yb−Yb’|2 +|Za−Zb’|2)
次に、算出された長さ情報(D11)を表示部104に出力し長さ情報を表示する(S224)。この時、各撮影位置で撮影されたそれぞれの基準画像を用いて1枚に結合した画像を生成し、その画像上に点A、点Bとそれに対応する長さを重畳表示すると視認し易くなる。
このように、本実施形態の撮像装置によれば画角に入りきらない領域を測定したい場合に少ない撮影回数で確実に測定ができ、失敗しない測定が実現できる。また、測定対象に近づいて測定することができるため、基線長の小さな撮像装置であっても測定精度の向上が図れ、測定精度を向上させつつ、装置の小型化が図れる。また、測定において画角内に収まるように撮影距離をとる必要がないため、移動範囲が制限された空間においても簡単に測定することができる。
また、本実施形態では、単一の被写体においての測定を示したが、これに係わるものではなく、2つの被写体の間隔の長さや、複数の被写体全体の幅などでも構わない。
本実施形態では静止画撮影を複数回に分けて撮影する方法で示したが、これに制限されるものではなく、連写や動画撮影で連続的に撮影する場合においても有効である。
例えば、動画で撮影する場合において、測定開始点を入れて撮影を開始し、そのまま移動方向提示部に従って撮像装置を動かして測定終点が撮影された時点で撮影を終了すればよい。この場合、動画データの各フレームにあたる視差を有する画像がそれぞれある撮影位置から撮影された画像a、bとして扱えば同様である。さらには、動画撮影の場合には多くの撮影画像が記録され、処理する画像データが増加するが、本発明の原理を用いれば、ある撮影位置の画像に対して、測定可能でかつ最も移動量の大きな撮影位置の異なる撮影画像を判定できるため、処理する画像データを低減させることができる。例えば、あるフレームで測定に必要な特徴点を抽出し、移動後のフレームからも同様の特徴点を検出する場合に抽出された特徴点が移動方向とは最も逆側の領域に検出されるフレームを移動後の撮影画像として選択するようにすれば最も移動範囲が大きく、測定に必要な共通する特徴点有する移動前後の撮影画像の組み合わせが得られる。このようにして測定可能でかつ最も移動範囲の大きなフレームを抽出し、それを移動後の撮影画像と位置付け、順次同じようにすることで少ない撮影画像での処理が可能となり、処理量の低減と高速化が図れる。連写で撮影する場合にも同様にして可能な限り少ない枚数で必要な撮影領域を含んだ画像を選択して処理すればよい。
本発明の実施形態によれば、物体上の2点間の長さや物体間の間隔の長さを測定する際に、その測定対象領域が撮像装置の撮影範囲となる画角に入りきらない場合であっても、撮影位置を被写体から遠ざけて撮影距離を長くすることなく測定可能という効果が得られる。
また、被写体に近づいた撮影が可能であるため、撮影領域の制限された環境や、基線長の小さい携帯性の良い撮像装置で測定精度の向上が可能という効果が得られる。
また、撮影時に、目的とする部分の長さの測定が可能か否かを判断できるため、確実な測定が可能という効果が得られる。
さらには、異なる被写体の間隔の長さなど、単一の被写体に限らない2点間の測定も可能という効果が得られる。
上記の実施の形態において、添付図面に図示されている構成等については、これらに限定されるものではなく、本発明の効果を発揮する範囲内で適宜変更することが可能である。その他、本発明の目的の範囲を逸脱しない限りにおいて適宜変更して実施することが可能である。
また、本発明の各構成要素は、任意に取捨選択することができ、取捨選択した構成を具備する発明も本発明に含まれるものである。
本発明は、撮像装置として特定した場合に、撮像装置を有する携帯端末(スマートフォン、携帯電話機、PCなど)や、カメラ、撮像装置から撮像データを主張して長さを取得する情報処理装置などの種々の装置を含むものであり、機器の名称により限定されるものではない。
また、本実施の形態で説明した機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより各部の処理を行ってもよい。尚、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。
また、「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また前記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。機能の少なくとも一部は、集積回路などのハードウェアで実現しても良い。