JP5915130B2 - 三次元座標測定装置、三次元座標測定方法、及びプログラム - Google Patents

三次元座標測定装置、三次元座標測定方法、及びプログラム Download PDF

Info

Publication number
JP5915130B2
JP5915130B2 JP2011268434A JP2011268434A JP5915130B2 JP 5915130 B2 JP5915130 B2 JP 5915130B2 JP 2011268434 A JP2011268434 A JP 2011268434A JP 2011268434 A JP2011268434 A JP 2011268434A JP 5915130 B2 JP5915130 B2 JP 5915130B2
Authority
JP
Japan
Prior art keywords
time
feature point
frame
unit
amount
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011268434A
Other languages
English (en)
Other versions
JP2013120133A (ja
Inventor
中山 收文
收文 中山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011268434A priority Critical patent/JP5915130B2/ja
Publication of JP2013120133A publication Critical patent/JP2013120133A/ja
Application granted granted Critical
Publication of JP5915130B2 publication Critical patent/JP5915130B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Length Measuring Devices By Optical Means (AREA)

Description

本明細書で議論される実施態様は、物体の位置を特定する技術に関するものである。
車両等の移動体に取り付けたカメラで周囲の映像を撮影して得られた映像を用いて、周辺の物体の三次元位置を測定する装置が知られている。この装置は、移動体が時々刻々移動しながらカメラでの撮影が行われ、その撮影のタイミング(映像フレーム)毎に、周囲の物体の三次元位置の算出が行われる。このようにして撮影した映像から物体の三次元位置を測定する手法として、SFM(Structure from Motion )と呼ばれている方式と、移動ステレオ(Motion Stereo )方式とが知られている。
SFM方式は、移動体が移動しながら撮影された一連の時系列映像から、物体の複数の特徴的な部分(特徴点)の時系列での対応をまず求める。そして、それらの特徴点の対応関係を利用して、移動体の移動量(回転量及び並進量)と特徴点の三次元位置とを算出するというものである。
このSFM方式による特徴点の三次元位置の測定では、ある程度の枚数の時系列映像群が必要となる。言い換えれば、時系列映像がある程度の枚数撮影される間隔毎にしか、特徴点の三次元位置を測定することができない。このため、移動体が移動しながら、新たに1枚の映像を撮影する毎に周囲の物体の三次元位置を定めるという用途において単純にSFM方式を適用することはできない。但し、図1に示すように、新たな映像を撮影して取得する毎に、直近に取得した所定枚数(図1においては4枚)の時系列映像を用いるようにすれば、各撮影時刻での周囲の物体の三次元位置の算出は可能である。
一方、移動ステレオ方式は、カメラで得た時系列の映像を用い、時々刻々の映像の各々における物体の特徴点を、映像照合により追跡する。そして、参照する2つの撮影時刻の映像間での特徴点の映像内位置と、外部より与えられるその間の移動体の移動量(回転量及び並進量)を用いて、映像に映っている物体の三次元位置を、三角測量の原理で算出するというものである。この移動ステレオ方式は、特徴点の追跡の手法の違いにより、2種類に大別される。この2種類の移動ステレオ方式について、図2A及び図2Bを参照しながら説明する。
この移動ステレオの第一の方式は、図2Aに図解されているように、時系列の映像(時刻t−5の映像)から特徴点を発見したときに、その特徴点が含まれていた映像から、当該特徴点の映像(特徴点を含む比較小領域の映像)を抽出して記録しておく。そして、それ以降の時系列映像の各々(時刻t−4〜時刻tの各映像)に対して、この特徴点の映像(時刻t−5の映像)との照合を行って、特徴点の時系列映像での対応関係を求めていくというものである。この手法では、ある映像から新たに取得した特徴点に対応する特徴点の特定を、当該映像に続く時系列映像の各々について順に行い、最初に取得した特徴点からの動きが生じるまで特徴点を追跡し続け、動きが生じた時点で、特徴点の三次元位置を求めるようにする。
また、この移動ステレオの第二の方式は、図2Bに図解されているように、時系列映像のうちのある時刻の映像から抽出した特徴点の映像と、時系列映像のうちの当該時刻に時間軸で隣り合っている映像である次時刻映像との照合を行う。そして、この照合を、時間軸で隣り合っている映像間で順次行うことで、特徴点の時系列映像間での対応関係を求めていくというものである。図2Bの例では、例えばある時刻の映像が時刻t−5の映像である場合には次時刻映像は時刻t−4の映像となり、ある時刻の映像が時刻t−4の映像である場合には次時刻映像は時刻t−3の映像となる。この手法では、着目した撮影時刻での映像における特徴点の位置と、予め決められた時間間隔に基づき定めた過去の撮影時刻での映像における特徴点の位置とを用いて、特徴点の三次元位置を定めるようにする。
ところで、映像に含まれている特徴点の三次元位置を定めるには、異なる位置から特徴点を撮影して得た映像が必要であり、例えば、カメラを取り付けた移動体が移動しながら当該カメラで映像を撮影する必要がある。このことについて説明する。
単眼カメラの動画像を用いた三次元測距は、基本的な考え方として、図3に示すような基本的な幾何学的な関係による。
図3は、移動体上に取り付けたカメラによって撮影して得られた映像に特徴点Pが含まれる場合を図解したものである。
図3においてX軸とZ軸とは直交しており、移動体上で定義されている。移動体はX軸の正方向に移動し、カメラの撮影方向はX軸とZ軸との交点(投影点)からZ軸の正方向に向けられている。このカメラの焦点距離はfであり、従って、図3においてはZ=fの位置に撮像面が配置されていると考えることができる。
位置が固定されている(すなわち移動しない)特徴点Pは、時刻「1」においてのX=X1及びZ=Z1の地点に位置しており、この時刻でカメラで撮影を行うと、特徴点Pは、撮像面上のX=x1の位置に投影される。また、時刻「2」においてカメラで撮影を行うと、特徴点Pは撮像面上のX=x2の位置に投影される。なお、時刻「1」から時刻「2」までの期間における移動体の移動量はbである。
この図3においての幾何学的な関係より、
x1=f×X1/Z1
x2=f×(X1−b)/Z1
が成立する。
ここで、時刻「1」と時刻「2」とにおける、カメラから見た特徴点Pの視差dは、
d=x1−x2=f×b/Z1
となる。よって、特徴点PのZ軸方向の位置(すなわち、カメラから見た特徴点Pまでの奥行き)Z1は、
Z1=f×b/d
で表される。
ここで、奥行きZ1の誤差について考える。
今、投影点での観測ずれによって視差dが1だけずれた値として観測された特徴点Pまでの奥行きをZ2とする。このとき、距離のずれdZは、
dZ=Z1−Z2
=f×b/d−f×b/(d+1)
=f×b/(d×(d+1))
=Z1/(f×b/Z1+1)
=(Z1)2 /(f×b+Z1)
となる。
よって、カメラ間の距離(すなわち、カメラを取り付けた移動体の移動量)bの値が大きいほど、誤差dZが小さくなって奥行きの算出精度が高くなり、逆に、このbの値が小さいほど、誤差dZが大きくなって奥行きの算出精度が低下することが分かる。更には、特別な場合として、b=0の場合、すなわち移動体が移動しない場合には、d=0となってしまい、Z1を算出できなくなる。このように、単眼カメラによる三次元位置の算出では、移動体の移動量がある程度大きいことが求められる。
特開2009−180536号公報
出口光一郎、「多視点からの透視投影画像の因子分解による3次元形状復元」、計測自動制御学会論文集、公益社団法人計測自動制御学会、平成10年10月、第34巻、第10号、p.1321−1328
前述したように、単眼カメラによる三次元位置の算出では、移動体の移動量がある程度大きいことが求められる。従って、移動体の移動量が低下し、例えば時系列画像のMフレーム分以上の撮影時間間隔に亘って移動体が停止していると、この停止区間を含むMフレームの時系列映像群からでは、物体の三次元位置を定めることができない。ここで、例えば、このフレーム数Mの値を、移動体の停止期間よりも長い非常に大きな値とすれば、物体の三次元位置を定めること論理的には可能となる。しかしながら、現実の装置のハードウェアリソースを踏まえると、そのような多大なフレーム数を扱うのは現実的ではない。
この点に関し、前述した移動ステレオの第一の方式では、移動体が移動して映像内での特徴点の位置が変化するのを待ってから三次元位置を定めるようにすることで、上述したような、移動体の停止の問題を回避することができる。また、停止していた移動体が一旦動き出してからは、その後に移動体が停止したとしても、最初の特徴点を発見した時点から見れば特徴点の位置に変化があるので、三次元位置を定めることができる。しかしながら、特徴点を発見した映像の撮影時刻と、照合対象の時系列映像との時間差が大きい場合には、移動体の移動に伴い物体とカメラとの位置関係が変化するため物体の見え方が変化して、比較小領域の映像と時系列映像との違いが大きくなる。この違いが大きくなると、特徴点の対応関係を求めることが困難となり、結果として、特徴点の三次元位置を定めることができなくなってしまう。
また、前述した移動ステレオの第二の方式では、照合に用いる小領域の映像は時系列的に徐々に変化していくので、移動体の移動に伴い物体の見え方に変化があっても、継続的に特徴点の対応を求めることができる。但し、前述したように、この方式で物体の三次元位置を定めるには、着目した撮影時刻の特徴点の位置と、予め決められた時間間隔に基づき定めた過去の撮影時刻での映像における特徴点の位置とを用いて、特徴点の三次元位置を定めるようにする。ここで、当該着目した撮影時刻から当該過去の撮影時刻までの時間間隔をMフレームとすれば、物体の三次元位置を定めるには、直近Mフレーム内で移動体が移動している必要がある。このため、移動体の移動量が低下してMフレーム以上連続して移動が停止していると、停止している期間では時系列映像が変化しないため、この停止区間を含む時系列映像群では、物体の三次元位置を定めることができない。なお、この問題は、SFM方式による特徴点の三次元位置の測定で説明したことと同様である。
上述した問題に鑑み、本明細書で後述する三次元座標測定装置は、特徴点の三次元位置の測定を、撮像装置の動き方の違いに依らず安定して行えるようにする。
本明細書で後述する三次元座標測定装置のひとつに、撮影部、抽出部、追跡部、検出部、登録部、及び算出部を備えるというものがある。ここで、撮影部は、時系列映像を撮影する。抽出部は、この時系列映像の各フレームのうちで撮影順の早いものから順に、各フレームに含まれている特徴点を抽出する一方で、同一フレーム内で先に抽出されていた特徴点からの当該同一フレーム上での距離が所定距離に満たない点については当該抽出の対象から除外する。追跡部は、特徴点を時系列映像上で追跡する。この追跡は、時系列映像のうちの時系列で連続している2フレームにおいての前のフレームから抽出部によって当該抽出の対象から除外されずに抽出された特徴点と後のフレームにおける当該特徴点についての対応点との対応関係を時系列映像の各フレームについて順次求めることによって行われる。検出部は、撮影部の移動量を検出する。登録部は、この移動量が所定量を超える度に、キーフレームに含まれている特徴点についての当該キーフレーム上での位置情報と、当該特徴点についての追跡部による追跡結果を表している追跡情報との登録を行う。なお、キーフレームとは、この移動量が当該所定量を超えた直後に撮影された時系列映像のフレームである。そして、算出部は、この移動量と、登録部により登録された、特徴点についての複数のキーフレームの各々での位置情報及び当該特徴点についての追跡情報とを用いて、当該特徴点の三次元位置の座標を算出する。なお、追跡部は、前のフレームから抽出部によって抽出された特徴点についての後のフレームにおける対応点についての、当該後のフレームから抽出部によって抽出されていた特徴点からのフレーム上での距離が所定距離に満たなかった場合には、当該後のフレームから抽出されていた特徴点を抽出部による抽出結果から除外し、除外しなかった特徴点について追跡を行う。
また、本明細書で後述する三次元座標測定方法のひとつは、まず、撮影部により撮影された時系列映像の各フレームのうちで撮影順の早いものから順に、各フレームに含まれている特徴点を抽出する一方で、同一フレーム内で先に抽出されていた特徴点からの当該同一フレーム上での距離が所定距離に満たない点については当該抽出の対象から除外する。次に、この特徴点を時系列映像上で追跡する。この追跡は、時系列映像のうちの時系列で連続している2フレームにおいての前のフレームから当該抽出の対象から除外されずに抽出された特徴点と後のフレームにおける当該特徴点についての対応点との対応関係を時系列映像の各フレームについて順次求めることによって行われる。次に、記撮影部の移動量を検出する。次に、この移動量が所定量を超える度に、当該所定量を超えた直後に撮影された時系列映像のフレームであるキーフレームに含まれている特徴点についての当該キーフレーム上での位置情報と、当該特徴点についての追跡の結果を表している追跡情報との登録を行う。そして、この移動量と、登録されている、特徴点についての複数のキーフレームの各々での位置情報及び当該特徴点についての追跡情報とを用いて、当該特徴点の三次元位置の座標を算出する。なお、特徴点の追跡では、前のフレームから特徴点の抽出により抽出された特徴点についての後のフレームにおける対応点についての、当該後のフレームから特徴点の抽出により抽出されていた特徴点からのフレーム上での距離が所定距離に満たなかった場合には、当該後のフレームから抽出されていた特徴点を特徴点の抽出による抽出結果から除外し、除外しなかった特徴点について追跡を行う。
本明細書で後述する三次元座標測定装置は、特徴点の三次元位置の測定が、撮像装置の動き方の違いに依らず安定して行えるという効果を奏する。
SFM方式による特徴点の三次元位置の測定を、時系列画像の撮像間隔毎に行えるようにする手法の説明図である。 移動ステレオの第一の方式の説明図である。 移動ステレオの第二の方式の説明図である。 単眼カメラの動画像を用いた三次元測距の原理の説明図である。 三次元座標測定装置の一実施例の機能ブロック図である。 特徴点の三次元位置の測定の手法の説明図である。 三次元座標測定装置の一実施例の詳細機能ブロック図である。 DBFバッファの構造の説明図である。 DBKバッファの構造の説明図である。 三次元座標測定装置の一実施例のハードウェア構成図である。 三次元座標測定処理の処理内容を図解したフローチャートである。 特徴点登録処理の処理内容を図解したフローチャートである。 SEARCH_SLOT関数の処理内容を図解したフローチャートである。 時系列照合処理の処理内容を図解したフローチャート(その1)である。 時系列照合処理の処理内容を図解したフローチャート(その2)である。 MATCH関数の処理手順を図解したフローチャートである キーフレーム更新処理の処理内容を図解したフローチャートである。 REGIST_DBK関数の処理手順を図解したフローチャートである。 三次元位置算出処理の処理内容を図解したフローチャートである。 SEARCH_KEYF関数の処理手順を図解したフローチャートである。 CALC_RT関数の処理手順を図解したフローチャートである。 移動体の座標系とカメラの座標系との関係の説明図である。 特徴点の三次元位置と異なる2時刻での画像上における当該特徴点の投影点との関係の説明図である。
まず図4について説明する。図4は、三次元座標測定装置の一実施例の機能ブロック図である。
この三次元座標測定装置10は、撮影部11、抽出部12、追跡部13、検出部14、登録部15、及び算出部16を備えている。
撮影部11は、時系列映像を撮影する。
抽出部12は、撮影部11により撮影された時系列映像の各フレームに含まれている特徴点を抽出する。
追跡部13は、抽出部12により抽出された特徴点を時系列映像上で追跡する。この追跡は、時系列映像のうちの時系列で連続する2フレームにおいての前フレームにおける特徴点と、当該2フレームにおいての後フレームにおける当該特徴点についての対応点との対応関係を、時系列映像の各フレームについて順次求めることにより行われる。
検出部14は、撮影部の移動量を検出する。
登録部15は、検出部14により検出された移動量が所定量を超える度に、キーフレームに含まれている特徴点についての当該キーフレーム上での位置情報と、当該特徴点についての追跡部13による追跡結果を表している追跡情報との登録を行う。なお、キーフレームとは、検出部14により検出された移動量が所定量を超えた直後に撮影部11により撮影された時系列映像のフレームである。
算出部16は、検出部14により検出された移動量と、登録部15により登録された、特徴点についての複数のキーフレームの各々での位置情報及び当該特徴点についての追跡情報とを用いて、当該特徴点の三次元位置の座標を算出する。
以上の各機能ブロックを備えている三次元座標測定装置10は、特徴点の三次元位置の測定を、撮影部11の移動量の多少に依らず安定して行うことができる。このことについて、図5を用いて説明する。
まず、追跡部13は、時系列映像のうちの時系列で連続する2フレームにおいての前フレームにおける特徴点と、当該2フレームにおいての後フレームにおける当該特徴点についての対応点との対応関係を、時系列映像の各フレームについて順次求める。図5における破線の矩形A内に図解した例では、特徴点1については、抽出部12により撮影時刻t−5の映像から始めて抽出された後に、撮影時刻t−5の映像と撮影時刻t−4の映像との間で対応関係が求められる。次に、撮影時刻t−4の映像と撮影時刻t−3の映像との間で対応関係が求められる。その後、撮影時刻t−3の映像と撮影時刻t−2の映像との間、撮影時刻t−2の映像と撮影時刻t−1の映像との間、及び、撮影時刻t−1の映像と撮影時刻tの映像との間で対応関係が求められ、その後も同様にして対応関係が求められていく。一方、特徴点2については、抽出部12により撮影時刻t−3の映像から始めて抽出された後に、撮影時刻t−3の映像と撮影時刻t−2の映像との間で対応関係が求められる。次に、撮影時刻t−2の映像と撮影時刻t−1の映像との間で対応関係が求められる。その後、撮影時刻t−1の映像と撮影時刻tの映像との間で対応関係が求められ、その後も同様にして対応関係が求められていく。
撮影部11の移動によって生じる物体(特徴点)の見え方の変化は、時系列で隣接した撮影時刻の映像間では少ない。従って、三次元座標測定装置10は、以上のようにして、時系列で隣接した撮影時刻の映像間で特徴点の対応関係を順次見つけるようにしたことで、特徴点の継続した追跡を、より確実に行うことができる。
また、登録部15は、検出部14により検出された撮影部11の移動量が所定量を超える度に、キーフレームに含まれている特徴点についての情報の登録を行う。図5における破線の矩形B内に図解した例では、まず、撮影時刻t−5の映像がキーフレームとされ、その映像から抽出された特徴点1についての位置情報が登録される。続いて、そのキーフレームの撮影後の撮影部11の移動量が所定量Tkを超えた直後に撮影された、撮影時刻t−3の映像がキーフレームとされ、その映像から抽出された特徴点2についての位置情報が登録される。また、特徴点1については、その直前のキーフレームである、撮影時刻t−5の映像からの追跡情報が、位置情報と共に登録される。続いて、そのキーフレームの撮影後の撮影部11の移動量が所定量Tkを超えた直後に撮影された、撮影時刻t−1の映像がキーフレームとされる。そして、その映像に含まれている特徴点1及び特徴点2について、位置情報と、その直前のキーフレームである撮影時刻t−3の映像からの追跡情報とが登録される。
算出部16は、特徴点の三次元位置の座標の算出を、検出部14により検出された移動量と、登録部15により登録された、特徴点についての複数のキーフレームの各々での位置情報及び当該特徴点についての追跡情報とを用いて行う。図5の矩形B内に図解した例では、特徴点1については、撮影時刻t−5、t−3、及びt−1の各キーフレームでの特徴点1についての情報と、各キーフレームが撮影される間の撮影部11の移動量とが用いられて、三次元位置の座標の算出が行われる。また、特徴点2については、撮影時刻t−3及びt−1の各キーフレームでの特徴点2についての情報と、各キーフレームが撮影される間の撮影部11の移動量とが用いられて、特徴点2の三次元位置の座標の算出が行われる。なお、この特徴点の三次元位置の座標の算出には、現時刻tに撮影された映像における特徴点についての情報と、撮影時刻が現時刻tに最も近い撮影時刻t−1のキーフレームから現時刻tまでの撮影部11の移動量とが更に用いられる。
以上のように、三次元座標測定装置10は、撮影部11が所定量移動する度に登録される、キーフレームでの特徴点についての情報を用いて、当該特徴点の三次元位置の座標の算出を行う。従って、撮影部11の動き方に違いがあっても、特徴点についての情報が当該座標の算出に使用されるキーフレームの撮影位置間の距離が、常にある程度の長さ以上確保されるので、当該座標の算出の精度を、ある程度以上に維持することができる。
また、三次元座標測定装置10では、時系列映像での特徴点の対応関係を求めるには、現時刻と1時刻前とを撮影時刻とする2つの映像での特徴点の位置が分かればよい。従って、このために必要となる特徴点の位置情報の保存領域としては、現時刻と1時刻前とを撮影時刻とする2つの映像についてのものを保持しておく領域を用意しておけば十分であり、処理のために必要な記憶領域が少なくて済む。
なお、抽出部12は、時系列映像の各フレームのうち撮影順の早いものから順に特徴点の抽出を行い、先に抽出されていた特徴点からのフレーム上での距離が所定距離に満たない点については、特徴点の抽出の対象から除外するようにしてもよい。
また、前述の前のフレームから抽出部12によって抽出された特徴点についての後のフレームにおける対応点についての、当該後のフレームから抽出部12によって抽出されていた特徴点からのフレーム上での距離が所定距離に満たない場合がある。この場合には、追跡部13は、当該後のフレームから抽出されていた特徴点を、抽出部12による抽出結果から除外するようにしてもよい。
以上のように、対応関係を有している特徴点に対する追跡部13による追跡の重複が抑制される。
また、図4の三次元座標測定装置10において、撮影部11は移動体に固定されており、検出部14は、この移動体の回転量と並進量とを検出するセンサからの検出出力を用いて、前述の移動量として、撮影部11の回転量と並進量との検出を行うようにしてもよい。この場合、登録部15は、撮影部11の並進量が所定量を超える度に、キーフレームについての前述の登録を行うようにする。
また、図4の三次元座標測定装置10において、登録部15は、所定数のキーフレームについての情報の登録が可能であるものでよい。この場合には、算出部16は、登録部15に登録されている、所定数のキーフレームの各々についての情報を用いて、特徴点の三次元位置の座標を算出する。また、登録部15は、所定数のキーフレームについての情報の登録が既に行われた後に移動量が所定量を超えた場合には、最古に登録されたキーフレームについての情報の登録を削除する。そして、当該所定量を超えた直後に撮影されたキーフレームについての情報を代わりに登録する。
このようにすることで、登録部15での情報の登録を行うために確保しておく必要がある記憶領域の容量を、所定量に制限することができるようになる。
次に図6について説明する。図6は、三次元座標測定装置10の一実施例の詳細機能ブロック図である。
図6において、カメラ21、映像入力部22、及び映像保存部23、並びに時系列映像DB(データベース)31は、図4においては撮影部11が備えている。また、特徴点抽出部24及び特徴点登録部25並びに時系列特徴点DB(データベース)32は、図4においては抽出部12が備えている。更に、時系列照合部26は、図4においては追跡部13が備えている。また、移動量センサ27及び移動量算出部28は、図4においては検出部14が備えている。更に、キーフレーム更新部29及びキーフレームDB(データベース)33は、図4においては登録部15が備えている。そして、三次元位置算出部30は、図4においては算出部16が備えている。
カメラ21は物体の撮影を行って、当該物体が映っている時系列映像(動画像)の映像信号を出力する。なお、本実施例では、カメラ21は、不図示の移動体(例えば自動車)に固定されており、物体は移動しない(位置が変化しない)ものとし、カメラ21は、移動体と共に移動しながら当該物体の撮影を行うものとする。
映像入力部22は、カメラ21から送られてくる映像信号を取得する。ここで、取得した映像信号がアナログ信号ならばデジタル化する。また、取得した映像信号がカラー映像を表している場合には、当該カラー映像をモノクロ濃淡映像に変換して、各データが映像濃淡値を表す二次元のデジタル映像データとして後段に出力する。なお、以下の説明では、このデジタル映像データを時系列映像と表現することとする。
映像保存部23は、映像入力部22から送られてくる時系列映像を、1フレームずつ時系列映像DB31に保存すると共に特徴点抽出部24に出力する。
特徴点抽出部24は、時系列映像の各フレームから特徴点を抽出し、特徴点のフレーム上の位置を表す情報((x、y)の直交二次元座標データ)を特徴点登録部25へ出力する。
特徴点登録部25は、時系列特徴点DB32を参照して、特徴点抽出部24から送られてきた位置情報で表されている特徴点が新規に検出されたものであるか否かの判定を、当該位置情報に基づいて行う。特徴点登録部25は、ここで特徴点が新規であると判定した場合には、当該特徴点の情報を、時系列特徴点DB32に新規に登録する。
時系列照合部26は、時系列映像DB31に保存されている、時系列映像における撮影時刻が現時刻のフレームと1時刻前のフレームとに対して、時系列特徴点DB32に登録されている、当該1時刻前のフレームに含まれる特徴点についての映像照合を行う。なお、この映像照合は、1時刻前のフレームにおける当該特徴点を含む小領域の映像との類似度が、所定の閾値以上の高さであって且つ最高である領域を、当該現時刻のフレームから探索することによって行われる。そして、この探索によって発見された領域を当該現時刻のフレーム上で特定する位置情報を求め、得られた位置情報を、特徴点の追跡結果として、時系列特徴点DB32に登録する。なお、この特徴点の追跡結果である位置情報で特定される位置の近傍に位置する特徴点が、時系列特徴点DB32に既に登録されていた場合には、その既存の特徴点の情報を無効とする。
移動量センサ27は、カメラ21が固定されている移動体の移動量の検出を行う。
移動量算出部28は、移動量センサ27により検出された移動体の移動量より、時系列映像における撮影時刻が1時刻前であるフレームの撮影時刻から現時刻のフレームの撮影時刻までの期間における移動体の回転量と並進量を算出し、その算出結果を出力する。
キーフレーム更新部29は、直近キーフレーム(撮影時刻が現時刻に最も近いキーフレーム)の撮影時刻から現時刻までの期間における移動体の回転量及び並進量を算出する。
なお、この算出には、移動量算出部28による算出結果と、キーフレームDB33に格納されている、直近キーフレームの撮影時刻から1時刻前のフレームの撮影時刻までの移動体の回転量及び並進量とが用いられる。ここで、直近キーフレームの撮影時刻から現時刻までの期間の並進量が所定量を超えていた場合には、時系列特徴点DB32に記録されている撮影時刻が現時刻のフレームについての情報を、新たなキーフレームの情報として、キーフレームDB33に追加する。なお、新たなキーフレームの情報を追加する余裕がキーフレームDB33にない場合には、キーフレーム更新部29は、キーフレームDB33において撮影時刻が最古であるキーフレームについての情報を削除して、新たなキーフレームの情報を追加する。
三次元位置算出部30は、時系列特徴点DB32に登録されている現時刻のフレームに含まれている各特徴点について、キーフレームDB33に情報が格納されているキーフレームの中から、追跡結果を遡ることのできる最古の撮影時刻のキーフレームを特定する。次に、三次元位置算出部30は、その最古の撮影時刻のキーフレームから現時刻のフレームまでを撮影部11が撮影するまでの移動体の回転量と並進量とを算出する。そして、三次元位置算出部30は、その最古の撮影時刻のキーフレームでの特徴点の位置と、現時刻を撮影時刻とするフレームでの特徴点の位置とから、三角測量の原理により、当該特徴点の三次元位置の座標を算出し、算出結果を出力する。
時系列映像DB31は、時系列映像のうちの、現時刻を撮影時刻とするフレーム(現時刻フレーム)と、撮影時刻が現時刻の直前であるフレーム(前時刻フレーム)との映像データを保持しておくための2つの記憶領域を備えている。以下の説明では、この2つの記憶領域(バッファメモリ)をDBP(1)及びDBP(2)とする。この2つのバッファメモリは、処理対象のフレームが1フレーム進む度に循環して使用され、映像保存部23によって現時刻フレームの映像データが2つのバッファメモリに交互に書き込まれる。
時系列特徴点DB32は、時系列映像のうちの現時刻フレームと前時刻フレームとの各々から抽出された特徴点についての情報を保持しておくための、2つの記憶領域を備えている。以下の説明では、この2つの記憶領域(バッファメモリ)をDBF(1)及びDBF(2)とする。この2つのバッファメモリは、処理対象のフレームが1フレーム進む度に循環して使用され、特徴点登録部25によって、現時刻フレームから抽出された特徴点についての情報が2つのバッファメモリに交互に書き込まれる。このDBFの構造について、図7を参照しながら説明する。
DBFは、最大NF個の特徴点の各々についての情報を保持するための配列FTP()を保持する。なお、NFの値は予め定めておく。
配列FTP()は、F_ID、F_USE、F_PX、F_PY、及びF_KCNTの各要素を有している。
F_IDはDBF内での特徴点を識別するための通し番号であり、NF個の配列FPT()に対し、その先頭を「1」番として、昇順に番号が割り付けられるものとする。
F_USEは、この配列の要素のデータが有効なものであるか否かを表すフラグである。このフラグの初期値は「0」とされて、配列の要素のデータは無効であることが表される。
F_PX及びF_PYは、この配列により表されている特徴点についての、時系列映像のフレーム上の位置を表すx座標値及びy座標値である。
F_KCNTは、この配列により表されている特徴点についての追跡結果であって、この配列により表されている特徴点の対応関係を追って遡ることのできるキーフレームの数を表すものであり、初期値は「0」とされる。
キーフレームDB33は、キーフレームについての情報を保持しておくための記憶領域として、バッファメモリDBKを備えている。このDBKの構造について、図8を参照しながら説明する。
バッファメモリDBKは、NK個のキーフレームの各々についての情報を保持するための配列KEYF()を保持する。なお、NKの値は予め定めておく。
配列KEYF()は、K_FPTSET、K_R、及びK_Tの各要素を有している。
K_FPTSETは、このキーフレームから抽出された特徴点についての情報であり、図7に図解したDBFと同一のデータ構造を有しており、最大NF個の特徴点の各々についての情報を保持する。
K_R及びK_Tは、それぞれ、このキーフレームから次のキーフレーム(撮影時刻が時間軸上で次のキーフレーム)をカメラ21が撮影するまでの移動体の回転量及び並進量である。なお、直近キーフレーム(撮影時刻が現時刻に最も近いキーフレーム)に関しては、このK_R及びK_Tは、直近キーフレームから現時刻フレームをカメラ21が撮影するまでの移動体の回転量と並進量とを表すものとしている。
次に三次元座標測定装置10のハードウェア構成について説明する。図9は、三次元座標測定装置10の一実施例のハードウェア構成図である。
図9において、三次元座標測定装置10は、MPU41、ROM42、RAM43、インタフェース装置44、出力装置45を備えている。なお、これらの構成要素は、システムバス46を介して接続されており、MPU41の管理の下で各種のデータを相互に授受することができる。更に、三次元座標測定装置10は、前述したカメラ21及び移動量センサ27を備えており、これらはインタフェース装置44に接続されている。
MPU(Micro Processing Unit)41は、三次元座標測定装置10全体の動作を制御する演算処理装置である。
ROM(Read Only Memory)42は、所定の制御プログラムや各種の定数値が予め記録されている読み出し専用半導体メモリである。MPU41は、この制御プログラムを三次元座標測定装置10の起動時に読み出して実行することにより、この三次元座標測定装置10の各構成要素の動作制御が可能となり、更に、後述する制御処理を行えるようにもなる。
RAM(Random Access Memory)43は、MPU41が各種の制御プログラムを実行する際に、必要に応じて作業用記憶領域として使用する、随時書き込み読み出し可能な半導体メモリである。このRAM43は、図6における時系列映像DB31、時系列特徴点DB32、及びキーフレームDB33として機能する。
インタフェース装置44は、カメラ21及び移動量センサ27との間での各種データの授受の管理を行う。
出力装置45は、MPU41から送付されるデータの出力を行う装置であり、例えば、MPU41から送付される表示データに応じて各種のテキストや画像を表示する液晶ディスプレイ装置である。
上述した構成により、MPU41を、映像入力部22、映像保存部23、特徴点抽出部24、特徴点登録部25、時系列照合部26、移動量センサ27、移動量算出部28、キーフレーム更新部29、及び三次元位置算出部30として機能させることができる。このためには、まず、後述する、三次元座標測定装置10の各機能ブロックにより行われる三次元座標測定処理の処理内容をMPU41に行わせるための制御プログラムを作成する。作成した制御プログラムはROM42に予め格納しておく。そして、MPU41に所定の指示を与えてこの制御プログラムを読み出させて実行させる。こうすることで、MPU41を、上述した各構成要素として機能させることが可能となる。
なお、図9に破線を用いて図解されているように、三次元座標測定装置10に記録媒体駆動装置47を備えるようにしてもよい。記録媒体駆動装置47は、可搬型記録媒体48に記録されているデータを読み出す装置であり、システムバス46に接続される。例えば、ROM42としてフラッシュメモリを使用すると共に、前述した制御プログラムは可搬型記録媒体48に記録させておくようにし、この制御プログラムを記録媒体駆動装置47で可搬型記録媒体48から読み出してROM42に書き込むようにしてもよい。なお、可搬型記録媒体48としては、CD−ROM(Compact Disc Read Only Memory)やDVD−ROM(Digital Versatile Disc Read Only Memory)、USB(Universal Serial Bus)規格のコネクタを備えたフラッシュメモリなどが利用可能である。
次に、三次元座標測定装置10で行われる三次元座標測定処理について、図10に図解したフローチャートを参照しながら説明する。
図10の処理が開始されると、まず、S101において、INIT_F、P_CUR、P_LAST、及びDBK_Pの各々に初期値を設定する処理が行われる。
INIT_Fは、進行中の処理が、この図10の処理の開始後の最初に行われるものであるか否かを表すフラグである。S101の初期化処理では、このフラグが「0」にセットされて、進行中の処理が、図10の処理の開始後の最初に行われるものであることが表される。
P_CUR及びP_LASTは、時系列映像DB31及び時系列特徴点DB32にそれぞれ2つずつ備えられているバッファメモリに保持されているデータが、現時刻フレームと前時刻フレームとのどちらについてのものかを表すために使用される変数である。S101の初期化処理では、現時刻フレームを表す値「1」がP_CURに設定され、前時刻フレームを表す値「2」がP_LASTに設定される。
DBK_Pは、キーフレームDB33で保持される配列KEYF()を、新たなキーフレームの登録の度に循環して使用するために、直近キーフレームについての情報が保持されている配列KEYF()を特定するための変数である。S101の初期化処理では、この変数DBK_Pに値「1」が設定される。
次に、S102において、映像入力処理を映像入力部22が行う。この処理は、カメラ21から送られてくる、時系列映像における現時刻フレームの映像信号を取得する処理である。ここで、取得した映像信号がアナログ信号ならば、信号をデジタル化して取得する処理が行われる。また、映像信号がカラー映像を表している場合には、当該カラー映像をモノクロ濃淡映像に変換して、映像濃淡値を表す二次元のデジタル映像データとする処理が行われる。
次に、S103において、映像保存処理を映像保存部23が行う。この処理では、S102の処理により取得された現時刻フレームの映像データを、時系列映像DB31におけるバッファメモリDBP(P_CUR)に保存する処理である。
次に、S104において、特徴点抽出処理を特徴点抽出部24が行う。この処理は、S102の処理により取得された現時刻フレームから特徴点を抽出して、抽出された特徴点の現時刻フレーム上の位置を表す二次元座標(x,y)を取得する処理である。なお、映像上の特徴点を抽出する手法としては、コーナーを抽出する手法やエッジを抽出する手法など、様々な手法を採用することができる。本実施例では、広く知られているハリスのコーナー検出(Harris corner detector)を適用して検出されたコーナー点を特徴点として抽出することとする。ここで、抽出されたコーナー点の位置の座標をCNR={(xc1,yc1)、(xc2,yc2)、…、(xcNC,ycNC)}とし、NC個の特徴点が抽出されたものとする。
次に、S105において、特徴点登録処理を特徴点登録部25が行う。この処理は、時系列特徴点DB32で保持されている現時刻フレームについての各特徴点を参照し、S104の処理により得られたコーナー点が新規のものか否かを判定し、新規のものであれば、そのコーナー点の座標を時系列特徴点DB32に登録する処理である。この特徴点登録処理の具体的な処理内容については後述する。
次に、S106において、時系列照合処理を時系列照合部26が行う。この処理は、前時刻フレームの特徴点の対応点を現時刻フレームから特定する処理である。この処理では、まず、時系列映像DB31に保持されている現時刻フレームと前時刻フレームとに対して、時系列特徴点DB32に登録されている、前時刻フレームの特徴点についての映像照合を行って、当該特徴点の対応点を当該現時刻フレームから特定する。そして、この対応点の現時刻フレーム上の位置を表している座標情報を、現時刻フレームにおける当該特徴点の追跡結果として、時系列特徴点DB32に登録する。ここで、この追跡結果の座標の近傍である特徴点の情報が、時系列特徴点DB32に既に登録されていた場合には、その既登録の特徴点の情報を無効とする。この時系列照合処理の具体的な処理内容については後述する。
次に、S107において、移動量算出処理を移動量算出部28が行う。この処理は、移動量センサ27によって検出される情報より、カメラ21が前時刻フレームを撮影してから現時刻フレームの撮影までの期間における、カメラ21が固定されている移動体の回転量Rs及び並進量Tsを算出する処理である。
本実施例では、移動量センサ27によって、移動体の回転変化を表している3軸の角速度ベクトルWs(wx,wy,wz)(但し、wx、wy、及びwzの単位はrad/s)と、並進移動量Ts(Tsx,Tsy,Tsz)とが得られるものとする。
ここで、移動体の回転量Rsを角速度ベクトルWsから求めるために、四元数表現を用いて、
q1=(0,0,0,1)
q2=(wx,wy,wz,0)
と表すと、回転変換の四元数表現は、
qq=(1/2)×q1×q2×dt
で表される。なお、ここで、dtは、時系列画像の撮影時間間隔を表しており、例えば一般的なビデオレートでの処理ならば、1/30秒である。
この四元数表現の回転量を行列表現に変換するために、qqの四元数表現を、
qq=(x,y,z,w)
と表すこととすると、Rsは下記の[数1]式のように表現される。
移動量算出部28は、以上のようにして回転量Rs及び並進量Tsを求める。
次に、S108において、キーフレーム更新処理をキーフレーム更新部29が行う。この処理は、時系列映像からキーフレームを特定すると共に、キーフレームDB33を更新して、特定されたキーフレームについての情報を登録する処理である。この処理では、まず、キーフレーム更新部29は、直近キーフレームの撮影時刻から現時刻までの期間における移動体の回転量及び並進量を算出する。ここで、この並進量が所定量を超えていた場合には、時系列特徴点DB32に記録されている、現時刻フレームについての特徴点の情報を、新たなキーフレームの特徴点の情報として、キーフレームDB33に追加する。なお、新たなキーフレームについての情報を追加する余裕がキーフレームDB33にない場合には、キーフレーム更新部29は、キーフレームDB33において撮影時刻が最古であるキーフレームについての情報を削除して、新たなキーフレームの情報を追加する。このキーフレーム更新処理の具体的な処理内容については後述する。
次に、S109では、三次元位置算出処理を三次元位置算出部30が行う。この処理は、特徴点の三次元位置の座標を算出する処理である。この処理では、まず、時系列特徴点DB32に登録されている現時刻フレームに含まれている各特徴点について、追跡結果を遡ることのできる最古の撮影時刻のキーフレームを、キーフレームDB33に情報が格納されている複数のキーフレームから特定する。次に、三次元位置算出部30は、その最古の撮影時刻のキーフレームから現時刻フレームまでを撮影部11が撮影するまでの移動体の回転量と並進量とを算出する。そして、三次元位置算出部30は、その最古の撮影時刻のキーフレームでの特徴点の位置と、現時刻フレームでの特徴点の位置とから、三角測量の原理により、当該特徴点の三次元位置の座標を算出して算出結果を出力する。この三次元位置算出処理の具体的な処理内容についても後述する。
次に、S110では、前述したフラグINIT_Fに「1」をセットして、この処理以降に行う処理は、図10の処理が開始されてから2回目以降であることを表す処理が行われる。
次に、S111では、P_CURとP_LASTとの間で、P_CURのこの処理時点での値と、P_LASTのこの処理時点での値とを交換する処理が行われ、その後はS102に処理が戻り、以上までに説明した処理が繰り返される。
以上までの処理が、三次元座標測定処理である。
なお、この図10の処理では、S104の処理における特徴点の抽出と、S106の処理における特徴点の追跡(映像照合)とを並行して行うようにしてもよい。また、S107の移動量算出処理を、S102からS106までの処理と並行して実行するようにしてもよい。
次に、図10に図解した幾つかの処理の具体的な処理内容と、各処理において使用されている関数についての具体的な処理手順の内容を説明する。
なお、以降で説明する各関数の処理手順において使用されている変数i、j、ii、及びij、は、その関数の処理において局所的に使用される変数であって、大域的に使用されるものではないものとする。
まず、図10の処理におけるS105の処理である、特徴点登録処理の具体的な処理内容について、図11に図解したフローチャートを参照しながら説明する。
図11において、まず、S201では、変数iに初期値「0」を代入する処理を特徴点登録部25が行う。
次に、S202において、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入する処理を特徴点登録部25が行う。
次に、S203において、この処理時点での変数iの値が、図10のS104の処理において特徴点抽出部24により抽出された特徴点(コーナー点)の個数NC以下であるか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、変数iの値がNC以下であると判定したとき(判定結果がYesのとき)にはS204に処理を進める。一方、特徴点登録部25は、変数iの値がNCを超えたと判定したとき(判定結果がNoのとき)には、この特徴点登録処理を終了して図10に処理を戻す。
次に、S204において、特徴点抽出部24により抽出された特徴点(コーナー点)のうちのi番目の位置の座標のうち、x座標(xci)を変数xcに代入し、y座標(yci)を変数ycに代入する処理を特徴点登録部25が行う。
S205からS210にかけての処理は、S204の処理により座標(xc,yc)を取得したコーナー点が新規の特徴点であるか否かを判定する処理である。この判定は、コーナー点の座標(xc,yc)からの距離がccR以内の範囲に、現時刻フレームから既に抽出されていた特徴点が存在するか否かを判定することによって行い、存在しない場合には、当該コーナー点は新規の特徴点であるとの判定が下される。なお、距離ccRの値については予め設定しておく。
まず、S205において、変数jに初期値「0」を代入する処理を特徴点登録部25が行う。
次に、S206において、この処理時点での変数jの値に「1」を加算した結果の値を改めて変数jに代入する処理を特徴点登録部25が行う。
次に、S207において、この処理時点での変数jの値が、時系列特徴点DB32のバッファメモリDBFに情報を保持させることのできる特徴点の個数NF以下であるか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、変数jの値がNF以下であると判定したとき(判定結果がYesのとき)にはS208に処理を進める。一方、特徴点登録部25は、変数jの値がNFを超えたと判定したとき(判定結果がNoのとき)には、上述した新規の特徴点についての判定処理を終了して、S211に処理を進める。
次に、S208では、時系列特徴点DB32のバッファメモリDBF(P_CUR)における配列FTP(j)を参照し、この配列における要素F_USEに「1」がセットされているか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、F_USEに「1」がセットされていると判定したとき(判定結果がYesのとき)には、この配列FTP(j)の要素のデータは有効であると判断し、S209に処理を進める。一方、特徴点登録部25は、ここで、F_USEに「1」がセットされていないと判定したとき(判定結果がNoのとき)には、この配列FTP(j)の要素のデータは無効であると判断してS206に処理を戻し、上述したS206以降の処理を繰り返す。
次に、S209では、以下の処理を特徴点登録部25が行う。
まず、特徴点登録部25は、バッファメモリDBF(P_CUR)における配列FTP(j)を参照し、要素F_PX及びF_PYの値を取得して変数xp及びypにそれぞれ代入する処理を行う。そして、次に、特徴点登録部25は、下記の式の計算を実行してLの値を算出する処理を行う。
L={(xp−xc)2 +(yp−yc)2 1/2
特徴点登録部25は、S209において、以上の処理を行う。
次に、S210では、S209の処理により算出されたLの値が、前述した距離ccR以下であるか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、Lが距離ccR以下であると判定したとき(判定結果がYesのとき)には、直近に実行されたS204の処理により座標値を取得したコーナー点は新規の特徴点ではないと判断してS202に処理を戻して上述した処理を繰り返す。一方、特徴点登録部25は、ここで、Lが距離ccRよりも長いと判定したとき(判定結果がNoのとき)には、S206に処理を戻し、上述したS206以降の処理を繰り返す。
S211の処理は、上述したS205からS210にかけての処理によって、直近に実行されたS204の処理により座標値を取得したコーナー点は新規の特徴点であると判断されたことによって実行される処理である。このS211では、関数SEARCH_SLOT(DBF(P_CUR))の戻り値を取得して変数kに代入する処理を特徴点登録部25が行う。
SEARCH_SLOT関数は、時系列特徴点DB32のバッファメモリDBPが保持している配列FTP()のうちで、空いている(すなわち、要素のデータが無効ある)ものを探し出し、空いている配列FTP()の番号を戻り値として返す関数である。但し、SEARCH_SLOT関数は、空いている配列FTP()がなかった場合には、戻り値として、値「−1」を返すものとする。このSEARCH_SLOT関数の具体的な処理手順については後述する。
次に、S212では、変数kの値(すなわち、関数SEARCH_SLOT(DBF(P_CUR))の戻り値)が正の値であったか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、変数kの値が正の値であったと判定したとき(判定結果がYesのとき)には、バッファメモリDBF(P_CUR)が保持している配列FTP()に空きがあったと判断してS213に処理を進める。一方、ここで、特徴点登録部25は、変数kの値が正の値でなかったと判定したとき(判定結果がNoのとき)には、バッファメモリDBF(P_CUR)が保持している配列FTP()には空きがなかったとの判断を下す。この場合には、特徴点登録部25は、新規の特徴点の登録を断念して、この特徴点登録処理を終了し、図10に処理を戻す。
次に、S213では、バッファメモリDBF(P_CUR)が保持している配列FTP(k)の要素の値を設定する処理を特徴点登録部25が行う。具体的には、F_USEが「1」にセットされると共に、F_PX及びF_PYには、それぞれxc及びycの値が格納され、更に、F_KCNTに初期値「0」が格納される。特徴点登録部25は、このS213の処理の終了後は、S202に処理を戻して上述した処理を繰り返す。
以上までの処理が特徴点登録処理である。
次に、上述した特徴点登録処理におけるS211の処理において用いられているSEARCH_SLOT関数の具体的な処理手順について、図12に図解したフローチャートを参照しながら説明する。
図12において、まず、S221では、変数iに初期値「0」を代入する処理を特徴点登録部25が行う。
次に、S222において、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入する処理を特徴点登録部25が行う。
次に、S223において、この処理時点での変数iの値が、前述した個数NF以下であるか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、変数iの値がNF以下であると判定したとき(判定結果がYesのとき)にはS224に処理を進め、変数iの値がNFを超えたと判定したとき(判定結果がNoのとき)にはS226に処理を進める。
次に、S224では、SEARCH_SLOT関数が呼ばれたときの引数によって特定されるバッファメモリDBPが保持している配列FTP(i)の要素F_USEが「0」にセットされているか否かを判定する処理を特徴点登録部25が行う。特徴点登録部25は、ここで、配列FTP(i)の要素F_USEが「0」にセットされていると判定したとき(判定結果がYesのとき)にはS225に処理を進める。一方、特徴点登録部25は、ここで、配列FTP(i)の要素F_USEが「0」にセットされていないと判定したとき(判定結果がNoのとき)にはS222へ処理を戻して前述した処理を繰り返す。
次に、S225では、SEARCH_SLOT関数の戻り値として、空いている配列FTP()の番号を表している変数iのこの処理時点での値を返す処理を特徴点登録部25が行い、その後はこの図12の処理が終了する。
一方、S226では、SEARCH_SLOT関数の戻り値として、配列FTP()には空きがなかったことを表している値「−1」を返す処理を特徴点登録部25が行い、その後はこの図12の処理が終了する。
SEARCH_SLOT関数は以上のように処理される。
次に、図10の処理におけるS106の処理である、時系列照合処理の具体的な処理内容について、図13A及び図13Bに図解したフローチャートを参照しながら説明する。
まず、図13Aにおいて、S301では、変数iに初期値「0」を代入する処理を時系列照合部26が行う。
次に、S302において、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入する処理を時系列照合部26が行う。
次に、S303において、この処理時点での変数iの値が、前述した個数NF以下であるか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、変数iの値がNF以下であると判定したとき(判定結果がYesのとき)にはS304に処理を進め、変数iの値がNFを超えたと判定したとき(判定結果がNoのとき)にはS310(図13B)に処理を進める。
次に、S304では、時系列特徴点DB32のバッファメモリDBF(P_LAST)における配列FTP(i)を参照し、この配列における要素F_USEに「0」がセットされているか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、F_USEに「0」がセットされていると判定したとき(判定結果がYesのとき)には、この配列FTP(i)の要素のデータは無効であると判断し、S305に処理を進める。一方、時系列照合部26は、ここで、F_USEに「0」がセットされていないと判定したとき(判定結果がNoのとき)には、この配列FTP(i)の要素のデータは有効であると判断してS306に処理を戻し、上述したS306以降の処理を繰り返す。
S305の処理は、バッファメモリDBF(P_CUR)が保持している配列FTP(i)で情報が表されている現時刻フレームの特徴点が、前時刻フレームには含まれておらず、フレーム間での対応関係がなかったと判定された場合に実行される処理である。このS305では、この配列FTP(i)における要素F_USEを「0」にセットする処理を時系列照合部26が行い、その後はS302へ処理を戻して前述した処理を繰り返す。
一方、S306では、以下の処理を時系列照合部26が行う。
まず、時系列照合部26は、バッファメモリDBF(P_LAST)における配列FTP(i)を参照し、要素F_PX及びF_PYの値を取得して変数px1及びpy1にそれぞれ代入する処理を行う。そして、次に、時系列照合部26は、関数MATCH(px1,py1)の戻り値を取得して変数px2、py2、及びRESに代入する処理を行う。
MATCH関数は、座標(px1、py1)を引数とし、前時刻フレームの映像上におけるこの座標(px1、py1)に位置している特徴点についての対応点を現時刻フレームから探し出す関数である。より具体的には、このMATCH関数は、まず、前時刻フレームの映像上の座標(px1、py1)を中心位置とする所定サイズの矩形領域映像を、当該矩形領域映像と同一サイズである現時刻フレームの映像上での部分映像と比較する処理を行う。この比較処理における比較対象の一方である現時刻フレームの映像上の部分映像は、座標(px1、py1)を中心位置とする所定の探索範囲を所定量ずつ移動させながら複数枚取得し、取得された部分映像の全てについて比較処理が行われる。この比較処理では、2つの映像の類似度の高さを表す指標が算出される。ここで、この指標が表している類似度が最高となったときに比較対象としていた部分映像の中心位置の座標(px2、py2)が取得される。MATCH関数は、この最高の類似度が所定の閾値以上の場合には、座標(px2、py2)の値を戻り値として返すと共に、判定結果を表す戻り値RESとして、特徴点の対応点が見つかったことを表す値「1」を返す。また、MATCH関数は、この最高の類似度が所定の閾値未満の場合には、判定結果を表す戻り値RESとして、特徴点の対応点が見つからなかったことを表す値「0」を返す。このMATCH関数の具体的な処理手順については後述する。
時系列照合部26は、S306において、以上の処理を行う。
次に、S307では、S306の処理により得られた関数MATCHの戻り値のうちのRESの値が「1」であったか否かを判定する処理を時系列照合部26が行う。時系列照合部26は、ここで、RESの値が「1」であったと判定したとき(判定結果がYesのとき)にはS308に処理を進め、RESの値が「1」ではなかったと判定したとき(判定結果がNoのとき)にはS309に処理を進める。
次に、S308では、特徴点の対応点が見つかったことにより、バッファメモリDBF(P_CUR)が保持している配列FTP(i)の要素の値を設定する処理を時系列照合部26が行う。具体的には、F_USEが「1」にセットされると共に、F_PX及びF_PYには、それぞれpx2及びpy2の値が格納される。更に、F_KCNTに、バッファメモリDBF(P_LAST)が保持している配列FTP(i)における要素F_CKNTの値が格納される。時系列照合部26は、このS308の処理を終えたときにはS302へ処理を戻して前述した処理を繰り返す。
一方、S309では、特徴点の対応点が見つからなかったことにより、バッファメモリDBF(P_CUR)が保持している配列FTP(i)におけるF_USEを「0」にセットする処理を時系列照合部26が行う。時系列照合部26は、このS309の処理を終えたときにはS302へ処理を戻して前述した処理を繰り返す。
図13Bに処理が進み、S310からS321にかけての処理は、図13Aの処理により見つかった対応点の近傍(距離がccR未満)に他の特徴点が位置していた場合に、時系列特徴点DB32に登録されていた当該他の特徴点の情報を無効とする処理である。
図13Bにおいて、まず、S310では、変数iに初期値「0」を代入する処理を時系列照合部26が行う。
次に、S311において、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入する処理を時系列照合部26が行う。
次に、S312において、この処理時点での変数iの値が、前述した個数NF以下であるか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、変数iの値がNF以下であると判定したとき(判定結果がYesのとき)にはS313に処理を進める。一方、時系列照合部26は、変数iの値がNFを超えたと判定したとき(判定結果がNoのとき)には、この時系列照合処理を終了して図10に処理を戻す。
次に、S313では、時系列特徴点DB32のバッファメモリDBF(P_CUR)における配列FTP(i)を参照し、この配列における要素F_USEに「1」がセットされているか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、F_USEに「1」がセットされていると判定したとき(判定結果がYesのとき)には、この配列FTP(i)の要素のデータは有効であると判断し、S314に処理を進める。一方、時系列照合部26は、ここで、F_USEに「1」がセットされていないと判定したとき(判定結果がNoのとき)には、この配列FTP(i)の要素のデータは無効であると判断してS311に処理を戻し、上述したS311以降の処理を繰り返す。
次に、S314では、バッファメモリDBF(P_CUR)における配列FTP(i)を参照し、要素F_PX及びF_PYの値を取得して変数px1及びpy1にそれぞれ代入する処理を時系列照合部26が行う。
次に、S315において、この処理時点での変数iの値を変数jに代入する処理を時系列照合部26が行う。
次に、S316において、この処理時点での変数jの値に「1」を加算した結果の値を改めて変数jに代入する処理を時系列照合部26が行う。
次に、S317において、この処理時点での変数jの値が、前述した個数NF以下であるか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、変数jの値がNF以下であると判定したとき(判定結果がYesのとき)にはS318に処理を進める。一方、時系列照合部26は、変数jの値がNFを超えたと判定したとき(判定結果がNoのとき)には、S311に処理を戻し、上述したS311以降の処理を繰り返す。
次に、S318では、時系列特徴点DB32のバッファメモリDBF(P_CUR)における配列FTP(j)を参照し、この配列における要素F_USEに「1」がセットされているか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、F_USEに「1」がセットされていると判定したとき(判定結果がYesのとき)には、この配列FTP(j)の要素のデータは有効であると判断し、S319に処理を進める。一方、時系列照合部26は、ここで、F_USEに「1」がセットされていないと判定したとき(判定結果がNoのとき)には、この配列FTP(j)の要素のデータは無効であると判断してS316に処理を戻し、上述したS316以降の処理を繰り返す。
次に、S319では、以下の処理を時系列照合部26が行う。
まず、時系列照合部26は、バッファメモリDBF(P_CUR)における配列FTP(j)を参照し、要素F_PX及びF_PYの値を取得して変数px2及びpy2にそれぞれ代入する処理を行う。そして、次に、時系列照合部26は、下記の式の計算を実行してLの値を算出する処理を行う。
L={(px2−px1)2 +(py2−py1)2 1/2
時系列照合部26は、S319において、以上の処理を行う。
次に、S320では、S320の処理により算出されたLの値が、前述した距離ccRよりも小さいか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、Lが距離ccRよりも小さいと判定したとき(判定結果がYesのとき)には、図13Aの処理により見つかった対応点の近傍(距離がccR以内)に他の特徴点が位置していたと判断してS321に処理を進める。一方、時系列照合部26は、ここで、Lが距離ccR以上であると判定したとき(判定結果がNoのとき)には、S316に処理を戻し、上述したS316以降の処理を繰り返す。
S321では、バッファメモリDBF(P_CUR)が保持している配列FTP(j)における要素F_USEを「0」にセットする処理を時系列照合部26が行い、その後はS316に処理を戻し、上述したS316以降の処理を繰り返す。
以上までの処理が時系列照合処理である。
次に、上述した時系列照合処理におけるS306(図13A)の処理において用いられているMATCH関数の具体的な処理手順について、図14に図解したフローチャートを参照しながら説明する。
図14のフローチャートでは、2つの映像の類似度の高さを表す指標として、広く知られているSAD(Sum of Absolute Difference:差の絶対値和)を用いるが、他の指標を用いてもよい。SADは、2つの映像の類似度が高いほど、その値が小さくなる。
まず、この図14のフローチャートで使用されている定数について説明する。
SRCHx及びSRCHyは、現時刻フレームの映像上における前述した比較対象の部分映像の探索範囲に関する定数である。本実施例では、座標(px1、py1)の位置を中心とし、x方向に(SRCHx×2+1)画素、y方向に(SRCHy×2+1)画素の矩形を、この探索範囲とする。これらの具体的な値は予め定めておくものとし、例えば、SRCHxを20画素とし、SRCHyを5画素とする。
REGx及びREGyは、前時刻フレームの映像上における特徴点を中心とした前述の矩形領域映像のサイズに関する定数である。本実施例では、座標(px1、py1)の位置を中心とし、x方向に(REGx×2+1)画素、y方向に(REGy×2+1)画素の矩形領域の映像を、矩形領域映像とする。これらの具体的な値は予め定めておくものとし、例えば、REGxを5画素とし、REGyを5画素とする。
ThSは、前述した比較処理により求める類似度の最高値との間での大小判定が行われる閾値であり、この値は、例えば15×(REGx×2+1)×(REGy×2+1)などと、予め定めておくものとする。
図14において、S331では、変数Sminに初期値「100000」を代入すると共に、下記の式の計算を行って変数iの値を初期設定する処理を時系列照合部26が行う。
i=py1−SRCHy−1
なお、上記の式におけるpy1は、MATCH関数が呼ばれたときの引数のひとつである。
次に、S332では、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入する処理を時系列照合部26が行う。
次に、S333では、この処理時点での変数iの値が、py1とSRCHyとの和の値以下であるか否かを判定する処理を時系列照合部26が行う。時系列照合部26は、ここで、iがpy1とSRCHyとの和以下であると判定したとき(判定結果がYesのとき)にはS334に処理を進め、iがpy1とSRCHyとの和よりも大きいと判定したとき(判定結果がNoのとき)にはS346に処理を進める。
次に、S334では、下記の式の計算を行って変数jの値を設定する処理を時系列照合部26が行う。
j=px1−SRCHx−1
なお、上記の式におけるpx1は、MATCH関数が呼ばれたときの引数のひとつである。
次に、S335では、この処理時点での変数jの値に「1」を加算した結果の値を改めて変数jに代入する処理を時系列照合部26が行う。
次に、S336では、この処理時点での変数jの値が、px1とSRCHxとの和の値以下であるか否かを判定する処理を時系列照合部26が行う。時系列照合部26は、ここで、jがpx1とSRCHxとの和以下であると判定したとき(判定結果がYesのとき)にはS337に処理を進める。一方、時系列照合部26は、ここで、jがpx1とSRCHxとの和よりも大きいと判定したとき(判定結果がNoのとき)には、S332へと処理を戻して前述した処理を繰り返す。
次に、S337では、下記の式の計算を行って変数iiの値を設定すると共に、変数Sの値に「0」を代入する処理を時系列照合部26が行う。
ii=−REGy−1
次に、S338では、この処理時点での変数iiの値に「1」を加算した結果の値を改めて変数iiに代入する処理を時系列照合部26が行う。
次に、S339では、この処理時点での変数iiの値が、定数REGy以下であるか否かを判定する処理を時系列照合部26が行う。時系列照合部26は、ここで、iiがREGy以下であると判定したとき(判定結果がYesのとき)にはS340に処理を進め、iiがREGyよりも大きいと判定したとき(判定結果がNoのとき)にはS344に処理を進める。
次に、S340では、下記の式の計算を行って変数jjの値を設定する処理を時系列照合部26が行う。
jj=−REGx−1
次に、S341では、この処理時点での変数jjの値に「1」を加算した結果の値を改めて変数jjに代入する処理を時系列照合部26が行う。
次に、S342では、この処理時点での変数jjの値が、定数REGx以下であるか否かを判定する処理を時系列照合部26が行う。時系列照合部26は、ここで、jjがREGx以下であると判定したとき(判定結果がYesのとき)にはS343に処理を進める。一方、時系列照合部26は、ここで、jjがREGxよりも大きいと判定したとき(判定結果がNoのとき)にはS338へ処理を戻して前述した処理を繰り返す。
次に、S343では、以下の処理を時系列照合部26が行う。
まず、時系列照合部26は、前時刻フレームの映像データDBP(P_LAST)における座標(px+jj,py+ii)の位置の画素値を取得して変数v1に代入する。
次に、時系列照合部26は、現時刻フレームの映像データDBP(P_CUR)における座標(j+jj,i+ii)の位置の画素値を取得して変数v2に代入する。
その後、時系列照合部26は、この変数v1と変数v2との値の差の絶対値を算出し、この算出結果と、この処理時点での変数Sの値とを加算した結果の値を改めて変数Sに代入する。
時系列照合部26は、S343において以上の処理を行い、その後はS341へ処理を戻して前述した処理を繰り返す。この処理の繰り返しにより、前時刻フレームの映像上における座標(px1、py1)を中心位置とする矩形領域映像と、現時刻フレームの映像上における座標(j、i)を中心位置とする矩形領域映像とのSADの値が、変数Sの値として得られる。
次に、S344では、この処理時点での変数Sの値が、この処理時点での変数Sminの値よりも小さいか否かを判定する処理を時系列照合部26が行う。時系列照合部26は、ここで、SがSminよりも小さいと判定したとき(判定結果がYesのとき)にはS345に処理を進める。一方、時系列照合部26は、ここで、SがSmin以上であると判定したとき(判定結果がNoのとき)にはS335へ処理を戻して前述した処理を繰り返す。
次に、S345では、変数Smin、変数imin、及び変数jminに、この処理時点での変数Sの値、変数iの値、及び変数jの値を、それぞれ代入する処理を時系列照合部26が行い、その後はS335へ処理を戻して前述した処理を繰り返す。この処理の繰り返しにより、SADの値が最小となる(すなわち、類似度が最大である)矩形領域映像の現時刻フレーム上の位置を表す座標(imin、jmin)が得られる。
次に、S346では、この処理時点での変数Sminの値が、前述した定数閾値ThS以下であるか否かを判定する処理を時系列照合部26が行う。時系列照合部26は、ここで、SminがThS以下であると判定したとき(判定結果がYesのとき)には、類似度が最大である矩形領域映像の当該類似度が所定の閾値以上の高さであると判断して、S347に処理を進める。一方、時系列照合部26は、ここで、SminがThSよりも大きいと判定したとき(判定結果がNoのとき)には、類似度が最大である矩形領域映像の当該類似度が所定の閾値未満の高さであると判断して、S348に処理を進める。
次に、S347では、変数px2及び変数py2に、この処理時点での変数jmin及び変数iminの値を、それぞれ代入すると共に、変数RESに値「1」を代入する処理を時系列照合部26が行い、その後はS349に処理を進める。
次に、S348では、変数RESに値「0」を代入する処理を時系列照合部26が行う。
次に、S349では、MATCH関数の戻り値として、この処理時点での変数px2、py2、及びRESの各値を、MATCH関数の戻り値として返す処理を時系列照合部26が行い、その後はこの図14の処理が終了する。
MATCH関数は以上のように処理される。
次に、図10の処理におけるS108の処理である、キーフレーム更新処理の具体的な処理内容について、図15に図解したフローチャートを参照しながら説明する。
図15において、まず、S401では、図10の処理に関連して説明したフラグINIT_Fに「1」がセットされているか否かを判定する処理をキーフレーム更新部29が行う。キーフレーム更新部29は、ここで、INIT_Fに「1」がセットされていると判定したとき(判定結果がYesのとき)には、実行中のキーフレーム更新処理は図10の処理が開始されてから2回目以降の実行であると判断してS404に処理を進める。一方、キーフレーム更新部29は、ここで、INIT_Fに「1」がセットされてないと判定したとき(判定結果がNoのとき)には、実行中のキーフレーム更新処理は図10の処理の開始後に初めて実行されていると判断してS402に処理を進める。
次に、S402では、関数REGIST_DBK(DBF(P_CUR),DBK_P)を呼び出す処理をキーフレーム更新部29が行う。なお、この処理時点における変数DBK_Pの値は「1」である。
REGIST_DBK関数は、DBF(DBF(P_CUR)及びDBK_Pを引数とする場合に、バッファメモリDBF(P_CUR)で保持されている特徴点についての情報を、バッファメモリDBKの配列KEYF(DBK_P)に登録する関数である。このREGIST_DBK関数の具体的な処理手順については後述する。
次に、S403では、バッファメモリDBKの配列KEYF(DBK_P)における要素K_R及びK_Tに、それぞれ、単位行列I及び値「0」を代入する処理をキーフレーム更新部29が行う。その後はこのキーフレーム更新処理を終了して図10に処理を戻す。
S404からS406にかけての処理は、直近キーフレームの撮影時刻から現時刻までの期間における移動体の回転量Rc及び並進量Tcを算出する処理である。
キーフレームDB33で保持されている直近キーフレームについての情報である配列KEYF(DBK_P)のうちの要素K_R及びK_Tには、当該キーフレームの撮影時刻から、前時刻フレームの撮影時刻までの移動体の移動量が格納されている。また、図10のS107の処理において移動量算出部28により取得された回転量Rs及び並進量Tsは、前時刻フレームの撮影時刻から現時刻フレームの撮影時刻までの移動体の移動量を表している。ここで、直近キーフレームの撮影時の座標系をX1とし、前時刻フレームの撮影時の座標系をX2とし、現時刻フレームの撮影時の座標系をX3とする。このとき、以下の関係が成り立つ。
X2=K_R×X1+K_T
X3=Rs×X2+Ts
よって、
X3=Rs×(K_R×X1+K_T)+Ts
=Rs×K_R×X1+Rs×K_T+Ts
となる。
ここで、
X3=Rc×X1+Tc
と置くと、
Rc=Rs×K_R
Tc=Rs×K_T+Ts
が成立する。
S404からS406にかけての処理は、上記の式の計算を行ってRc及びTcの値を得る処理である。
S404では、この処理時点におけるバッファメモリDBKの配列KEYF(DBK_P)における要素K_R及びK_Tの値を、回転量変数Ru及び並進量変数Tuに代入する処理をキーフレーム更新部29が行う。
次に、S405では、下記の2つの式の計算を行ってRc及びTcを算出する処理をキーフレーム更新部29が行う。
Rc=Rs×Ru
Tc=Rs×Tu+Ts
次に、S406では、バッファメモリDBKの配列KEYF(DBK_P)における要素K_R及びK_Tに、それぞれRc及びTcの値を代入して更新する処理をキーフレーム更新部29が行う。
次に、S407では、S405の処理により算出された移動体の並進量Tcが、予め定めておいた並進量閾値ThTc以上となったか否かを判定する処理をキーフレーム更新部29が行う。キーフレーム更新部29は、ここで、TcがThTc以上となったと判定したとき(判定結果がYesのとき)にはS408に処理を進める。一方、キーフレーム更新部29は、ここで、Tcが依然としてThTc未満であると判定したとき(判定結果がNoのとき)には、このキーフレーム更新処理を終了して図10に処理を戻す。
S408では、関数REGIST_DBK(DBF(P_CUR),DBK_P+1)を呼び出す処理をキーフレーム更新部29が行う。この処理により、現時刻フレームがキーフレームとして新規に登録される。REGIST_DBK関数の具体的な処理手順については後述する。
次に、S409では、この処理時点での変数DBK_Pの値に「1」を加算した結果の値を改めて変数DBK_Pに代入する処理をキーフレーム更新部29が行う。
次に、S410では、この処理時点での変数DBK_Pの値が、前述した個数NKよりも大きくなったか否かを判定する処理をキーフレーム更新部29が行う。キーフレーム更新部29は、ここで、DBK_PがNKよりも大きくなったと判定したとき(判定結果がYesのとき)にはS411に処理を進める。一方、キーフレーム更新部29は、ここで、DBK_PがNK以下であると判定したとき(判定結果がNoのとき)には、このキーフレーム更新処理を終了して図10に処理を戻す。
次に、S411では、変数DBK_Pに改めて「1」を代入する処理をキーフレーム更新部29が行い、その後はこのキーフレーム更新処理を終了して図10に処理を戻す。
以上までの処理がキーフレーム更新処理である。
次に、上述したキーフレーム更新処理におけるS402及びS408の処理において用いられているREGIST_DBK関数の具体的な処理手順について、図16に図解したフローチャートを参照しながら説明する。
なお、以下の説明では、REGIST_DBK関数の引数を(F,P)とする。ここで、引数Fは、時系列特徴点DB32が備えている2つのバッファメモリのうちの一方を特定するものである。また、引数Pは、キーフレームDB33が備えているバッファメモリDBKにおける配列KEYF()のうちの1つを特定するものである。
図16において、まず、S421では、引数Pが前述した個数NKよりも大きいか否かを判定する処理をキーフレーム更新部29が行う。キーフレーム更新部29は、ここで、PがNKよりも大きいと判定したとき(判定結果がYesのとき)にはS422に処理を進め、PがNK以下であると判定したとき(判定結果がNoのとき)にはS423に処理を進める。
次に、S422では、引数Pの値を「1」とする処理をキーフレーム更新部29が行う。
上述したS421及びS422の処理によって、新たなキーフレームの情報を追加する余裕がキーフレームDB33にない場合に、キーフレームDB33において撮影時刻が最古であるキーフレームの情報に、新たなキーフレームの情報が上書きされるようになる。従って、当該撮影時刻が最古であるキーフレームについての情報がキーフレームDB33から削除されて、新たなキーフレームの情報が追加される。
次に、S423では、変数iに初期値「0」を代入する処理をキーフレーム更新部29が行う。
次に、S424では、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入する処理をキーフレーム更新部29が行う。
次に、S425では、この処理時点での変数iの値が、前述した個数NF以下であるか否かを判定する処理をキーフレーム更新部29が行う。ここで、キーフレーム更新部29は、変数iの値がNF以下であると判定したとき(判定結果がYesのとき)にはS426に処理を進める。一方、キーフレーム更新部29は、変数iの値がNFを超えたと判定したとき(判定結果がNoのとき)には、この図16の処理を終了させる。
次にS426では、キーフレームDB33のバッファメモリDBKにおける配列KEYF(P)の要素K_FPTSETに、時系列特徴点DB32のバッファメモリFで保持されている配列FTP(i)の要素の値を格納する処理をキーフレーム更新部29が行う。より具体的には、バッファメモリFの配列FTP(i)のF_ID、F_USE、F_PX、F_PY、及びF_KCNTの各要素の値を、配列KEYF(P)の要素K_FPTSETに代入する処理をキーフレーム更新部29が行う。
次に、S427では、バッファメモリFの配列FTP(i)における要素F_KCNTのこの処理時点での値に「1」を加算した結果の値を、改めてこの要素F_KCNTに代入する処理をキーフレーム更新部29が行う。その後、キーフレーム更新部29は、S424へ処理を戻して前述した処理を繰り返す。
REGIST_DBK関数は以上のように処理される。
次に、図10の処理におけるS109の処理である、三次元位置算出処理の具体的な処理内容について、図17に図解したフローチャートを参照しながら説明する。
まず、S501では、変数iに初期値「0」を代入する処理を三次元位置算出部30が行う。
次に、S502では、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入する処理を三次元位置算出部30が行う。
次に、S503において、この処理時点での変数iの値が、前述した個数NF以下であるか否かを判定する処理を三次元位置算出部30が行う。ここで、三次元位置算出部30は、変数iの値がNF以下であると判定したとき(判定結果がYesのとき)にはS504に処理を進める。一方、三次元位置算出部30は、ここで、変数iの値がNFを超えたと判定したとき(判定結果がNoのとき)には、この三次元位置算出処理を終了して図10に処理を戻す。
次に、S504において、時系列特徴点DB32のバッファメモリDBF(P_CUR)における配列FTP(i)の各要素(F_ID、F_USE、F_PX、F_PY、及びF_KCNT)の値を配列変数F1に代入する処理を三次元位置算出部30が行う。
次に、S505では、配列変数F1における要素F_USEに「1」がセットされており、且つ、配列変数F1における要素F_KCNTの値が「0」以外の値であるか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、要素F_USEに「1」がセットされており、且つ、要素F_KCNTが「0」以外の値であると判定したとき(判定結果がYesのとき)にはS506に処理を進める。一方、三次元位置算出部30は、ここで、要素F_USEに「1」がセットされていないと判定したとき、若しくは、要素F_KCNTの値が「0」であると判定したとき(判定結果がNoのとき)には、S502に処理を戻して前述した処理を繰り返す。
このS505の判定処理の結果がYesとなる場合は、バッファメモリDBF(P_CUR)における配列FTP(i)で情報が保持されている、現時刻フレームに含まれている特徴点が、キーフレームにも含まれている場合である。
次に、S506では、以下の処理を三次元位置算出部30が行う。
まず、三次元位置算出部30は、配列変数F1における要素F_PX及びF_PYの値を取得して変数px1及びpy1にそれぞれ代入する処理を行う。そして、次に、三次元位置算出部30は、関数SEARCH_KEYF(F1)の戻り値を取得して変数Kに代入する処理を行う。
SEARCH_KEYF関数は配列FTP()を引数とする関数である。この関数は、配列FTP()に情報が格納されている特徴点についての情報(配列KEYF())を、バッファメモリDBK上で、新規に登録されたものから逆順に遡って追いかけ、遡ることのできた最古の配列KEYF()を特定する番号を戻り値とする関数である。このSEARCH_KEYF関数の具体的な処理手順については後述する。
次に、S507では、この処理時点での変数Kの値が「1」以上であるか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、Kの値が「1」以上であると判定したとき(判定結果がYesのとき)にはS508に処理を進める。一方、三次元位置算出部30は、ここで、Kの値が「1」未満であると判定したとき(判定結果がNoのとき)には、S502に処理を戻して前述した処理を繰り返す。
S508では、以下の処理を三次元位置算出部30が行う。
まず、三次元位置算出部30は、関数CALC_RT(K,DBK_P)の戻り値を取得して変数Rm及びTmに代入する処理を行う。
次に、三次元位置算出部30は、キーフレームDB33のバッファメモリDBKにおける配列KEYF(K)の要素F_FPTSETにおける配列FTP(i)の各要素の値を配列変数F2に代入する処理を行う。
次に、三次元位置算出部30は、配列変数F2におけるにおける要素F_PX及びF_PYの値を取得して変数px2及びpy2にそれぞれ代入する処理を行う。
そして、次に、三次元位置算出部30は、関数CALC_3D(px1,py1,px2,py2,Rm,Tm)の戻り値を取得して変数X、Y、及びZに代入する処理を行う。
三次元位置算出部30は、S508において、以上の処理を行う。
CALC_RT関数は、キーフレームについての情報が保持されている配列KEYF()を特定する2つの番号を引数とする。この関数は、引数で特定される2つのキーフレームのうちの撮影時刻の前のものを撮影してから、当該2つのキーフレームのうちの撮影時刻の後のものを撮影するまでの移動体の移動量を算出して、その移動量(回転量及び並進量)を戻り値として返す関数である。従って、S508の処理では、変数Kで特定されるキーフレームを撮影してから直近キーフレームを撮影するまでの移動体の回転量及び並進量が、それぞれ変数Rm及びTmに代入される。このCALC_RT関数の具体的な処理手順については後述する。
また、CALC_3D関数は、特徴点についての、第一の撮影時刻での映像上における位置座標(px1,py1)と、第二の撮影時刻での映像上における位置座標(px2,py2)と、この2つの時刻の間の移動体の移動量(Rm,Tm)とを引数とする。この関数は、このときの特徴点の三次元位置座標を算出して戻り値として返す関数である。そのCALC_3D関数による特徴点の三次元位置座標の算出の詳細については後述する。
次に、S509では、この処理時点での変数iの値と、直近に実行されたS508の処理で得られた特徴点の三次元位置座標(X、Y、Z)とを、変数iで特定される特徴点についての、三次元位置座標の測定結果として出力する処理を三次元位置算出部30が行う。その後、三次元位置算出部30は、S502に処理を戻して前述した処理を繰り返す。
以上までの処理が三次元位置算出処理である。
次に、上述した三次元位置算出処理におけるS506の処理において用いられているSEARCH_KEYF関数の具体的な処理手順について、図18に図解したフローチャートを参照しながら説明する。
なお、以下の説明では、SEARCH_KEYF関数の引数を、配列F(バッファメモリDBFが保持している配列FTP())とする。
まず、S511において、変数iに初期値「0」を代入すると共に、この処理時点での変数DBK_Pの値に「1」を加算した結果の値を変数Pに代入する処理を三次元位置算出部30が行う。
次に、S512では、この処理時点での変数iの値に「1」を加算した結果の値を改めて変数iに代入すると共に、この処理時点での変数Pの値から「1」を減算した結果の値を改めて変数Pに代入する処理を三次元位置算出部30が行う。
次に、S513では、この処理時点での変数Pの値が「1」よりも小さいか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、Pの値が「1」よりも小さくなったと判定したとき(判定結果がYesのとき)にはS514に処理を進め、Pの値が「1」以上の値であると判定したとき(判定結果がNoのとき)にはS515に処理を進める。
次に、S514では、変数Pに前述した個数NKの値を代入する処理を三次元位置算出部30が行う。
次に、S515では、この処理時点での変数iの値が個数NK以下であるか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、iの値がNK以下であると判定したとき(判定結果がYesのとき)にはS516に処理を進め、iの値がNKよりも大きくなったと判定したとき(判定結果がNoのとき)にはS517に処理を進める。
次に、S516では、配列Fにおける要素F_KCNTの値が、この処理時点での変数iの値以上であるか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、F_KCNTの値が変数iの値以上であると判定したとき(判定結果がYesのとき)には、S512へ処理を戻して前述したS512以降の処理を繰り返す。一方、三次元位置算出部30は、ここで、F_KCNTの値よりも変数iの値が大きくなったと判定したとき(判定結果がNoのとき)には、S517に処理を進める。
次に、S517では、この処理時点での変数Pの値に「1」を加算した結果の値を変数Kに代入する処理を三次元位置算出部30が行う。
次に、S518では、この処理時点での変数Kの値が、個数NKの値よりも大きくなったか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、Kの値がNKの値よりも大きくなったと判定したとき(判定結果がYesのとき)にはS519に処理を進め、Kの値がNKの値以下であると判定したとき(判定結果がNoのとき)にはS520に処理を進める。
次に、S519では、変数Kに「1」を代入する処理を三次元位置算出部30が行う。
次に、S520では、SEARCH_KEYF関数の戻り値として、この処理時点での変数Kの値を返す処理を三次元位置算出部30が行い、その後はこの図18の処理が終了する。
SEARCH_KEYF関数は以上のように処理される。
次に、上述した三次元位置算出処理におけるS508の処理において用いられているCALC_RT関数の具体的な処理手順について、図19に図解したフローチャートを参照しながら説明する。
なお、以下の説明では、CALC_RT関数の2つの引数(キーフレームの情報が保持されている配列KEYF()を特定する番号)のうち、撮影時刻が前であるキーフレームについての引数をK1とし、後であるキーフレームについての引数をK2とする。
まず、S531において、変数Rmに単位行例Iを初期値として代入すると共に、変数Tmに値「0」を初期値として代入し、更に、引数K1から値「1」を減算した結果の値を変数Kに代入する処理を三次元位置算出部30が行う。
次に、S532では、この処理時点での変数Kの値に「1」を加算した結果の値を改めて変数Kに代入する処理を三次元位置算出部30が行う。
次に、S533では、この処理時点での変数Kの値が前述した個数NKの値よりも大きくなったか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、Kの値がNKの値よりも大きくなったと判定したとき(判定結果がYesのとき)にはS534に処理を進め、Kの値がNKの値以下であると判定したとき(判定結果がNoのとき)にはS535に処理を進める。
次に、S534では、変数Kに値「1」を代入する処理を三次元位置算出部30が行う。
次に、S535では、配列KEYF(K)における要素K_R及びK_Tの値を、変数Ru及びTuにそれぞれ代入する処理を三次元位置算出部30が行う。
次に、S536では、この処理時点での変数Rm、Tm、Ru、及びTuの値を用いて下記の2つの式の右辺の計算をそれぞれ行い、その算出結果の値を、それぞれ、変数Rm及びTmに改めて代入する処理を三次元位置算出部30が行う。
Rm=Ru×Rm
Tm=Ru×Tm+Tu
なお、上記の式は、前述したキーフレーム更新処理におけるS406(図15)と同様の式である。
次に、S537では、この処理時点での変数Kの値が、引数K2の値よりも小さいか否かを判定する処理を三次元位置算出部30が行う。三次元位置算出部30は、ここで、Kの値がK2の値よりも小さいと判定したとき(判定結果がYesのとき)には、S532へ処理を戻して前述したS532以降の処理を繰り返す。一方、三次元位置算出部30は、ここで、Kの値がK2の値以上になった判定したとき(判定結果がNoのとき)には、S538に処理を進める。
次に、S539では、この処理時点での変数Rm及びTmの値を、それぞれ、CALC_RT関数の戻り値である、移動体の回転量及び並進量として返す処理を三次元位置算出部30が行い、その後はこの図19の処理が終了する。
CALC_RT関数は以上のように処理される。
次に、上述した三次元位置算出処理におけるS508の処理において用いられているCALC_3D関数による特徴点の三次元位置座標の算出の手法について、図20及び図21を用いて説明する。
まず、図20に図解するように、三次元空間に、移動体の座標系(移動体座標系)O−XYZと、当該移動体に固定されているカメラ21の座標系(カメラ座標系)o−xyzとを定義する。また、移動体座標系からカメラ座標系への変換を、Rw(回転)及びTw(並進移動)で表すものとする。ここで、移動体の移動量(回転量Rm、並進量Tm)は移動体座標系で記述されるものである。
今、時刻t1での移動体座標系で表記した三次元位置をXw1、時刻t2での移動体座標系で表記した三次元位置をXw2とし、これらの三次元位置の点を、カメラ座標系で表記したものを、それぞれxh1及びxh2とする。また、時刻t1から時刻t2までの移動体の移動量をRm(回転量)及びTm(並進量)とする。
このときに、移動体座標系Xw(X,Y,Z)からカメラ座標系xh(x、y、z)への変換は、Rw及びTwを用いて以下のように表されるものとする。
xh=Rw×(Xw−Tw)
このとき、時刻t1においてのXw1とxh1との関係は、
xh1=Rw×(Xw1−Tw)
と表され、時刻t2においてのXw2とxh2との関係は、
xh2=Rw×(Xw2−Tw)
と表される。
ここで、時刻t1と時刻t2との間でのXw1とXw2の関係が、
Xw2=Rm×Xw1+Tm
と表されるとすると、
Rw.t×xh2+Tw=Rm×(Rw.t×xh1+Tw)+Tm
=Rm×Rw.t×xh1+Rm×Tw+Tm
が成り立つ。なお、Rw.tは、Rwの転置行列を表している。この式を整理すると、
xh2=Rw×Rm×Rw.t×xh1+Rw×(Rm×Tw+Tm−Tw)
=(Rw×Rm×Rw.t)×xh1+Rw×((Rm−I)×Tw+Tm)
となる。ここで、
Rv=Rw×Rm×Rw.t
Tv=Rw×((Rm−I)×Tw+Tm)
と置けば、
xh2=Rv×xh1+Tv
と表される。
これは、カメラ座標系における、移動体が時刻t1から時刻t2まで回転量Rm且つ並進量Tmの移動をする場合の座標間の関係を表している。
次に、図21に図解するように、特徴点Pが、移動体座標系における三次元位置(X,Y,Z)に位置しているものとする。また、このときに、時刻t1でカメラ座標系の原点から見た特徴点Pの撮像面上の投影位置n1を(px1、py1)とし、時刻t2でカメラ座標系の原点から見た特徴点P撮像面上の投影位置n2を(px2、py2)とする。
ここで、カメラ21の焦点距離をfとすれば、n1及びn2のカメラ座標系の座標位置は、それぞれ、
n1=(px1、py1、f)
n2=(px2、py2、f)
となる。
このとき、図21に図解するように、特徴点Pは、時刻t1におけるカメラ座標系の原点と投影位置n1とを結ぶ直線の延長線と、時刻t2におけるカメラ座標系の原点と投影位置n2とを結ぶ直線の延長線との交点に位置している。ここで、特徴点Pの時刻t1でのカメラ座標系での三次元位置をP1とし、このときのカメラ座標系の原点からP1までの距離をl1とする。また、特徴点Pの時刻t2でのカメラ座標系での三次元位置をP2とし、このときのカメラ座標系の原点からP2までの距離をl2とする。この場合、
P1=l1×n1
P2=l2×n2
と表される。
ところで、P1とP2との間には、前述したように、
P2=Rv×P1+Tv
の関係がある。従って、
l2×n2=Rv×l1×n1+Tv
が成立する。ここで、N1=Rv×n1と置くと、
l2×n2=l1×N1+Tv
となる。
ここで、表記を以下のように改める。
N1=(NX1,NY1,NZ1)
n2=(nx2,ny2,nz2)
また、Tvを、成分表示として
Tv=(Tvx,Tvy,Tvz)
と表現する。すると、上記の式は、以下のように成分表示される。
l2×nx2=l1×NX1+Tvx
l2×ny2=l1×NY1+Tvy
l2×nz2=l1×NZ1+Tvz
上記の連立方程式の未知数はl1とl2との2つであり、過拘束の関係にあり、一意に解が求まらないので、最小二乗法を適用して未知数の最適な解を求めるようにする。
上記の連立方程式を、行列を用いて書き直すと、
となる。ここで、
と置くと、
となる。従って、最小二乗法によるLの解は、
で与えられる。
これにより、l1及びl2が求まる。
時刻t2でのカメラ座標系で表した三次元位置P2は、
P2=n2×l2
で与えられる。カメラ座標系xhと移動体座標系Xwとの関係は
xh=Rw×(Xw−Tw)
であるので、
となる。
従って、カメラ座標系での三次元位置P2を移動体座標系で表した特徴点の座標P(X,Y,Z)は、
の計算を行うことで算出することができる。
CALC_3D関数は、前述した座標(px1,py1)及び(px2,py2)と、移動体の移動量(Rm,Tm)とを用いて、上記の式を三次元位置算出部30が計算し、算出される座標P(X,Y,Z)を戻り値として返す関数である。
三次元座標測定装置10は、以上の処理を行うことによって、カメラ21が固定されている移動体が所定量移動する度に登録されるキーフレームでの特徴点についての情報を用いた、当該特徴点の三次元位置の座標の算出を行う。従って、移動体の動き方に違いがあっても、特徴点についての情報が当該座標の算出に使用されるキーフレームの撮影位置間の距離が、常にある程度の長さ以上確保されるので、当該座標の算出の精度が、ある程度以上に維持される。
10 三次元座標測定装置
11 撮影部
12 抽出部
13 追跡部
14 検出部
15 登録部
16 算出部
21 カメラ
22 映像入力部
23 映像保存部
24 特徴点抽出部
25 特徴点登録部
26 時系列照合部
27 移動量センサ
28 移動量算出部
29 キーフレーム更新部
30 三次元位置算出部
31 時系列映像DB
32 時系列特徴点DB
33 キーフレームDB
41 MPU
42 ROM
43 RAM
44 インタフェース装置
45 出力装置
46 システムバス
47 記録媒体駆動装置
48 可搬型記録媒体

Claims (7)

  1. 時系列映像を撮影する撮影部、
    前記時系列映像の各フレームのうちで撮影順の早いものから順に、各フレームに含まれている特徴点を抽出する一方で、同一フレーム内で先に抽出されていた特徴点からの該同一フレーム上での距離が所定距離に満たない点については該抽出の対象から除外する抽出部、
    前記時系列映像のうちの時系列で連続している2フレームにおいての前のフレームから前記抽出部によって前記抽出の対象から除外されずに抽出された特徴点と該2フレームにおいての後のフレームにおける該特徴点についての対応点との対応関係を前記時系列映像の各フレームについて順次求めることによって、該特徴点を前記時系列映像上で追跡する追跡部、
    前記撮影部の移動量を検出する検出部、
    前記移動量が所定量を超える度に、該所定量を超えた直後に撮影された前記時系列映像のフレームであるキーフレームに含まれている特徴点についての該キーフレーム上での位置情報と、該特徴点についての前記追跡部による追跡結果を表している追跡情報との登録を行う登録部、及び
    前記移動量と、前記登録部により登録された、前記特徴点についての複数の前記キーフレームの各々での前記位置情報及び該特徴点についての前記追跡情報とを用いて、該特徴点の三次元位置の座標を算出する算出部、
    を備え
    前記追跡部は、前記前のフレームから前記抽出部によって抽出された特徴点についての前記後のフレームにおける対応点についての、該後のフレームから前記抽出部によって抽出されていた特徴点からのフレーム上での距離が所定距離に満たなかった場合には、該後のフレームから抽出されていた特徴点を前記抽出部による抽出結果から除外し、除外しなかった特徴点について前記追跡を行う、
    ことを特徴とする三次元座標測定装置。
  2. 前記撮影部は移動体に固定されており、
    前記検出部は、前記移動体の回転量と並進量とを検出するセンサからの検出出力を用いて、前記移動量として、前記撮影部の回転量と並進量との検出を行い、
    前記登録部は、前記撮影部の並進量が所定量を超える度に前記キーフレームについての前記登録を行う、
    ことを特徴とする請求項に記載の三次元座標測定装置。
  3. 前記登録部は、所定数のキーフレームについての情報の登録が可能であり、
    前記算出部は、前記登録部に登録されている、前記所定数のキーフレームの各々についての情報を用いて、前記特徴点の三次元位置の座標を算出し、
    前記登録部は、前記所定数のキーフレームについての情報の登録が既に行われた後に前記移動量が所定量を超えた場合には、最古に登録されたキーフレームについての情報の登録を削除して、該所定量を超えた直後に撮影されたキーフレームについての情報を代わりに登録する、
    ことを特徴とする請求項1又は2に記載の三次元座標測定装置。
  4. 撮影部により撮影された時系列映像の各フレームのうちで撮影順の早いものから順に、各フレームに含まれている特徴点を抽出する一方で、同一フレーム内で先に抽出されていた特徴点からの該同一フレーム上での距離が所定距離に満たない点については該抽出の対象から除外し、
    前記時系列映像のうちの時系列で連続している2フレームにおいての前のフレームから前記抽出の対象から除外されずに抽出された特徴点と該2フレームにおいての後のフレームにおける該特徴点についての対応点との対応関係を前記時系列映像の各フレームについて順次求めることによって、該特徴点を前記時系列映像上で追跡し、
    前記撮影部の移動量を検出し、
    前記移動量が所定量を超える度に、該所定量を超えた直後に撮影された前記時系列映像のフレームであるキーフレームに含まれている特徴点についての該キーフレーム上での位置情報と、該特徴点についての前記追跡の結果を表している追跡情報との登録を行い、
    前記移動量と、登録されている、前記特徴点についての複数の前記キーフレームの各々での前記位置情報及び該特徴点についての前記追跡情報とを用いて、該特徴点の三次元位置の座標を算出
    前記特徴点の追跡では、前記前のフレームから前記特徴点の抽出により抽出された特徴点についての前記後のフレームにおける対応点についての、該後のフレームから前記特徴点の抽出により抽出されていた特徴点からのフレーム上での距離が所定距離に満たなかった場合には、該後のフレームから抽出されていた特徴点を前記特徴点の抽出による抽出結果から除外し、除外しなかった特徴点について前記追跡を行う、
    ことを特徴とする三次元座標測定方法。
  5. 前記移動量の検出では、前記撮影部が固定されている移動体の回転量と並進量とを検出するセンサからの検出出力を用いて、前記移動量として、前記撮影部の回転量と並進量との検出を行い、
    前記位置情報と前記追跡情報との登録では、前記撮影部の並進量が所定量を超える度に前記キーフレームについての前記登録を行う、
    ことを特徴とする請求項に記載の三次元座標測定方法。
  6. 前記位置情報と前記追跡情報との登録では、所定数のキーフレームについての情報の登録が可能であり、
    前記三次元位置の座標の算出では、前記位置情報と前記追跡情報との登録によって登録されている、前記所定数のキーフレームの各々についての情報を用いて、前記特徴点の三次元位置の座標を算出し、
    前記位置情報と前記追跡情報との登録において、前記所定数のキーフレームについての情報の登録が既に行われた後に前記移動量が所定量を超えた場合には、最古に登録されたキーフレームについての情報の登録を削除して、該所定量を超えた直後に撮影されたキーフレームについての情報を代わりに登録する、
    ことを特徴とする請求項4又は5に記載の三次元座標測定方法。
  7. 撮影部により撮影された時系列映像の各フレームのうちで撮影順の早いものから順に、各フレームに含まれている特徴点を抽出する一方で、同一フレーム内で先に抽出されていた特徴点からの該同一フレーム上での距離が所定距離に満たない点については該抽出の対象から除外し、
    前記時系列映像のうちの時系列で連続している2フレームにおいての前のフレームから前記抽出の対象から除外されずに抽出された特徴点と該2フレームにおいての後のフレームにおける該特徴点についての対応点との対応関係を前記時系列映像の各フレームについて順次求めることによって、該特徴点を前記時系列映像上で追跡し、
    前記撮影部の移動量を検出し、
    前記移動量が所定量を超える度に、該所定量を超えた直後に撮影された前記時系列映像のフレームであるキーフレームに含まれている特徴点についての該キーフレーム上での位置情報と、該特徴点についての前記追跡の結果を表している追跡情報との登録を行い、
    前記移動量と、登録されている、前記特徴点についての複数の前記キーフレームの各々での前記位置情報及び該特徴点についての前記追跡情報とを用いて、該特徴点の三次元位置の座標を算出する、
    処理を演算処理装置に実行させ
    前記特徴点の追跡では、前記前のフレームから前記特徴点の抽出により抽出された特徴点についての前記後のフレームにおける対応点についての、該後のフレームから前記特徴点の抽出により抽出されていた特徴点からのフレーム上での距離が所定距離に満たなかった場合には、該後のフレームから抽出されていた特徴点を前記特徴点の抽出による抽出結果から除外し、除外しなかった特徴点について前記追跡を行う、
    ことを特徴とするプログラム。
JP2011268434A 2011-12-07 2011-12-07 三次元座標測定装置、三次元座標測定方法、及びプログラム Active JP5915130B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011268434A JP5915130B2 (ja) 2011-12-07 2011-12-07 三次元座標測定装置、三次元座標測定方法、及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011268434A JP5915130B2 (ja) 2011-12-07 2011-12-07 三次元座標測定装置、三次元座標測定方法、及びプログラム

Publications (2)

Publication Number Publication Date
JP2013120133A JP2013120133A (ja) 2013-06-17
JP5915130B2 true JP5915130B2 (ja) 2016-05-11

Family

ID=48772823

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011268434A Active JP5915130B2 (ja) 2011-12-07 2011-12-07 三次元座標測定装置、三次元座標測定方法、及びプログラム

Country Status (1)

Country Link
JP (1) JP5915130B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015025497A1 (ja) * 2013-08-23 2015-02-26 パナソニックIpマネジメント株式会社 測距システム及び信号発生装置
JP6287399B2 (ja) * 2014-03-18 2018-03-07 セイコーエプソン株式会社 頭部装着型表示装置および頭部装着型表示装置の制御方法
US9715113B2 (en) 2014-03-18 2017-07-25 Seiko Epson Corporation Head-mounted display device, control method for head-mounted display device, and computer program
JP6424787B2 (ja) * 2015-09-29 2018-11-21 コニカミノルタ株式会社 移動量検出器、およびそれを備えた画像形成装置
JP6782192B2 (ja) 2017-05-17 2020-11-11 株式会社デンソーアイティーラボラトリ 物体検出装置、物体検出方法、及びプログラム
CN111105467B (zh) * 2019-12-16 2023-08-29 北京超图软件股份有限公司 一种图像标定方法、装置及电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5087264B2 (ja) * 2005-12-08 2012-12-05 株式会社トプコン 画像処理装置及びその方法
JP4800163B2 (ja) * 2006-09-29 2011-10-26 株式会社トプコン 位置測定装置及びその方法
JP4983558B2 (ja) * 2007-11-13 2012-07-25 マツダ株式会社 車両用運転支援装置
JP4985516B2 (ja) * 2008-03-27 2012-07-25 ソニー株式会社 情報処理装置、および情報処理方法、並びにコンピュータ・プログラム

Also Published As

Publication number Publication date
JP2013120133A (ja) 2013-06-17

Similar Documents

Publication Publication Date Title
JP5915130B2 (ja) 三次元座標測定装置、三次元座標測定方法、及びプログラム
US20200096317A1 (en) Three-dimensional measurement apparatus, processing method, and non-transitory computer-readable storage medium
KR101776622B1 (ko) 다이렉트 트래킹을 이용하여 이동 로봇의 위치를 인식하기 위한 장치 및 그 방법
US20200011668A1 (en) Simultaneous location and mapping (slam) using dual event cameras
US10068344B2 (en) Method and system for 3D capture based on structure from motion with simplified pose detection
KR101776620B1 (ko) 검색 기반 상관 매칭을 이용하여 이동 로봇의 위치를 인식하기 위한 장치 및 그 방법
JP4809291B2 (ja) 計測装置及びプログラム
JP2002024807A (ja) 物体運動追跡手法及び記録媒体
WO2011005783A2 (en) Image-based surface tracking
KR20150008056A (ko) 단일-카메라 거리 추정
WO2011115143A1 (en) Geometric feature extracting device, geometric feature extracting method, storage medium, three-dimensional measurement apparatus, and object recognition apparatus
WO2015068470A1 (ja) 3次元形状計測装置、3次元形状計測方法及び3次元形状計測プログラム
JP6411188B2 (ja) ステレオマッチング装置とステレオマッチングプログラムとステレオマッチング方法
CN113768419B (zh) 确定扫地机清扫方向的方法、装置及扫地机
JP2008275366A (ja) ステレオ3次元計測システム
JP2007025863A (ja) 撮影システム、撮影方法及び画像処理プログラム
US11244465B2 (en) Point cloud data processing device
JPH1144533A (ja) 先行車両検出装置
CN104132628A (zh) 用相位计算实现线结构光三维测量的方法
JP3253328B2 (ja) 距離動画像入力処理方法
CN113269857A (zh) 坐标系关系获取方法及装置
JP4449808B2 (ja) 人物検出装置
JP3525712B2 (ja) 三次元画像撮像方法及び三次元画像撮像装置
CN115147475B (zh) 目标位置定位方法、装置、设备及存储介质
JP4674316B2 (ja) 位置検出装置、位置検出方法及び位置検出プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140805

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150409

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150421

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150616

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150804

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151001

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160308

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160321

R150 Certificate of patent or registration of utility model

Ref document number: 5915130

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150