"時系列映像を撮影する撮影部、前記時系列映像の各フレームに含まれている特徴点を抽出する抽出部、前記時系列映像のうちの時系列で連続している2フレームにおいての前のフレームにおける前記特徴点と該2フレームにおいての後のフレームにおける該特徴点についての対応点との対応関係を前記時系列映像の各フレームについて順次求めることによって、該特徴点を前記時系列映像上で追跡する追跡部、前記撮影部の移動量を検出する検出部、前記移動量が所定量を超える度に、該所定量を超えた直後に撮影された前記時系列映像のフレームであるキーフレームに含まれている特徴点についての該キーフレーム上での位置情報と、該特徴点についての前記追跡部による追跡結果を表している追跡情報との登録を行う登録部、及び前記移動量と、前記登録部により登録された、前記特徴点についての複数の前記キーフレームの各々での前記位置情報及び該特徴点についての前記追跡情報とを用いて、該特徴点の三次元位置の座標を算出する算出部、を備えることを特徴とする三次元座標測定装置。前記抽出部は、前記時系列映像の各フレームのうち撮影順の早いものから順に前記特徴点の抽出を行い、先に抽出されていた特徴点からのフレーム上での距離が所定距離に満たない点については、特徴点の抽出の対象から除外することを特徴とする請求項1に記載の三次元座標測定装置。前記追跡部は、前記前のフレームから前記抽出部によって抽出された特徴点についての前記後のフレームにおける対応点についての、該後のフレームから前記抽出部によって抽出されていた特徴点からのフレーム上での距離が所定距離に満たなかった場合には、該後のフレームから抽出されていた特徴点を、前記抽出部による抽出結果から除外することを特徴とする請求項1又は2に記載の三次元座標測定装置。前記撮影部は移動体に固定されており、前記検出部は、前記移動体の回転量と並進量とを検出するセンサからの検出出力を用いて、前記移動量として、前記撮影部の回転量と並進量との検出を行い、前記登録部は、前記撮影部の並進量が所定量を超える度に前記キーフレームについての前記登録を行う、ことを特徴とする請求項1から3のうちのいずれか一項に記載の三次元座標測定装置。前記登録部は、所定数のキーフレームについての情報の登録が可能であり、前記算出部は、前記登録部に登録されている、前記所定数のキーフレームの各々についての情報を用いて、前記特徴点の三次元位置の座標を算出し、前記登録部は、前記所定数のキーフレームについての情報の登録が既に行われた後に前記移動量が所定量を超えた場合には、最古に登録されたキーフレームについての情報の登録を削除して、該所定量を超えた直後に撮影されたキーフレームについての情報を代わりに登録する、ことを特徴とする請求項1から4のうちのいずれか一項に記載の三次元座標測定装置。撮影部により撮影された時系列映像の各フレームに含まれている特徴点を抽出し、前記時系列映像のうちの時系列で連続している2フレームにおいての前のフレームにおける前記特徴点と該2フレームにおいての後のフレームにおける該特徴点についての対応点との対応関係を前記時系列映像の各フレームについて順次求めることによって、該特徴点を前記時系列映像上で追跡し、前記撮影部の移動量を検出し、前記移動量が所定量を超える度に、該所定量を超えた直後に撮影された前記時系列映像のフレームであるキーフレームに含まれている特徴点についての該キーフレーム上での位置情報と、該特徴点についての前記追跡の結果を表している追跡情報との登録を行い、前記移動量と、登録されている、前記特徴点についての複数の前記キーフレームの各々での前記位置情報及び該特徴点についての前記追跡情報とを用いて、該特徴点の三次元位置の座標を算出する、ことを特徴とする三次元座標測定方法。前記特徴点の抽出では、前記時系列映像の各フレームのうち撮影順の早いものから順に前記特徴点の抽出を行い、先に抽出されていた特徴点からのフレーム上での距離が所定距離に満たない点については、特徴点の抽出の対象から除外することを特徴とする請求項6に記載の三次元座標測定方法。前記特徴点の追跡では、前記前のフレームから前記特徴点の抽出により抽出された特徴点についての前記後のフレームにおける対応点についての、該後のフレームから前記特徴点の抽出により抽出されていた特徴点からのフレーム上での距離が所定距離に満たなかった場合には、該後のフレームから抽出されていた特徴点を、前記特徴点の抽出による抽出結果から除外することを特徴とする請求項6又は7に記載の三次元座標測定方法。前記移動量の検出では、前記撮影部が固定されている移動体の回転量と並進量とを検出するセンサからの検出出力を用いて、前記移動量として、前記撮影部の回転量と並進量との検出を行い、前記位置情報と前記追跡情報との登録では、前記撮影部の並進量が所定量を超える度に前記キーフレームについての前記登録を行う、ことを特徴とする請求項6から8のうちのいずれか一項に記載の三次元座標測定方法。前記位置情報と前記追跡情報との登録では、所定数のキーフレームについての情報の登録が可能であり、前記三次元位置の座標の算出では、前記位置情報と前記追跡情報との登録によって登録されている、前記所定数のキーフレームの各々についての情報を用いて、前記特徴点の三次元位置の座標を算出し、前記位置情報と前記追跡情報との登録において、前記所定数のキーフレームについての情報の登録が既に行われた後に前記移動量が所定量を超えた場合には、最古に登録されたキーフレームについての情報の登録を削除して、該所定量を超えた直後に撮影されたキーフレームについての情報を代わりに登録する、ことを特徴とする請求項6から9のうちのいずれか一項に記載の三次元座標測定方法。撮影部により撮影された時系列映像の各フレームに含まれている特徴点を抽出し、前記時系列映像のうちの時系列で連続している2フレームにおいての前のフレームにおける前記特徴点と該2フレームにおいての後のフレームにおける該特徴点についての対応点との対応関係を前記時系列映像の各フレームについて順次求めることによって、該特徴点を前記時系列映像上で追跡し、前記撮影部の移動量を検出し、前記移動量が所定量を超える度に、該所定量を超えた直後に撮影された前記時系列映像のフレームであるキーフレームに含まれている特徴点についての該キーフレーム上での位置情報と、該特徴点についての前記追跡の結果を表している追跡情報との登録を行い、前記移動量と、登録されている、前記特徴点についての複数の前記キーフレームの各々での前記位置情報及び該特徴点についての前記追跡情報とを用いて、該特徴点の三次元位置の座標を算出する、処理を演算処理装置に実行させることを特徴とするプログラム。前述したように、単眼カメラによる三次元位置の算出では、移動体の移動量がある程度大きいことが求められる。従って、移動体の移動量が低下し、例えば時系列画像のMフレーム分以上の撮影時間間隔に亘って移動体が停止していると、この停止区間を含むMフレームの時系列映像群からでは、物体の三次元位置を定めることができない。ここで、例えば、このフレーム数Mの値を、移動体の停止期間よりも長い非常に大きな値とすれば、物体の三次元位置を定めること論理的には可能となる。しかしながら、現実の装置のハードウェアリソースを踏まえると、そのような多大なフレーム数を扱うのは現実的ではない。この点に関し、前述した移動ステレオの第一の方式では、移動体が移動して映像内での特徴点の位置が変化するのを待ってから三次元位置を定めるようにすることで、上述したような、移動体の停止の問題を回避することができる。また、停止していた移動体が一旦動き出してからは、その後に移動体が停止したとしても、最初の特徴点を発見した時点から見れば特徴点の位置に変化があるので、三次元位置を定めることができる。しかしながら、特徴点を発見した映像の撮影時刻と、照合対象の時系列映像との時間差が大きい場合には、移動体の移動に伴い物体とカメラとの位置関係が変化するため物体の見え方が変化して、比較小領域の映像と時系列映像との違いが大きくなる。この違いが大きくなると、特徴点の対応関係を求めることが困難となり、結果として、特徴点の三次元位置を定めることができなくなってしまう。また、前述した移動ステレオの第二の方式では、照合に用いる小領域の映像は時系列的に徐々に変化していくので、移動体の移動に伴い物体の見え方に変化があっても、継続的に特徴点の対応を求めることができる。但し、前述したように、この方式で物体の三次元位置を定めるには、着目した撮影時刻の特徴点の位置と、予め決められた時間間隔に基づき定めた過去の撮影時刻での映像における特徴点の位置とを用いて、特徴点の三次元位置を定めるようにする。ここで、当該着目した撮影時刻から当該過去の撮影時刻までの時間間隔をMフレームとすれば、物体の三次元位置を定めるには、直近Mフレーム内で移動体が移動している必要がある。このため、移動体の移動量が低下してMフレーム以上連続して移動が停止していると、停止している期間では時系列映像が変化しないため、この停止区間を含む時系列映像群では、物体の三次元位置を定めることができない。なお、この問題は、SFM方式による特徴点の三次元位置の測定で説明したことと同様である。上述した問題に鑑み、本明細書で後述する三次元座標測定装置は、特徴点の三次元位置の測定を、撮像装置の動き方の違いに依らず安定して行えるようにする。本明細書で後述する三次元座標測定装置のひとつに、撮影部、抽出部、追跡部、検出部、登録部、及び算出部を備えるというものがある。ここで、撮影部は、時系列映像を撮影する。抽出部は、この時系列映像の各フレームに含まれている特徴点を抽出する。追跡部は、特徴点を時系列映像上で追跡する。この追跡は、時系列映像のうちの時系列で連続している2フレームにおいての前のフレームにおける特徴点と後のフレームにおける当該特徴点についての対応点との対応関係を時系列映像の各フレームについて順次求めることによって行われる。検出部は、撮影部の移動量を検出する。登録部は、この移動量が所定量を超える度に、キーフレームに含まれている特徴点についての当該キーフレーム上での位置情報と、当該特徴点についての追跡部による追跡結果を表している追跡情報との登録を行う。なお、キーフレームとは、この移動量が当該所定量を超えた直後に撮影された時系列映像のフレームである。そして、算出部は、この移動量と、登録部により登録された、特徴点についての複数のキーフレームの各々での位置情報及び当該特徴点についての追跡情報とを用いて、当該特徴点の三次元位置の座標を算出する。また、本明細書で後述する三次元座標測定方法のひとつは、まず、撮影部により撮影された時系列映像の各フレームに含まれている特徴点を抽出する。次に、この特徴点を時系列映像上で追跡する。この追跡は、時系列映像のうちの時系列で連続している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つの記憶領域バッファメモリをDBP1及びDBP2とする。この2つのバッファメモリは、処理対象のフレームが1フレーム進む度に循環して使用され、映像保存部23によって現時刻フレームの映像データが2つのバッファメモリに交互に書き込まれる。時系列特徴点DB32は、時系列映像のうちの現時刻フレームと前時刻フレームとの各々から抽出された特徴点についての情報を保持しておくための、2つの記憶領域を備えている。以下の説明では、この2つの記憶領域バッファメモリをDBF1及びDBF2とする。この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に接続されている。MPUMicroProcessingUnit41は、三次元座標測定装置10全体の動作を制御する演算処理装置である。ROMReadOnlyMemory42は、所定の制御プログラムや各種の定数値が予め記録されている読み出し専用半導体メモリである。MPU41は、この制御プログラムを三次元座標測定装置10の起動時に読み出して実行することにより、この三次元座標測定装置10の各構成要素の動作制御が可能となり、更に、後述する制御処理を行えるようにもなる。RAMRandomAccessMemory43は、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-ROMCompactDiscReadOnlyMemoryやDVD-ROMDigitalVersatileDiscReadOnlyMemory、USBUniversalSerialBus規格のコネクタを備えたフラッシュメモリなどが利用可能である。次に、三次元座標測定装置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におけるバッファメモリDBPP_CURに保存する処理である。次に、S104において、特徴点抽出処理を特徴点抽出部24が行う。この処理は、S102の処理により取得された現時刻フレームから特徴点を抽出して、抽出された特徴点の現時刻フレーム上の位置を表す二次元座標x,yを取得する処理である。なお、映像上の特徴点を抽出する手法としては、コーナーを抽出する手法やエッジを抽出する手法など、様々な手法を採用することができる。本実施例では、広く知られているハリスのコーナー検出Harriscornerdetectorを適用して検出されたコーナー点を特徴点として抽出することとする。ここで、抽出されたコーナー点の位置の座標を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軸の角速度ベクトルWswx,wy,wz但し、wx、wy、及びwzの単位はrad/sと、並進移動量TsTsx,Tsy,Tszとが得られるものとする。ここで、移動体の回転量Rsを角速度ベクトルWsから求めるために、四元数表現を用いて、q1=0,0,0,1q2=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のバッファメモリDBFP_CURにおける配列FTPjを参照し、この配列における要素F_USEに1がセットされているか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、F_USEに1がセットされていると判定したとき判定結果がYesのときには、この配列FTPjの要素のデータは有効であると判断し、S209に処理を進める。一方、特徴点登録部25は、ここで、F_USEに1がセットされていないと判定したとき判定結果がNoのときには、この配列FTPjの要素のデータは無効であると判断してS206に処理を戻し、上述したS206以降の処理を繰り返す。次に、S209では、以下の処理を特徴点登録部25が行う。まず、特徴点登録部25は、バッファメモリDBFP_CURにおける配列FTPjを参照し、要素F_PX及びF_PYの値を取得して変数xp及びypにそれぞれ代入する処理を行う。そして、次に、特徴点登録部25は、下記の式の計算を実行してLの値を算出する処理を行う。L={xp-xc2yp-yc2}12特徴点登録部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_SLOTDBFP_CURの戻り値を取得して変数kに代入する処理を特徴点登録部25が行う。SEARCH_SLOT関数は、時系列特徴点DB32のバッファメモリDBPが保持している配列FTPのうちで、空いているすなわち、要素のデータが無効あるものを探し出し、空いている配列FTPの番号を戻り値として返す関数である。但し、SEARCH_SLOT関数は、空いている配列FTPがなかった場合には、戻り値として、値-1を返すものとする。このSEARCH_SLOT関数の具体的な処理手順については後述する。次に、S212では、変数kの値すなわち、関数SEARCH_SLOTDBFP_CURの戻り値が正の値であったか否かを判定する処理を特徴点登録部25が行う。ここで、特徴点登録部25は、変数kの値が正の値であったと判定したとき判定結果がYesのときには、バッファメモリDBFP_CURが保持している配列FTPに空きがあったと判断してS213に処理を進める。一方、ここで、特徴点登録部25は、変数kの値が正の値でなかったと判定したとき判定結果がNoのときには、バッファメモリDBFP_CURが保持している配列FTPには空きがなかったとの判断を下す。この場合には、特徴点登録部25は、新規の特徴点の登録を断念して、この特徴点登録処理を終了し、図10に処理を戻す。次に、S213では、バッファメモリDBFP_CURが保持している配列FTPkの要素の値を設定する処理を特徴点登録部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が保持している配列FTPiの要素F_USEが0にセットされているか否かを判定する処理を特徴点登録部25が行う。特徴点登録部25は、ここで、配列FTPiの要素F_USEが0にセットされていると判定したとき判定結果がYesのときにはS225に処理を進める。一方、特徴点登録部25は、ここで、配列FTPiの要素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のバッファメモリDBFP_LASTにおける配列FTPiを参照し、この配列における要素F_USEに0がセットされているか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、F_USEに0がセットされていると判定したとき判定結果がYesのときには、この配列FTPiの要素のデータは無効であると判断し、S305に処理を進める。一方、時系列照合部26は、ここで、F_USEに0がセットされていないと判定したとき判定結果がNoのときには、この配列FTPiの要素のデータは有効であると判断してS306に処理を戻し、上述したS306以降の処理を繰り返す。S305の処理は、バッファメモリDBFP_CURが保持している配列FTPiで情報が表されている現時刻フレームの特徴点が、前時刻フレームには含まれておらず、フレーム間での対応関係がなかったと判定された場合に実行される処理である。このS305では、この配列FTPiにおける要素F_USEを0にセットする処理を時系列照合部26が行い、その後はS302へ処理を戻して前述した処理を繰り返す。一方、S306では、以下の処理を時系列照合部26が行う。まず、時系列照合部26は、バッファメモリDBFP_LASTにおける配列FTPiを参照し、要素F_PX及びF_PYの値を取得して変数px1及びpy1にそれぞれ代入する処理を行う。そして、次に、時系列照合部26は、関数MATCHpx1,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では、特徴点の対応点が見つかったことにより、バッファメモリDBFP_CURが保持している配列FTPiの要素の値を設定する処理を時系列照合部26が行う。具体的には、F_USEが1にセットされると共に、F_PX及びF_PYには、それぞれpx2及びpy2の値が格納される。更に、F_KCNTに、バッファメモリDBFP_LASTが保持している配列FTPiにおける要素F_CKNTの値が格納される。時系列照合部26は、このS308の処理を終えたときにはS302へ処理を戻して前述した処理を繰り返す。一方、S309では、特徴点の対応点が見つからなかったことにより、バッファメモリDBFP_CURが保持している配列FTPiにおける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のバッファメモリDBFP_CURにおける配列FTPiを参照し、この配列における要素F_USEに1がセットされているか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、F_USEに1がセットされていると判定したとき判定結果がYesのときには、この配列FTPiの要素のデータは有効であると判断し、S314に処理を進める。一方、時系列照合部26は、ここで、F_USEに1がセットされていないと判定したとき判定結果がNoのときには、この配列FTPiの要素のデータは無効であると判断してS311に処理を戻し、上述したS311以降の処理を繰り返す。次に、S314では、バッファメモリDBFP_CURにおける配列FTPiを参照し、要素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のバッファメモリDBFP_CURにおける配列FTPjを参照し、この配列における要素F_USEに1がセットされているか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、F_USEに1がセットされていると判定したとき判定結果がYesのときには、この配列FTPjの要素のデータは有効であると判断し、S319に処理を進める。一方、時系列照合部26は、ここで、F_USEに1がセットされていないと判定したとき判定結果がNoのときには、この配列FTPjの要素のデータは無効であると判断してS316に処理を戻し、上述したS316以降の処理を繰り返す。次に、S319では、以下の処理を時系列照合部26が行う。まず、時系列照合部26は、バッファメモリDBFP_CURにおける配列FTPjを参照し、要素F_PX及びF_PYの値を取得して変数px2及びpy2にそれぞれ代入する処理を行う。そして、次に、時系列照合部26は、下記の式の計算を実行してLの値を算出する処理を行う。L={px2-px12py2-py12}12時系列照合部26は、S319において、以上の処理を行う。次に、S320では、S320の処理により算出されたLの値が、前述した距離ccRよりも小さいか否かを判定する処理を時系列照合部26が行う。ここで、時系列照合部26は、Lが距離ccRよりも小さいと判定したとき判定結果がYesのときには、図13Aの処理により見つかった対応点の近傍距離がccR以内に他の特徴点が位置していたと判断してS321に処理を進める。一方、時系列照合部26は、ここで、Lが距離ccR以上であると判定したとき判定結果がNoのときには、S316に処理を戻し、上述したS316以降の処理を繰り返す。S321では、バッファメモリDBFP_CURが保持している配列FTPjにおける要素F_USEを0にセットする処理を時系列照合部26が行い、その後はS316に処理を戻し、上述したS316以降の処理を繰り返す。以上までの処理が時系列照合処理である。次に、上述した時系列照合処理におけるS306図13Aの処理において用いられているMATCH関数の具体的な処理手順について、図14に図解したフローチャートを参照しながら説明する。図14のフローチャートでは、2つの映像の類似度の高さを表す指標として、広く知られているSADSumofAbsoluteDifference:差の絶対値和を用いるが、他の指標を用いてもよい。SADは、2つの映像の類似度が高いほど、その値が小さくなる。まず、この図14のフローチャートで使用されている定数について説明する。SRCHx及びSRCHyは、現時刻フレームの映像上における前述した比較対象の部分映像の探索範囲に関する定数である。本実施例では、座標px1、py1の位置を中心とし、x方向にSRCHx×21画素、y方向にSRCHy×21画素の矩形を、この探索範囲とする。これらの具体的な値は予め定めておくものとし、例えば、SRCHxを20画素とし、SRCHyを5画素とする。REGx及びREGyは、前時刻フレームの映像上における特徴点を中心とした前述の矩形領域映像のサイズに関する定数である。本実施例では、座標px1、py1の位置を中心とし、x方向にREGx×21画素、y方向にREGy×21画素の矩形領域の映像を、矩形領域映像とする。これらの具体的な値は予め定めておくものとし、例えば、REGxを5画素とし、REGyを5画素とする。ThSは、前述した比較処理により求める類似度の最高値との間での大小判定が行われる閾値であり、この値は、例えば15×REGx×21×REGy×21などと、予め定めておくものとする。図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は、前時刻フレームの映像データDBPP_LASTにおける座標pxjj,pyiiの位置の画素値を取得して変数v1に代入する。次に、時系列照合部26は、現時刻フレームの映像データDBPP_CURにおける座標jjj,iiiの位置の画素値を取得して変数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_DBKDBFP_CUR,DBK_Pを呼び出す処理をキーフレーム更新部29が行う。なお、この処理時点における変数DBK_Pの値は1である。REGIST_DBK関数は、DBFDBFP_CUR及びDBK_Pを引数とする場合に、バッファメモリDBFP_CURで保持されている特徴点についての情報を、バッファメモリDBKの配列KEYFDBK_Pに登録する関数である。このREGIST_DBK関数の具体的な処理手順については後述する。次に、S403では、バッファメモリDBKの配列KEYFDBK_Pにおける要素K_R及びK_Tに、それぞれ、単位行列I及び値0を代入する処理をキーフレーム更新部29が行う。その後はこのキーフレーム更新処理を終了して図10に処理を戻す。S404からS406にかけての処理は、直近キーフレームの撮影時刻から現時刻までの期間における移動体の回転量Rc及び並進量Tcを算出する処理である。キーフレームDB33で保持されている直近キーフレームについての情報である配列KEYFDBK_Pのうちの要素K_R及びK_Tには、当該キーフレームの撮影時刻から、前時刻フレームの撮影時刻までの移動体の移動量が格納されている。また、図10のS107の処理において移動量算出部28により取得された回転量Rs及び並進量Tsは、前時刻フレームの撮影時刻から現時刻フレームの撮影時刻までの移動体の移動量を表している。ここで、直近キーフレームの撮影時の座標系をX1とし、前時刻フレームの撮影時の座標系をX2とし、現時刻フレームの撮影時の座標系をX3とする。このとき、以下の関係が成り立つ。X2=K_R×X1K_TX3=Rs×X2Tsよって、X3=Rs×K_R×X1K_TTs=Rs×K_R×X1Rs×K_TTsとなる。ここで、X3=Rc×X1Tcと置くと、Rc=Rs×K_RTc=Rs×K_TTsが成立する。S404からS406にかけての処理は、上記の式の計算を行ってRc及びTcの値を得る処理である。S404では、この処理時点におけるバッファメモリDBKの配列KEYFDBK_Pにおける要素K_R及びK_Tの値を、回転量変数Ru及び並進量変数Tuに代入する処理をキーフレーム更新部29が行う。次に、S405では、下記の2つの式の計算を行ってRc及びTcを算出する処理をキーフレーム更新部29が行う。Rc=Rs×RuTc=Rs×TuTs次に、S406では、バッファメモリDBKの配列KEYFDBK_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_DBKDBFP_CUR,DBK_P1を呼び出す処理をキーフレーム更新部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における配列KEYFPの要素K_FPTSETに、時系列特徴点DB32のバッファメモリFで保持されている配列FTPiの要素の値を格納する処理をキーフレーム更新部29が行う。より具体的には、バッファメモリFの配列FTPiのF_ID、F_USE、F_PX、F_PY、及びF_KCNTの各要素の値を、配列KEYFPの要素K_FPTSETに代入する処理をキーフレーム更新部29が行う。次に、S427では、バッファメモリFの配列FTPiにおける要素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のバッファメモリDBFP_CURにおける配列FTPiの各要素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となる場合は、バッファメモリDBFP_CURにおける配列FTPiで情報が保持されている、現時刻フレームに含まれている特徴点が、キーフレームにも含まれている場合である。次に、S506では、以下の処理を三次元位置算出部30が行う。まず、三次元位置算出部30は、配列変数F1における要素F_PX及びF_PYの値を取得して変数px1及びpy1にそれぞれ代入する処理を行う。そして、次に、三次元位置算出部30は、関数SEARCH_KEYFF1の戻り値を取得して変数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_RTK,DBK_Pの戻り値を取得して変数Rm及びTmに代入する処理を行う。次に、三次元位置算出部30は、キーフレームDB33のバッファメモリDBKにおける配列KEYFKの要素F_FPTSETにおける配列FTPiの各要素の値を配列変数F2に代入する処理を行う。次に、三次元位置算出部30は、配列変数F2におけるにおける要素F_PX及びF_PYの値を取得して変数px2及びpy2にそれぞれ代入する処理を行う。そして、次に、三次元位置算出部30は、関数CALC_3Dpx1,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では、配列KEYFKにおける要素K_R及びK_Tの値を、変数Ru及びTuにそれぞれ代入する処理を三次元位置算出部30が行う。次に、S536では、この処理時点での変数Rm、Tm、Ru、及びTuの値を用いて下記の2つの式の右辺の計算をそれぞれ行い、その算出結果の値を、それぞれ、変数Rm及びTmに改めて代入する処理を三次元位置算出部30が行う。Rm=Ru×RmTm=Ru×TmTuなお、上記の式は、前述したキーフレーム更新処理における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並進量とする。このときに、移動体座標系XwX,Y,Zからカメラ座標系xhx、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×Xw1Tmと表されるとすると、Rw.t×xh2Tw=Rm×Rw.t×xh1TwTm=Rm×Rw.t×xh1Rm×TwTmが成り立つ。なお、Rw.tは、Rwの転置行列を表している。この式を整理すると、xh2=Rw×Rm×Rw.t×xh1Rw×Rm×TwTm-Tw=Rw×Rm×Rw.t×xh1Rw×Rm-I×TwTmとなる。ここで、Rv=Rw×Rm×Rw.tTv=Rw×Rm-I×TwTmと置けば、xh2=Rv×xh1Tvと表される。これは、カメラ座標系における、移動体が時刻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、fn2=px2、py2、fとなる。このとき、図21に図解するように、特徴点Pは、時刻t1におけるカメラ座標系の原点と投影位置n1とを結ぶ直線の延長線と、時刻t2におけるカメラ座標系の原点と投影位置n2とを結ぶ直線の延長線との交点に位置している。ここで、特徴点Pの時刻t1でのカメラ座標系での三次元位置をP1とし、このときのカメラ座標系の原点からP1までの距離をl1とする。また、特徴点Pの時刻t2でのカメラ座標系での三次元位置をP2とし、このときのカメラ座標系の原点からP2までの距離をl2とする。この場合、P1=l1×n1P2=l2×n2と表される。ところで、P1とP2との間には、前述したように、P2=Rv×P1Tvの関係がある。従って、l2×n2=Rv×l1×n1Tvが成立する。ここで、N1=Rv×n1と置くと、l2×n2=l1×N1Tvとなる。ここで、表記を以下のように改める。N1=NX1,NY1,NZ1n2=nx2,ny2,nz2また、Tvを、成分表示としてTv=Tvx,Tvy,Tvzと表現する。すると、上記の式は、以下のように成分表示される。l2×nx2=l1×NX1Tvxl2×ny2=l1×NY1Tvyl2×nz2=l1×NZ1Tvz上記の連立方程式の未知数はl1とl2との2つであり、過拘束の関係にあり、一意に解が求まらないので、最小二乗法を適用して未知数の最適な解を求めるようにする。上記の連立方程式を、行列を用いて書き直すと、となる。ここで、と置くと、となる。従って、最小二乗法によるLの解は、で与えられる。これにより、l1及びl2が求まる。時刻t2でのカメラ座標系で表した三次元位置P2は、P2=n2×l2で与えられる。カメラ座標系xhと移動体座標系Xwとの関係はxh=Rw×Xw-Twであるので、となる。従って、カメラ座標系での三次元位置P2を移動体座標系で表した特徴点の座標PX,Y,Zは、の計算を行うことで算出することができる。CALC_3D関数は、前述した座標px1,py1及びpx2,py2と、移動体の移動量Rm,Tmとを用いて、上記の式を三次元位置算出部30が計算し、算出される座標PX,Y,Zを戻り値として返す関数である。三次元座標測定装置10は、以上の処理を行うことによって、カメラ21が固定されている移動体が所定量移動する度に登録されるキーフレームでの特徴点についての情報を用いた、当該特徴点の三次元位置の座標の算出を行う。従って、移動体の動き方に違いがあっても、特徴点についての情報が当該座標の算出に使用されるキーフレームの撮影位置間の距離が、常にある程度の長さ以上確保されるので、当該座標の算出の精度が、ある程度以上に維持される。"