説明

画像処理装置、画像処理方法、およびプログラム

【課題】計測精度を向上させることができる画像処理装置、画像処理方法、およびプログラムを提供する。
【解決手段】モニタ22は、計測対象物の画像と、計測対象物に対応する物体であって予め算出された3次元形状を有する物体の画像とを表示する。CPU34cは、計測対象物を撮像したカメラの姿勢と、物体を撮像した仮想的なカメラの姿勢とが近づくように、計測対象物の画像と物体の画像との少なくとも一方の姿勢を調整する。また、CPU34cは、これら2種類のカメラの光学系または撮像素子の特性が互いに近づくように、計測対象物の画像と物体の画像との少なくとも一方の姿勢を調整する。CPU34cは、これらの調整を行った後、リモコン23を介して入力される指示に基づいて指定された計測位置に対応する物体上の空間座標を算出し、算出した空間座標に基づいて、物体のサイズを算出する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、計測対象物の画像を処理して計測対象物のサイズを計測する画像処理装置、画像処理方法、およびプログラムに関する。
【背景技術】
【0002】
従来、内視鏡等の観察用治具を使用して、ジェットエンジン内のブレード等の計測が行われている。特許文献1には、ブレード等の計測に適した技術が記載されている。この特許文献1に記載された技術では、被写体を撮像した被写体画像と、コンピュータグラフィックス(CG)により生成したCG画像とをモニタに表示し、CG画像における物体の状態と被写体画像における被写体の状態とが一致するように、ユーザの指示に基づいてCG画像を変更し、計測を行いたい部分に対してCG画像上で計測を行うことが可能である。
【0003】
しかし、特許文献1に記載された技術では、被写体の見え方が異なる複数の被写体画像を切り替えながら各被写体画像に対して計測を行う場合、被写体画像を切り替えるたびに、CG画像における物体の状態を被写体画像における被写体の状態に一致させる操作が必要となる。このため、ジェットエンジン内に周期的に配置された複数のブレードの計測を行う場合、上記の操作が頻繁に発生し、手間がかかるという問題がある。
【0004】
これに対して、特許文献2には、被写体を撮像して得られた2次元画像と、CAD(Computer Aided Design)を利用して得られたデータに基づく3Dオブジェクトとを自動的にマッチング(パターンマッチング)させることで、上記の手間の問題を解決した技術が記載されている。特許文献2に記載された技術では、まず、3Dオブジェクトを仮想的な複数の視点から観察した場合に、それぞれの視点において観察される3Dオブジェクトの投影図を生成し、複数の投影図をまとめて2Dモデルとして保存しておく。そして、2次元画像と、生成した2Dモデルとの間でマッチングを行い、2次元画像との類似度が 最も高い投影図を検索し、その投影図が生成されたときの視点の位置をもとに、2次元画像に写っている被写体と、2次元画像を撮像したカメラとの相対位置を算出する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平3−102202号公報
【特許文献2】米国特許出願公開第2009/0096790号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
カメラキャリブレーション(校正)の分野において、カメラの性能や状態を表すカメラパラメータには、外部パラメータと内部パラメータとがある。外部パラメータとは、撮影時におけるカメラの姿勢を表すパラメータである。内部パラメータとは、光学系の焦点距離や光学系の歪み、光学系の光軸と撮像素子の撮像面との傾きといった、カメラの内部的な数値の総称である。
【0007】
現実のカメラの内部パラメータは、カメラを製造する際の設計値によって決まるが、必ずしも設計通りにカメラを製造できるわけではない。そのため、製造されたカメラ1台ごとに、それぞれ異なる内部パラメータをもつことになる。
【0008】
特許文献2では、被写体の2次元画像と3Dオブジェクトの投影図との間でマッチングが行われ、2次元画像との類似度が最も高い投影図が選択される。これは、3Dオブジェクトを撮影する仮想的なカメラに設定された複数の外部パラメータのうち、被写体を撮像したカメラの外部パラメータに最も近い外部パラメータで撮影された3Dオブジェクトの投影図が選択されることに相当する。しかし、被写体を撮像したカメラの内部パラメータと、3Dオブジェクトを撮像した仮想的なカメラの内部パラメータとの違いは考慮されていないため、マッチングの精度、ひいては計測の精度が十分であるとは限らない。
【0009】
本発明は、上述した課題に鑑みてなされたものであって、計測精度を向上させることができる画像処理装置、画像処理方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明は、上記の課題を解決するためになされたもので、計測対象物の画像と、前記計測対象物に対応する物体であって予め算出された3次元形状を有する前記物体の画像とを表示する表示部と、前記計測対象物を撮像したカメラの姿勢と、前記物体を撮像した仮想的なカメラの姿勢とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第1の調整部と、前記計測対象物を撮像したカメラの光学系と撮像素子との少なくとも一方の特性と、前記物体を撮像した仮想的なカメラの光学系と撮像素子との少なくとも一方の特性とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第2の調整部と、前記第1の調整部および前記第2の調整部による調整が行われた後、入力装置を介して入力される指示に基づいて指定された計測位置に対応する前記物体上の空間座標を算出し、算出した空間座標に基づいて、前記物体のサイズを算出する計測部と、を備えたことを特徴とする画像処理装置である。
【0011】
また、本発明の画像処理装置において、前記第2の調整部は、前記物体の画像が投影される平面と、前記物体を撮像した仮想的なカメラの視点及び視線方向との幾何学的な関係を示すパラメータで構成されるスクリーンポーズに基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする。
【0012】
また、本発明の画像処理装置において、前記スクリーンポーズは、前記物体の画像が投影される平面と、前記物体を撮像した仮想的なカメラの視点との距離を示すパラメータを含むことを特徴とする。
【0013】
また、本発明の画像処理装置において、前記スクリーンポーズは、前記物体の画像が投影される平面と、前記物体を撮像した仮想的なカメラの視線方向との傾きを示すパラメータを含むことを特徴とする。
【0014】
また、本発明の画像処理装置において、前記第2の調整部はさらに、前記計測対象物を撮像したカメラの光学系の歪み特性を示すデータに基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方を補正することを特徴とする。
【0015】
また、本発明の画像処理装置において、前記第2の調整部は、前記第1の調整部による調整が行われた後、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする。
【0016】
また、本発明の画像処理装置において、前記第2の調整部は、前記第1の調整部による調整が行われた後の前記計測対象物の画像と前記物体の画像の特徴に基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整するか否かを判定することを特徴とする。
【0017】
また、本発明の画像処理装置において、前記第1の調整部は、前記計測対象物の画像上の第1の点を基準とする第1の図形と、前記物体の画像上の第2の点を基準とする第2の図形との幾何学計算を行った結果に基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする。
【0018】
また、本発明の画像処理装置において、前記第2の調整部は、前記計測対象物の画像上の第1の点を基準とする第1の図形と、前記物体の画像上の第2の点を基準とする第2の図形との幾何学計算を行った結果に基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする。
【0019】
また、本発明は、計測対象物の画像と、前記計測対象物に対応する物体であって予め算出された3次元形状を有する前記物体の画像とを表示部が表示するステップと、前記計測対象物を撮像したカメラの姿勢と、前記物体を撮像した仮想的なカメラの姿勢とが近づくように、第1の調整部が前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整するステップと、前記計測対象物を撮像したカメラの光学系と撮像素子との少なくとも一方の特性と、前記物体を撮像した仮想的なカメラの光学系と撮像素子との少なくとも一方の特性とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を第2の調整部が調整するステップと、前記第1の調整部および前記第2の調整部による調整が行われた後、計測部が、入力装置を介して入力される指示に基づいて指定された計測位置に対応する前記物体上の空間座標を算出し、算出した空間座標に基づいて、前記物体のサイズを算出するステップと、を備えたことを特徴とする画像処理方法である。
【0020】
また、本発明は、計測対象物の画像と、前記計測対象物に対応する物体であって予め算出された3次元形状を有する前記物体の画像とを表示する表示部と、前記計測対象物を撮像したカメラの姿勢と、前記物体を撮像した仮想的なカメラの姿勢とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第1の調整部と、前記計測対象物を撮像したカメラの光学系と撮像素子との少なくとも一方の特性と、前記物体を撮像した仮想的なカメラの光学系と撮像素子との少なくとも一方の特性とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第2の調整部と、前記第1の調整部および前記第2の調整部による調整が行われた後、入力装置を介して入力される指示に基づいて指定された計測位置に対応する前記物体上の空間座標を算出し、算出した空間座標に基づいて、前記物体のサイズを算出する計測部と、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【0021】
本発明によれば、計測対象物を撮像したカメラの光学系と撮像素子との少なくとも一方の特性と、物体を撮像した仮想的なカメラの光学系と撮像素子との少なくとも一方の特性とが近づくように、計測対象物の画像と物体の画像との少なくとも一方の姿勢を調整する。これによって、計測精度を向上させることができる。
【図面の簡単な説明】
【0022】
【図1】本発明の一実施形態によるブレード検査システムの構成を示すブロック図である。
【図2】本発明の一実施形態によるブレード検査システムが備える内視鏡装置の構成を示すブロック図である。
【図3】本発明の一実施形態によるブレード検査システム(変形例)の構成を示すブロック図である。
【図4】本発明の一実施形態によるブレード検査システム(変形例)の構成を示すブロック図である。
【図5】本発明の一実施形態によるブレード検査システム(変形例)が備えるPCの構成を示すブロック図である。
【図6】本発明の一実施形態における3D計測ソフトの画面を示す参考図である。
【図7】本発明の一実施形態における3Dオブジェクトとカメラポーズの関係を示す参考図である。
【図8】本発明の一実施形態における3Dオブジェクトとカメラポーズの関係を示す参考図である。
【図9】本発明の一実施形態における3Dオブジェクトとカメラポーズの関係を示す参考図である。
【図10】本発明の一実施形態における3Dオブジェクトとカメラポーズの関係を示す参考図である。
【図11】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図12】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図13】本発明の一実施形態におけるカメラポーズの初期値を説明するための参考図である。
【図14】本発明の一実施形態におけるカメラポーズの初期値を説明するための参考図である。
【図15】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図16】本発明の一実施形態におけるカメラポーズ設定処理の内容を説明するための参考図である。
【図17】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図18】本発明の一実施形態における参照点(計測)指定処理の内容を説明するための参考図である。
【図19】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図20】本発明の一実施形態における参照点(3D)指定処理の内容を説明するための参考図である。
【図21】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図22】本発明の一実施形態におけるマッチング処理の内容を説明するための参考図である。
【図23】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図24】本発明の一実施形態における計測処理の内容を説明するための参考図である。
【図25】本発明の一実施形態における計測処理の内容を説明するための参考図である。
【図26】本発明の一実施形態における空間座標の算出方法を説明するための参考図である。
【図27】本発明の一実施形態における空間座標の算出方法を説明するための参考図である。
【図28】本発明の一実施形態における空間座標の算出方法を説明するための参考図である。
【図29】本発明の一実施形態における空間座標の算出方法を説明するための参考図である。
【図30】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図31】本発明の一実施形態における参照点と参照図形を示す参考図である。
【図32】本発明の一実施形態におけるパン・チルト方向のマッチング処理の内容を説明するための参考図である。
【図33】本発明の一実施形態におけるデータリストを示す参考図である。
【図34】本発明の一実施形態におけるデータリストを示す参考図である。
【図35】本発明の一実施形態におけるデータリストを示す参考図である。
【図36】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図37】本発明の一実施形態におけるロール方向のマッチング処理の内容を説明するための参考図である。
【図38】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図39】本発明の一実施形態におけるズーム方向のマッチング処理の内容を説明するための参考図である。
【図40】本発明の一実施形態における辺長(3D)とカメラポーズのズーム方向位置との関係を示すグラフである。
【図41】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図42】本発明の一実施形態におけるシフト方向のマッチング処理の内容を説明するための参考図である。
【図43】本発明の一実施形態におけるマッチング処理の効果を説明するための参考図である。
【図44】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図45】本発明の一実施形態における3Dオブジェクトとスクリーンポーズの関係を示す参考図である。
【図46】本発明の一実施形態によるブレード検査システムが備える内視鏡挿入部20の先端に内蔵された撮像光学系および撮像素子の位置関係を示す構成図である。
【図47】本発明の一実施形態によるブレード検査システムが備える内視鏡挿入部20の先端に内蔵された撮像光学系および撮像素子の位置関係を示す構成図である。
【図48】本発明の一実施形態によるブレード検査システムが備える内視鏡挿入部20の先端に内蔵された撮像光学系および撮像素子の位置関係を示す構成図である。
【図49】本発明の一実施形態によるブレード検査システムが備える内視鏡挿入部20の先端に内蔵された撮像光学系および撮像素子の位置関係を示す構成図である。
【図50】本発明の一実施形態における歪み補正の内容を説明するための参考図である。
【図51】本発明の一実施形態における歪み補正の内容を説明するための参考図である。
【図52】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図53】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図54】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図55】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図56】本発明の一実施形態におけるスクリーンポーズを変更する様子を示す参考図である。
【図57】本発明の一実施形態におけるスクリーンポーズを変更する様子を示す参考図である。
【図58】本発明の一実施形態における3D計測ソフトによる動作の手順を示すフローチャートである。
【図59】本発明の一実施形態におけるスクリーンポーズを変更する様子を示す参考図である。
【図60】本発明の一実施形態におけるスクリーンポーズを変更する様子を示す参考図である。
【図61】本発明の一実施形態によるブレード検査システムが備える内視鏡挿入部20の先端に内蔵された撮像光学系および撮像素子の位置関係を示す構成図である。
【図62】本発明の一実施形態におけるスクリーンポーズを変更する様子を示す参考図である。
【図63】本発明の一実施形態によるブレード検査システムが備える内視鏡挿入部20の先端に内蔵された撮像光学系および撮像素子の位置関係を示す構成図である。
【図64】本発明の一実施形態におけるスクリーンポーズを変更する様子を示す参考図である。
【図65】本発明の一実施形態によるブレード検査システムが備える内視鏡挿入部20の先端に内蔵された撮像光学系および撮像素子の位置関係を示す構成図である。
【図66】本発明の一実施形態においてスクリーンポーズを調整する必要がある場合を説明するための参考図である。
【図67】本発明の一実施形態によるブレード検査システムが備える制御用コンピュータのCPUの機能構成を示すブロック図である。
【発明を実施するための形態】
【0023】
以下、図面を参照し、本発明の実施形態を説明する。図1は、本実施形態によるブレード検査システムの構成を示している。ジェットエンジン1内には、検査対象物である複数のタービンブレード10(もしくはコンプレッサーブレード)が所定の間隔で周期的に配置されている。また、ジェットエンジン1には、タービンブレード10を回転方向Aに所定の速度で回転させるターニングツール2が接続されている。本実施形態では、タービンブレード10の画像を取り込んでいる間は常にタービンブレード10を回転させた状態にしている。
【0024】
本実施形態では、タービンブレード10の画像を取得するため、内視鏡装置3(本発明の画像処理装置に対応)が用いられる。ジェットエンジン1の内部には、内視鏡装置3の内視鏡挿入部20が挿入されており、この内視鏡挿入部20により、回転しているタービンブレード10の映像が取り込まれる。また、内視鏡装置3には、タービンブレード10の3次元計測を行うための3D計測ソフトが記憶されている。
【0025】
図2は内視鏡装置3の構成を示している。内視鏡装置3は、内視鏡挿入部20、内視鏡装置本体21、モニタ22、およびリモコン(リモートコントローラ)23から構成されている。内視鏡挿入部20の先端には、撮像光学系30aおよび撮像素子30bが内蔵されている。また、内視鏡装置本体21には、画像信号処理装置(CCU)31、光源32、湾曲制御ユニット33、および制御用コンピュータ34が内蔵されている。
【0026】
内視鏡挿入部20において、撮像光学系30aは被写体(被検体)からの光を集光し、撮像素子30bの撮像面上に被写体像を結像する。撮像素子30bは、被写体像を光電変換して撮像信号を生成する。撮像素子30bから出力された撮像信号は画像信号処理装置31に入力される。
【0027】
内視鏡装置本体21において、画像信号処理装置31は、撮像素子30bからの撮像信号をNTSC信号等の映像信号に変換して制御用コンピュータ34に供給し、さらに必要に応じてアナログビデオ出力として、外部に出力する。
【0028】
光源32は、光ファイバ等を通じて内視鏡挿入部20の先端に接続されており、光を外部に照射することができる。湾曲制御ユニット33は内視鏡挿入部20の先端と接続されており、先端を上下左右に湾曲させることができる。光源32および湾曲制御ユニット33の制御は、制御用コンピュータ34によって行われる。
【0029】
制御用コンピュータ34は、RAM34a、ROM34b、CPU34c、外部インターフェースとしてネットワークI/F34d、RS232C I/F34e、カード I/F34fから構成されている。RAM34aは、ソフトウェア動作に必要な画像情報等のデータを一時記憶するために使用される。ROM34bには、内視鏡装置3を制御するための一連のソフトウェア(プログラム)が記憶されており、後述する3D計測ソフトもROM34b内に記憶される。CPU34cは、ROM34bに記憶されているソフトウェアの命令コードに従って、RAM34aに記憶されたデータを用いて各種制御のための演算等を実行する。
【0030】
ネットワークI/F34dは、外部PCとLANケーブルによって接続するためのインターフェースであり、外部PCに対して、画像信号処理装置31から出力された映像情報を展開することができる。RS232C I/F34eは、リモコン23と接続するためのインターフェースであり、このリモコン23をユーザが操作することによって、内視鏡装置3の各種動作を制御することができる。カード I/F34fは、記録媒体である各種メモリカード50を自由に着脱できるようになっている。メモリカード50を装着することにより、CPU34cの制御によって、メモリカード50に記憶されている画像情報等のデータを取り込み、あるいは画像情報等のデータをメモリカード50に記録することができる。
【0031】
本実施形態によるブレード検査システムの構成の変形例として、図3に示す構成を用いてもよい。本変形例では、内視鏡装置3にビデオ端子ケーブル4およびビデオキャプチャカード5が接続されており、これによって、内視鏡装置3が取り込んだ映像をPC6(本発明の画像処理装置に対応)にも取り込ませることが可能となっている。PC6は、図3ではノート型PCとして描かれているが、デスクトップ型のPC等でもよい。PC6には、タービンブレード10の3次元計測を行うための3D計測ソフトが記憶されている。
【0032】
さらに、図3では、PC6への映像の取り込みにビデオ端子ケーブル4およびビデオキャプチャカード5を用いているが、図4に示すようにLANケーブル7を用いてもよい。内視鏡装置3は、取り込まれた映像をLANネットワーク上に展開することのできるネットワークI/F34dを備えている。そして、LANケーブル7を通じて、PC6に映像を取りませることができる。
【0033】
図5はPC6の構成を示している。PC6はPC本体24およびモニタ25から構成されている。PC本体24には、制御用コンピュータ35が内蔵されている。制御用コンピュータ35は、RAM35a、HDD(ハードディスクドライブ)35b、CPU35c、外部インターフェースとして、ネットワークI/F35d、USB I/F35eから構成されている。制御用コンピュータ35はモニタ25に接続されており、映像情報およびソフトウェアの画面等がモニタ25に表示される。
【0034】
RAM35aは、ソフトウェア動作に必要な画像情報等のデータを一時記憶するために使用される。HDD35bには、内視鏡装置を制御するために一連のソフトウェアが記憶されており、3D計測ソフトもHDD35b内に記憶される。また、本実施形態では、タービンブレード10の画像を保存する保存用フォルダはHDD35b内に設定される。CPU35cは、HDD35bに記憶されているソフトウェアの命令コードに従って、RAM35aに記憶されたデータを用いて各種制御のための演算等を実行する。
【0035】
ネットワークI/F35dは、内視鏡装置3とPC6をLANケーブル7によって接続するためのインターフェースであり、内視鏡装置3からLAN出力された映像情報をPC6に入力することができる。USB I/F35eは、内視鏡装置3とPC6をビデオキャプチャカード5によって接続するためのインターフェースであり、内視鏡装置3からアナログビデオ出力された映像情報をPC6に入力することができる。
【0036】
図3および図4に示すブレード検査システムでは、図1に示すブレード検査システムと同様の効果を得ることができる。特に、内視鏡装置の性能がPCよりも劣っており、内視鏡装置の動作速度等が十分でない場合等に、図3および図4に示すブレード検査システムは有効である。
【0037】
次に、3D計測ソフトの画面を説明する。図6は、3D計測ソフトのメインウィンドウを示している。図6に示すメインウィンドウ600は、ユーザが3D計測ソフトを起動した際にモニタ22に表示される。CPU34cは、3D計測ソフトに従って、メインウィンドウ600内の各種CUIの操作に基づく処理を行う。
【0038】
メインウィンドウ600の表示は、CPU34cによる制御に従って行われる。CPU34cは、メインウィンドウ600を表示するためのグラフィック画像信号(表示信号)を生成し、モニタ22へ出力する。また、内視鏡装置3に取り込まれた映像(以下、計測画像と記載)をメインウィンドウ600上に重畳表示する場合には、CPU34cは、画像信号処理装置31から取り込んだ画像データをグラフィック画像信号に重畳する処理を行い、処理後の信号(表示信号)をモニタ22へ出力する。
【0039】
また、メインウィンドウ600上のGUIの表示状態を更新する場合、CPU34cは、更新後のメインウィンドウ600に対応したグラフィック画像信号を生成し、上記と同様の処理を行う。メインウィンドウ600以外のウィンドウの表示に係る処理も上記と同様である。以下、メインウィンドウ600等を表示(更新も含む)するためにCPU34cがグラフィック画像信号を生成する処理のことを、メインウィンドウ600等を表示するための処理と記載する。
【0040】
ユーザは、GUI(グラフィカルユーザインタフェース)機能を利用して、リモコン23を介してメインウィンドウ600を操作し、メインウィンドウ600に重畳表示されるカーソルCを移動させ、クリック等の指示を入力することにより、メインウィンドウ600の各種GUIの操作を行うことができる。以下、各種GUIの機能を説明する。
【0041】
メインウィンドウ600の右上部には、[ファイル選択]ボックス610が配置されている。また、メインウィンドウ600の左上部には[計測画像]ボックス611が配置されている。[ファイル選択]ボックス610は、[計測画像]ボックス611に表示される計測画像の選択、および[計測画像]ボックス611に表示される3Dオブジェクトに対応したCADデータの選択を行うためのボックスである。
【0042】
CADデータは、CADを利用して予め算出されたタービンブレード10の3次元形状を表すデータである。CADデータの形式には、STL(Standard Triangulated Language)形式等を用いる。3Dオブジェクトは、CADデータの内容をもとに構築されたCG物体である。[ファイル選択]ボックス610内のGUIおよび操作の詳細については、記載しない。
【0043】
[計測画像]ボックス611は、計測対象物であるタービンブレード10を撮像して得られた計測画像IMGを表示し、計測画像IMG上に3DオブジェクトOBを重畳表示するためのボックスである。後述するように、ユーザは[計測画像]ボックス611の操作を行うことにより、カメラポーズの変更、参照点の指定、計測点の指定等を行う。
【0044】
メインウィンドウ600の左下部には、[表示設定]ボックス620が配置されている。[表示設定]ボックス620内には、[計測画像]ボックス611に表示された3DオブジェクトOBの表示設定に関するGUIが配置されている。[表示設定]ボックス620内の各GUIの機能は以下の通りである。
【0045】
[透過率]バー621は、3Dオブジェクトの表示透過率を設定するためのバーである。[透過率]バー621は水平方向(横方向)に移動(スライド)可能になっており、ユーザが[透過率]バー621を移動させることで、3Dオブジェクトの表示透過率が変化する。
【0046】
例えば、透過率が大きく設定された場合、3DオブジェクトOBは透明に近い透過率で表示され、透過率が小さく設定された場合、3DオブジェクトOBは透過されずに表示される。後述するように、[計測画像]ボックス611において、ユーザが計測画像IMGに参照点を指定する際には、3DオブジェクトOBの透過率を大きく設定することで、計測画像IMGを見やすくすると良い。また、ユーザが3DオブジェクトOBに参照点を指定する際には、3DオブジェクトOBの透過率を小さく設定することで、3DオブジェクトOBを見やすくすると良い。
【0047】
[表示方法]ラジオボタン622は、3DオブジェクトOBの表示方法を設定するためのラジオボタンである。[表示方法]ラジオボタン622には、「シェーディング」と「ワイヤーフレーム」の2つの設定項目がある。「シェーディング」が選択された場合、3DオブジェクトOBは、ワイヤーフレームおよび表面が塗りつぶされた状態で表示され、「ワイヤーフレーム」が選択された場合、図6のように、3DオブジェクトOBはワイヤーフレームのみの状態で表示される。
【0048】
[表示方法]ラジオボタン623は、3DオブジェクトOBの表示色を設定するためのラジオボタンである。[表示方法]ラジオボタン623には、「水色」と「黄色」の2つの設定項目がある。[表示方法]ラジオボタン623の設定によって、3DオブジェクトOBの表示色を切り替えることができる。
【0049】
[移動方向]ラジオボタン624は、カメラポーズの移動方向を設定するためのラジオボタンである。カメラポーズは、外部パラメータに相当するパラメータであり、3DオブジェクトOBの姿勢(ポーズ)、すなわち3DオブジェクトOBをどの方向、どの位置から見ているかを示すパラメータである。言い換えると、カメラポーズは、3DオブジェクトOBを撮像した仮想的なカメラ(以下、仮想カメラと記載)の姿勢を示すパラメータである。[移動方向]ラジオボタン624には、「パン/チルト」と「ロール/ズーム」の2つの設定項目がある。「パン/チルト」が選択された場合、[計測画像]ボックス611において、ユーザがカーソルCを上下左右に移動させることで、カメラポーズをパン・チルト方向に回転させることができる。また、「ロール/ズーム」が選択された場合、同様の操作で、カメラポーズをロール・ズーム方向に回転させることができる。
【0050】
[計測画像]ボックス611の下側には、[現在位置]ボックス630が配置されている。[現在位置]ボックス630は、カーソル位置における3DオブジェクトOBの表面座標をリアルタイムで表示するためのボックスである。3DオブジェクトOBの表面座標は空間座標系の座標としてmm単位で示される。[計測画像]ボックス611において、ユーザがカーソルCを移動させることで、[現在位置]ボックス630の値もリアルタイムに変更される。例えば、カーソルCが3DオブジェクトOB上に位置する場合、3DオブジェクトOBの表面座標が算出され、[現在位置]ボックス630に表示される。カーソルCが3DオブジェクトOB上に位置しない場合は、[現在位置]ボックス630に「null」と表示される。3DオブジェクトOBの表面座標の算出方法については、図26〜図29を用いて後述する。
【0051】
[現在位置]ボックス630の下側には、[カメラポーズ]ボックス640が配置されている。[カメラポーズ]ボックス640は、カメラポーズをリアルタイムで表示するためのボックスである。ユーザがカメラポーズを変更することで、[カメラポーズ]ボックス640の値がアルタイムに変更される。カメラポーズは、空間座標系の座標としてmm単位で示される。
【0052】
[カメラポーズ]ボックス640の右側には、[シフト位置]ボックス650が配置されている。[シフト位置]ボックス650は、[計測画像]ボックス611における3DオブジェクトOBのシフト位置を表示するためのボックスである。3DオブジェクトOBのシフト位置は、平面座標系の座標としてpixel単位で示される。
【0053】
3DオブジェクトOBは[計測画像]ボックス611の中央部に表示されており、カメラポーズが変更されても表示位置は変化しない。しかし、計測画像IMGに写った被検体は、必ずしも画像の中央部に位置しているわけではない。そのため、計測画像IMGと3Dオブジェクト3Dとをマッチングさせる処理である3Dマッチング処理の実行後、3DオブジェクトOBは[計測画像]ボックス611の中央部ではなく、計測画像に写った被検体の上に位置しているべきである。
【0054】
上記のシフト位置は、[計測画像]ボックス611の中央部からの3DオブジェクトOBの相対位置を示している。以下、平面座標系におけるシフト位置の移動方向をシフト方向と記載する。ユーザが手動で任意にシフト位置を変更することはできない。シフト位置は、3Dマッチング処理の実行後に、CPU34cが算出するものである。
【0055】
[ファイル選択]ボックス610の下側には、[マッチング/計測]ボックス660が配置されている。[マッチング/計測]ボックス660内には、3Dマッチング処理および計測に関するGUIが配置されている。[マッチング/計測]ボックス660内の各GUIの機能は以下の通りである。
【0056】
[カメラポーズ]ボタン661aは、カメラポーズを変更するためのボタンである。[カメラポーズ]ボタン661aが押下された後、[計測画像]ボックス611aにおいて、ユーザがカーソルCを上下左右に移動させることで、カメラポーズが変更可能となる。また、[カメラポーズ]ボタン661aの右側には、[リセット]ボタン661bが配置されており、[リセット]ボタン661bが押下されると、カメラポーズが初期値に設定される。
【0057】
[参照点(計測)]ボタン662aは、計測画像IMGの参照点(計測)を指定するためのボタンである。参照点(計測)とは、CPU34cが3Dマッチング処理を実行する際の基準となる計測画像IMG上の点のことである。[参照点(計測)]ボタン662aが押下された後、[計測画像]ボックス611において、ユーザがカーソルCを移動させて、指定したい位置でクリック等を行うことで、計測画像IMGに写った被検体に対して参照点(計測)を指定することができる。参照点(計測)は、平面座標系の座標としてpixel単位で示される。また、[参照点(計測)]ボタン662aが押下されると、3DオブジェクトOBの表示透過率が自動的に大きく設定され、計測画像IMGが見やすい状態となる。また、[参照点(計測)]ボタン662aの右側には、[クリア]ボタン662bが配置されており、[クリア]ボタン662bが押下されると、既に指定された参照点(計測)が全てクリアされ、指定前の状態となる。
【0058】
[参照点(3D)]ボタン663aは、3DオブジェクトOBの参照点(3D)を指定するためのボタンである。参照点(3D)とは、参照点(計測)と同様に、CPU34cが3Dマッチング処理を実行する際の基準となる3Dオブジェクト上の点である。[参照点(3D)]ボタン663aが押下された後、[計測画像]ボックス611において、ユーザがカーソルCを移動させて、参照点(3D)を指定したい位置でクリック等の操作を行うことで、3DオブジェクトOBに対して参照点(3D)を指定することができる。参照点(3D)は、空間座標系の座標としてmm単位で示される。また、[参照点(3D)]ボタン663aが押下された後、3DオブジェクトOBの表示透過率が自動的に小さく設定され、3DオブジェクトOBが見やすい状態となる。また、[参照点(3D)]ボタン663aの右側には、[クリア]ボタン663bが配置されており、[クリア]ボタン663bが押下されると、既に指定された参照点(3D)が全てクリアされ、指定前の状態となる。
【0059】
[3Dマッチング]ボタン664は、3Dマッチング処理を実行するためのボタンである。[3Dマッチング]ボタン664が押下された後、ユーザが指定した2組の参照点(参照点(計測)と参照点(3D))に基づいて、CPU34cは3Dマッチング処理を実行する。このとき、CPU34cは、2組の参照点の位置がそれぞれ一致するように、3Dマッチング処理を行うことになる。3Dマッチング処理の結果、計測画像IMG内の被検体と3DオブジェクトOBとがほぼ一致するように表示され、計測画像IMG内の被検体と3DオブジェクトOBが計測に適した状態となる。
【0060】
[計測]ボタン665aは、計測点を指定するためのボタンである。計測点とは、計測を行う際の基準となる点である。[計測]ボタン665aが押下された後、[計測画像]ボックス611において、ユーザがカーソルCを移動させて、計測点を指定したい位置でクリック等の操作を行うことで、3DオブジェクトOBに対して計測点を指定することができる。CPU34cは、指定された計測点に基づいて、計測処理を実行する。また、[計測]ボタン665aの右側には、[クリア]ボタン665bが配置されており、[クリア]ボタン665bが押下されると、既に指定された計測点が全てクリアされ、指定前の状態となる。
【0061】
[マッチング/計測]ボックス660の下側には、[計測結果]ボックス670が配置されている。[計測結果]ボックス670は、計測結果を表示するためのボックスである。[計測画像]ボックス611においてユーザが計測点を指定すると、指定された計測点に基づいて計測処理が実行され、[計測結果]ボックス670に計測結果が表示される。
【0062】
メインウィンドウ600の右下部には、[終了]ボタン680が配置されている。[終了]ボタン680は、3D計測ソフトを終了するためのボタンである。[終了]ボタン680が押下されると、全てのソフト動作が終了し、メインウィンドウ600が閉じる(非表示となる)。
【0063】
次に、図7を用いて、3Dオブジェクトとカメラポーズとの関係について説明する。図7に示すように、実空間に対応する仮想的な空間上に3DオブジェクトOB1および視点700がある。3DオブジェクトOB1の位置は固定されているが、視点700の位置はユーザによって自由に変更される。3DオブジェクトOB1の重心位置には視線中心701があり、視点700から視線方向702に伸びる直線は、常にこの視線中心701を向いている。視線中心701の位置は固定されている。視点700は、3DオブジェクトOB1を撮像する仮想カメラの位置に相当し、視線方向702は仮想カメラの撮像方向(光軸方向)に相当する。
【0064】
3DオブジェクトOB1と視点700との間には、矩形状の仮想的な平面であるスクリーン平面703がある。スクリーン平面703は[計測画像]ボックス611に相当するものである。スクリーン平面703の縦方向および横方向のサイズは固定値である。3DオブジェクトOB1をスクリーン平面703に投影した投影像が、[計測画像]ボックス611に表示される3DオブジェクトOBである。
【0065】
スクリーン平面703は、視線方向702と常に垂直であり、視点700から視線方向702に伸びる直線は、常にスクリーン平面703の中心704を通る。視点700からスクリーン平面703の中心704までの距離706は固定値であるが、視点700から視線中心701までの距離は、ユーザによって自由に変更される。
【0066】
スクリーン平面703の向いている方向は、上方向ベクトル705によって示される。この上方向ベクトル705は、スクリーン平面703と平行であり、スクリーン平面703の上方向がどの方向かを表す単位ベクトルである。
【0067】
図7に示した項目のうち、カメラポーズを構成するパラメータは、視点位置、視線中心位置、上方向ベクトルの3つである。以下では、図8〜図10を用いて、カメラポーズを変更したときの3Dオブジェクトとカメラポーズとの関係について説明する。
【0068】
図8(a)は、カメラポーズをパン・チルト方向に変更した場合の3Dオブジェクトとカメラポーズとの関係を示している。パン方向とは、視点800から視線中心801までの距離を固定したまま、視点800を上方向ベクトル802と垂直に移動させた場合の方向(パン方向803)である。チルト方向とは、視点800から視線中心801までの距離を固定したまま、視点800を上方向ベクトル802と平行に移動させた場合の方向(チルト方向804)である。図8(a)のように、カメラポーズをパン・チルト方向に変更すると、図8(b)のように、スクリーン平面805に投影される3DオブジェクトOBは、上下左右の各方向に回転することがわかる。
【0069】
図9(a)は、カメラポーズをロール方向に変更した場合の3Dオブジェクトとカメラポーズとの関係を示している。ロール方向とは、視点900の位置を固定したまま、視点900から視点中心901に向かう視点方向902の軸を中心に、スクリーン平面903を回転させた場合の方向(ロール方向904)である。図9(a)のように、カメラポーズをロール方向に変更すると、図9(b)のように、スクリーン平面903に投影される3DオブジェクトOBは、スクリーン平面903の中心を軸として回転することがわかる。
【0070】
図10(a)は、カメラポーズをズーム方向に変更した場合の3Dオブジェクトとカメラポーズとの関係を示している。ズーム方向とは、上方向ベクトル1000を固定したまま、視点1001を視線方向1002と平行に移動させた場合の方向(ズーム方向1003)である。図10(a)のように、カメラポーズをズーム方向に変更すると、図10(b)のように、スクリーン平面1004に投影される3DオブジェクトOBは、拡大・縮小することがわかる。
【0071】
上記の説明の通り、カメラポーズが変更されると、スクリーン平面の位置・方向が変化する。それに伴い、スクリーン平面に投影される3Dオブジェクトの表示も変化し、その結果、[計測画像]ボックス611に表示される3Dオブジェクトの表示も変化することになる。CPU34cは、ユーザによってリモコン23を介して入力されるカメラポーズの変更指示を検出し、その変更指示に応じて、3Dオブジェクトを[計測画像]ボックス611に表示するための処理を行う。
【0072】
次に、3D計測ソフトの動作の流れを説明する。以下では、撮影時におけるカメラの姿勢を表すパラメータである外部パラメータのみの調整を行う動作(図11〜図42)を説明した後、外部パラメータと、カメラの光学系の光学特性や撮像素子の構造特性を表すパラメータである内部パラメータとの両方の調整を行う動作(図43〜図66)を説明する。
【0073】
また、以下では、メインウィンドウ600における全てのGUIに関する動作ではなく、一部のGUIに関する動作のみ説明するものとする。具体的には、[計測画像]ボックス611、[カメラポーズ]ボタン661a、[参照点(計測)]ボタン662a、[参照点(3D)]ボタン663a、[3Dマッチング]ボタン664、[計測]ボタン665a、[計測結果]ボックス670、[終了]ボタン680に関する動作は説明するが、その他のGUIに関する動作の説明は行わない。
【0074】
図11は3D計測ソフトの動作の流れを示している。ステップSAでは、CPU34cが3D計測ソフトを起動する。具体的には、ユーザがリモコン23を介して入力した起動指示に基づいて、CPU34cは、ROM34bに格納されている3D計測ソフトをRAM34aに読み込み、3D計測ソフトに従った動作を開始する。ステップSBでは、CPU34cが、メインウィンドウ600を表示するための処理を行う。
【0075】
ステップSCでは、CPU34cが初期化処理を行う。初期化処理とは、メインウィンドウ600内の各種GUIの初期状態を設定したり、RAM34aに記録された各種データの初期値を設定したりする処理である。初期化処理の詳細については、後述する。
【0076】
ステップSDでは、CPU34cがカメラポーズ設定処理を行う。カメラポーズ設定処理とは、ユーザが入力した、カメラポーズを変更する指示に基づいて、[計測画像]ボックス611の計測画像内の被検体と3Dオブジェクトとを大まかにマッチングさせる処理である。カメラポーズ設定処理の詳細については、後述する。
【0077】
ステップSEでは、CPU34cが参照点(計測)指定処理を行う。参照点(計測)指定処理とは、ユーザが入力した、[計測画像]ボックス611の計測画像に写った被検体上の位置を指定する指示に基づいて、参照点を指定(設定)する処理である。参照点(計測)指定処理の詳細については、後述する。
【0078】
ステップSFでは、CPU34cが参照点(3D)指定処理を行う。参照点(3D)指定処理とは、ユーザが入力した、[計測画像]ボックス611の3Dオブジェクト上の位置を指定する指示に基づいて、参照点を指定(設定)する処理である。参照点(3D)指定処理の詳細については、後述する。
【0079】
ステップSGでは、CPU34cが3Dマッチング処理を行う。3Dマッチング処理とは、ユーザが指定した2組の参照点(参照点(計測)・参照点(3D))に基づいて、[計測画像]ボックス611に表示された計測画像と3Dオブジェクトとをマッチングさせる処理である。3Dマッチング処理の詳細については、後述する。
【0080】
ステップSHでは、CPU34cが計測処理を行う。計測処理とは、ユーザが入力した、[計測画像]ボックス611の3Dオブジェクト上の位置を指定する指示に基づいて、計測点を指定(設定)し、指定した計測点に基づいて、被検体のサイズを算出する処理である。計測処理の詳細については、後述する。
【0081】
ステップSIでは、CPU34cが、ユーザによって[終了]ボタン680が押下されたかどうかを確認する。ユーザが[終了]ボタン680を押下した場合、処理はステップSJに移行する。また、ユーザが[終了]ボタン680を押下しなかった場合、処理はステップSDに移行する。ステップSJでは、CPU34cがメインウィンドウ600を非表示とし、3D計測ソフトの動作を終了する。
【0082】
次に、図12を用いて、ステップSCの初期化処理の動作の流れを説明する。ステップSC1では、CPU34cが、メモリカード50に記録された所定の計測画像ファイルおよびCADデータをRAM34aに読み込む。ステップSC2では、CPU34cが、読み込まれたCADデータに基づいて、カメラポーズ(初期値)を算出する。
【0083】
カメラポーズのうち、視点位置については、図13のように、CPU34cは空間座標系の原点の座標(x,y,z)=(0,0,0)を初期値(視点1300)とする。カメラポーズのうち、視線中心位置については、図13のように、CPU34cは、CADデータにおける全ての空間座標の重心位置を算出し、その座標を初期値(視点中心1301)とする。この視線中心位置は、CADデータごとに固有の値であり、この後、カメラポーズが変更されても、この値が変化することはない。カメラポーズのうち、上方向ベクトルについては、図13のように、CPU34cは、視点1300と視線中心1301を結ぶ直線と直交する単位ベクトルのうち、スクリーン平面の縦辺に平行な単位ベクトルを初期値(上方向ベクトル1302)とする。
【0084】
ステップSC3では、CPU34cが、ステップSC2で算出したカメラポーズ(初期値)をカレントカメラポーズとしてRAM34aに記録する。カレントカメラポーズとは、現在設定されているカメラポーズのことであり、3Dオブジェクトは、このカレントカメラポーズに基づいて表示されることになる。
【0085】
ステップSC4では、CPU34cが、図14のように[計測画像]ボックス611に計測画像IMGを表示し、さらにその上に3DオブジェクトOBを所定の透過率で重畳表示するための処理を実行する。このとき、3DオブジェクトOBは、算出されたカメラポーズ(初期値)に基づいて、スクリーン平面に投影された平面図として表示される。ステップSC4の処理が終了すると、初期化処理が終了する。
【0086】
次に、図15を用いて、ステップSDのカメラポーズ設定処理の流れを説明する。ステップSD1では、CPU34cが、[カメラポーズ]ボタン661aが既に押下された状態(ステップSD3の処理が既に行われた状態)であるかどうかを確認する。[カメラポーズ]ボタン661aが押下された状態である場合、処理はステップSD4に移行し、[カメラポーズ]ボタン661aが押下された状態でない場合、処理はステップSD2に移行する。
【0087】
ステップSD2では、CPU34cが、[カメラポーズ]ボタン661aがユーザによって押下されたかどうかを確認する。[カメラポーズ]ボタン661aが押下された場合、処理はステップSD3に移行し、[カメラポーズ]ボタン661aが押下されていない場合、カメラポーズ設定処理が終了する。
【0088】
ステップSD3では、CPU34cが、図16(a)のように[カメラポーズ]ボタン661aを強調表示するための処理を行う。[カメラポーズ]ボタン661aを強調表示するのは、現在、カメラポーズが変更可能であることをユーザに通知するためである。
【0089】
ステップSD4では、CPU34cが、図16(b)のように、[計測画像]ボックス611において、ユーザがリモコン23を操作してカーソルCによりクリック等を行いながらカーソルCを上下左右に移動させる操作(ドラッグ操作)を検出し、カーソルCの操作を検出した結果に基づいてカメラポーズを変更する。このとき、ユーザは、計測画像に写った被検体DUTと3DオブジェクトOBとが大まかにマッチングするように、カメラポーズを変更する。カメラポーズは、前述したパン・チルト・ロール・ズームの方向に変更可能である。また、このとき、CPU34cは、リモコン23を介して入力されるカーソルCの操作指示を検出し、その操作指示に基づいて、変更後のカメラポーズを算出する。
【0090】
ステップSD5では、CPU34cが変更後のカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ステップSD6では、CPU34cが、カレントカメラポーズに基づいて、3Dオブジェクトを再表示するための処理を行う。これによって、図16(c)のように、カメラポーズが変更された3DオブジェクトOBが[計測画像]ボックス611に表示される。ステップSD6の処理が終了すると、カメラポーズ設定処理が終了する。
【0091】
次に、図17を用いて、ステップSEの参照点(計測)指定処理の流れを説明する。ステップSE1では、CPU34cが、[参照点(計測)]ボタン662aが既に押下された状態(ステップSE3,SE4の処理が既に行われた状態)であるかどうかを確認する。[参照点(計測)]ボタン662aが押下された状態である場合、処理はステップSE5に移行し、[参照点(計測)]ボタン662aが押下された状態でない場合、処理はステップSE2に移行する。
【0092】
ステップSE2では、CPU34cが、[参照点(計測)]ボタン662aがユーザによって押下されたかどうかを確認する。[参照点(計測)]ボタン662aが押下された場合、処理はステップSE3に移行し、押下されていない場合、参照点(計測)指定処理が終了する。
【0093】
ステップSE3では、CPU34cが、図18(a)のように、[参照点(計測)]ボタン662aを強調表示するための処理を行う。[参照点(計測)]ボタン662aを強調表示するのは、現在、計測画像に対して参照点が指定可能であることをユーザに通知するためである。
【0094】
ステップSE4では、CPU34cが、図18(b)のように、3DオブジェクトOBの透過率を変更し、変更後の透過率で3DオブジェクトOBを再表示するための処理を行う。ここで設定される透過率は大きな値であり、3DオブジェクトOBは透明に近い状態となり、計測画像が見やすい状態となる。なお、特に図示していないが、既に指定した参照点(3D)が存在する場合は、3DオブジェクトOBが一旦非表示となる。これも、計測画像を見やすい状態とするためである。
【0095】
ステップSE5では、CPU34cが、[計測画像]ボックス611において、計測画像に写った被検体DUTに対して参照点(計測)を指定するためにユーザがリモコン23を操作してカーソルCによりクリック等を行う操作を検出し、カーソルCの操作を検出した結果に基づいて、指定された参照点の座標を算出する。このとき算出される参照点(計測)の座標は、計測画像における平面座標(pixel単位)である。
【0096】
ステップSE6では、CPU34cが、指定された参照点(計測)の座標をRAM34aに記録する。ステップSE7では、CPU34cが、指定された参照点(計測)を計測画像上に重畳表示するための処理を行う。これによって、図18(c)のように、参照点(計測)R1,R2,R3が計測画像上に重畳表示される。ステップSE7の処理が終了すると、参照点(計測)指定処理が終了する。
【0097】
次に、図19を用いて、ステップSFの参照点(3D)指定処理の流れを説明する。ステップSF1では、CPU34cが、[参照点(3D)]ボタン663aが既に押下された状態(ステップSF3,SF4が既に行われた状態)であるかどうかを確認する。[参照点(3D)]ボタン663aが押下された状態である場合、処理はステップSF5に移行し、[参照点(3D)]ボタン663aが押下されていない状態でない場合、処理はステップSF2に移行する。
【0098】
ステップSF2では、CPU34cが、[参照点(3D)]ボタン663aがユーザによって押下されたかどうかを確認する。[参照点(3D)]ボタン663aが押下された場合、処理はステップSF3に移行し、[参照点(3D)]ボタン663aが押下されていない場合、参照点(3D)指定処理が終了する。
【0099】
ステップSF3では、CPU34cが、図20(a)のように、[参照点(3D)]ボタン663aを強調表示するための処理を行う。[参照点(3D)]ボタン663aを強調表示するのは、現在、3Dオブジェクトに対して参照点が指定可能であることをユーザに通知するためである。
【0100】
ステップSF4では、CPU34cが、図20(b)のように、3DオブジェクトOBの透過率を変更し、変更後の透過率で3DオブジェクトOBを再表示するための処理を行う。ここで設定される透過率は小さな値であり、3DオブジェクトOBが見やすい状態となる。このとき、特に図示していないが、既に指定した参照点(計測)が存在する場合は、計測画像が一旦非表示となる。これも、3DオブジェクトOBを見やすい状態とするためである。
【0101】
ステップSF5では、CPU34cが、[計測画像]ボックス611において、計測画像に写った被検体DUTに対して参照点(3D)を指定するためにユーザがリモコン23を操作してカーソルCによりクリック等を行う操作を検出し、カーソルCの操作を検出した結果に基づいて、指定された参照点の座標を算出する。このとき算出される参照点(3D)の座標は、3Dオブジェクト表面における空間座標(mm単位)であり、CPU34cは、まず指定された参照点の平面座標(pixel単位)を算出し、続いて、算出した平面座標から空間座標(mm単位)を算出する。
【0102】
ユーザが指定する参照点(3D)と、既に指定された参照点(計測)とが、それぞれ対応付けられていなくてはならない。本実施形態では、CPU34cは、ユーザが参照点(計測)を指定した順番と、参照点(3D)を指定した順番とに基づいて、参照点(3D)と参照点(計測)とを対応付けるものとする。より具体的には、CPU34cは、参照点(計測)のうち最初に指定された点と参照点(3D)のうち最初に指定された点とを対応付け、参照点(計測)のうち2番目に指定された点と参照点(3D)のうち2番目に指定された点とを対応付け、・・・、参照点(計測)のうちn番目に指定された点と参照点(3D)のうちn番目に指定された点とを対応付ける。上記の方法は一例であり、これに限るわけではない。
【0103】
図18(c)に示すように、被検体DUTの左上の参照点(計測)R1、右上の参照点(計測)R2、右下の参照点(計測)R3が指定されている。参照点(計測)の指定が終了した後、ユーザは、被検体DUT上の参照点(計測)に対応する3DオブジェクトOB上の参照点(3D)を、参照点(計測)を指定したときと同じ順番で指定する。図20(c)に示すように、被検体DUT上の参照点(計測)R1,R2,R3に対応する3Dオブジェクト上の位置に参照点(計測)R1’,R2’,R3’が指定されている。
【0104】
ステップSF6では、CPU34cが、指定された参照点(3D)の座標をRAM34aに記録する。ステップSF7では、CPU34cが、指定された参照点(3D)を3Dオブジェクト上に重畳表示するための処理を行う。これによって、図20(c)のように、参照点(3D)R1’,R2’,R3’が3DオブジェクトOB上に重畳表示される。ステップSF7の処理が終了すると、参照点(3D)指定処理が終了する。
【0105】
なお、CPU34cが、指定された参照点(3D)の座標をCADデータに記録してもよいし、CADデータと紐付けされた(関連付けられた)別のファイルに記録してもよい。これによって、再度ステップSC1にて同じCADデータを読み出した場合、ステップSF1〜ステップSF5の処理を省略することができる。また、参照点(3D)は必ずしもステップSFにおいて指定されるべきものではなく、予め内視鏡装置3またはPC6等によって、CADデータに記録されていてもよいし、CADデータと紐付けされた(関連付けられた)別のファイルに記録されていてもよい。
【0106】
次に、図21を用いて、ステップSGの3Dマッチング処理の流れを説明する。ステップSG1では、CPU34cが、[3Dマッチング]ボタン664がユーザによって押下されたかどうかを確認する。[3Dマッチング]ボタン664が押下された場合、処理はステップSG2に移行し、[3Dマッチング]ボタン664が押下されていない場合、3Dマッチング処理が終了する。
【0107】
ステップSG2では、CPU34cが、全ての参照点が既に指定済みであるどうかを確認する。具体的には、CPU34cは、参照点(計測)および参照点(3D)が、それぞれ3点ずつ、既に指定済みであるかどうかを確認する。全ての参照点が指定済みの場合、処理はステップSG3に移行し、参照点が指定済みでない場合、3Dマッチング処理が終了する。ステップSG3では、CPU34cが、RAM34aに記録された全ての参照点の座標を読み込む。
【0108】
ステップSG4では、CPU34cが、指定された参照点の座標に基づいて、パン・チルト方向のマッチング処理を行う。パン・チルト方向のマッチング処理の詳細については、後述する。ステップSG5では、CPU34cが、指定された参照点の座標に基づいて、ロール方向のマッチング処理を行う。ロール方向のマッチング処理の詳細については、後述する。
【0109】
ステップSG6では、CPU34cが、指定された参照点の座標に基づいて、ズーム方向のマッチング処理を行う。ズーム方向のマッチング処理の詳細については、後述する。ステップSG7では、CPU34cが、指定された参照点の座標に基づいて、シフト方向のマッチング処理を行う。シフト方向のマッチング処理の詳細については、後述する。
【0110】
ステップSG8では、CPU34cが、[計測画像]ボックス611において、3Dオブジェクトを再表示するための処理を行う。このとき、3Dオブジェクトは、ステップSG4〜SG7において最終的に算出されたカメラポーズおよびシフト位置に基づいて、姿勢および位置が調整されて表示される。図22は、マッチング処理後の計測画像に写った被検体と3Dオブジェクトを示している。図22のように、計測画像に写った被検体と3Dオブジェクトとが、ほぼ一致していること、すなわち、両者がうまくマッチングしていることがわかる。ステップSG8の処理が終了すると、3Dマッチング処理が終了する。上記の3Dマッチング処理を行うによって、被検体を撮像したカメラ(内視鏡装置3)の姿勢に近づくように、3Dオブジェクトを撮像した仮想カメラの姿勢を調整することができ、被検体と3Dオブジェクトをマッチングさせることができる。
【0111】
次に、図23を用いて、ステップSHの計測処理の流れを説明する。ステップSH1では、CPU34cが、[計測]ボタン664が既に押下された状態(ステップSH3が既に行われた状態)であるかどうかを確認する。[計測]ボタン664が押下された状態である場合、処理はステップSH4に移行し、[計測]ボタン664が押下された状態でない場合、処理はステップSH2に移行する。
【0112】
ステップSH2では、CPU34cが、[計測]ボタン664がユーザによって押下されたかどうかを確認する。[計測]ボタン664が押下された場合、処理はステップSH3に移行し、[計測]ボタン664が押下されていない場合、計測処理が終了する。
【0113】
ステップSH3では、CPU34cが、図24(a)のように、[計測]ボタン664を強調表示するための処理を行う。[計測]ボタン664を強調表示するのは、現在、3Dオブジェクトに対して計測点が指定可能であることをユーザに通知するためである。
【0114】
ステップSH4では、CPU34cが、[計測画像]ボックス611において、3Dオブジェクトに対して計測点を指定するためにユーザがリモコン23を操作してカーソルCによりクリック等を行う操作を検出し、カーソルCの操作を検出した結果に基づいて、指定された計測点の座標を算出する。CPU34cは、算出した計測点の座標をRAM34aに記録する。このとき記録される計測点の座標は、3Dオブジェクト表面における空間座標(mm単位)である。
【0115】
ステップSH5では、CPU34cが、指定された計測点の座標に基づいて、計測結果を算出し、算出した計測結果をRAM34aに記録する。本実施形態では、2つの計測点の空間距離(2点間距離)を計測するものとする。ステップSH5で算出される計測結果は、既に指定された2つの計測点の空間距離である。指定された計測点が1点のみである場合、計測結果は算出されず、処理がステップSH6に移行する。
【0116】
ステップSH6では、CPU34cが、図24(b),(c)のように、指定された計測点を3Dオブジェクト上に重畳表示するための処理を行う。図24(b)は1点目の計測点P1が指定されたときの[計測画像]ボックス611であり、図24(c)は2点目の計測点P2が指定されたときの[計測画像]ボックス611である。さらに、CPU34cは、図25のように、算出した計測結果を[計測結果]ボックス670に表示するための処理を行う。指定された計測点が1点のみである場合、計測結果は表示されず、ステップSH6の処理が終了する。
【0117】
ステップSH6の処理が終了すると、計測処理が終了する。上記の説明では、2点間距離を計測する場合を例としているが、3点以上の計測点が指定される面積等の計測を行う場合も同様である。
【0118】
次に、図26〜図29を用いて、指定された計測点の、3Dオブジェクト表面における空間座標(3次元座標)の算出方法について説明する。図26は、3次元空間における3Dオブジェクトの一部と視点Eとの関係を示している。
【0119】
3Dオブジェクトは、複数の三角形の空間平面から構成されている。視点Eから3Dオブジェクトの重心点Gへ向かう方向を視線方向とする。視点Eと3Dオブジェクトとの間には、視線方向と垂直に交わるスクリーン平面SCが設定されている。
【0120】
ユーザが[計測画像]ボックス611における3Dオブジェクト上の計測点を指定すると、CPU34cは、図27のように、スクリーン平面SC上に計測点Sを設定する。計測点Sと視点Eとを通る空間直線を直線Lとする。そして、CPU34cは、3Dオブジェクトを構成する複数の三角形の中から、直線Lと交差する全ての三角形を検索する。直線と空間三角形とが交差するかどうかを判定する方法として、例えばTomas Mollerの交差判定法を用いることが可能である。この例では、図28のように、三角形T1,T2が、直線Lと交差する三角形であると判定される。
【0121】
そして、図29のように、CPU34cは、直線Lと三角形T1,T2との交点を算出し、算出したそれぞれの交点を交点F1,F2とする。ここでは、3Dオブジェクト表面における空間座標を算出したいので、CPU34cは、交点F1,F2のうち、より視点Eに近い方を選択する。この場合、CPU34cは、交点F1の空間座標を、3Dオブジェクト表面における空間座標として算出する。上記では、直線Lと交差すると判定された三角形を2つのみとしたが、3Dオブジェクトの形状や視線方向によっては、より多くの三角形が交差すると判定される場合もある。その場合も、直線Lと三角形との交点をそれぞれ求め、求めた交点の中で、最も視点Eに近い交点を選択することになる。
【0122】
上記のようにして、計測点の空間座標を算出することができる。ステップSF5における参照点(3D)の空間座標も上記と同様にして算出することができる。
【0123】
次に、図30を用いて、ステップSG4のパン・チルト方向のマッチング処理の流れを説明する。パン・チルト方向のマッチング処理の目的は、参照点(計測)によって構成される3角形と、参照点(3D)をスクリーン平面に降ろした投影点によって構成される3角形とが最も相似に近くなるカメラポーズを見つける、ということである。これらの3角形が相似に近い場合、計測画像に写った被検体が撮像されたときの視線のパン・チルト方向と、3Dオブジェクトを観察する視線のパン・チルト方向とが、ほぼ一致しているということができる。
【0124】
以下、図31(a)のように、参照点(3D)R1’〜R3’をスクリーン平面3100に降ろした投影点Rp1’〜Rp3’を投影点(3D)と記載する。さらに、図31(b)のように、参照点(計測)R1〜R3によって構成される3角形3102を参照図形(計測)と記載し、図31(a)のように、投影点(3D)Rp1’〜Rp3’によって構成される3角形3101を参照図形(3D)と記載する。
【0125】
ステップSG401では、CPU34cが頂点角(計測)を算出し、算出した頂点角(計測)をRAM34aに記録する。頂点角(計測)とは、図32(a)のように、参照図形(計測)3200の3つの頂点R1〜R3の角度A1〜A3である。
【0126】
ステップSG402では、CPU34cが、カメラポーズをパン・チルト方向にそれぞれ−31deg回転させる。ステップSG403〜SG407において繰り返し処理が行われるが、これは、図32(b)のように、カメラポーズをパン・チルト方向に回転させながら、頂点角(3D)を順次算出するためである。頂点角(3D)とは、図32(b)のように、参照図形(3D)3201の3つの投影点(3D)Rp1’〜Rp3’の角度A1’〜A3’である。
【0127】
前述したように、参照点(計測)と参照点(3D)は、各参照点が指定された順番によって対応付けられており、角度A1〜A3と角度A1’〜A3も、この順番によって対応付けられている。図32では、角度A1と角度A1’が対応付けられ、角度A2と角度A2’が対応付けられ、角度A3と角度A3’が対応付けられている。
【0128】
ステップSG403では、CPU34cが、カメラポーズをパン方向に+1deg回転させる。そして、ステップSG403〜SG407では、カメラポーズのパン方向の回転角度が+30degとなるまでCPU34cが繰り返し処理を行う。CPU34cは、カメラポーズをパン方向に−30degから+30degとなるまで+1degずつ回転させるので、結果としてステップSG403〜SG407の一連の処理を61回繰り返すことになる。
【0129】
ステップSG404では、CPU34cが、カメラポーズをチルト方向に+1deg回転させる。そして、ステップSG404〜SG407では、カメラポーズのチルト方向の回転角度が+30degとなるまでCPU34cが繰り返し処理を行う。CPU34cは、カメラポーズをチルト方向に−30degから+30degとなるまで+1degずつ回転させるので、結果としてステップSG404〜SG407の処理を61回繰り返すことになる。なお、ステップSG403〜SG407の繰り返し処理において、カメラポーズを−30degから+30degとなるまで回転させているが、カメラポーズを回転させる範囲は必ずしもこの範囲である必要はない。
【0130】
ステップSDのカメラポーズ設定処理において、ユーザがカメラポーズを変更する際、計測画像に写った被検体と3Dオブジェクトとをどの程度までマッチングさせるかによって、ステップSG403〜SG407の繰り返し処理において、カメラポーズを回転させるのに必要な範囲が変わることになる。範囲が広い場合、ユーザは大まかなマッチングさえ行えば良いが、その代わり、3Dマッチングの処理時間が長くなる。範囲が狭い場合、3Dマッチングの処理時間が短くて済むが、その代わり、ユーザはある程度詳細にマッチングを行う必要がある。
【0131】
ステップSG405では、CPU34cが、現在のパン・チルト方向の回転角度をRAM34aに記録する。図33は、RAM34aに記録される回転角度を示している。ステップSG405では、CPU34cは、回転角度をRAM34aに上書き記録するのではなく、カメラポーズをパン・チルト方向に回転するたびに、図33(a)のように、RAM34aに用意されたデータリストに現在のパン・チルト方向の回転角度を1行ずつ追加記録していく。このデータリストには、後述するように、パン・チルト方向の回転角度と関連付けて、頂点角(3D)等の様々なデータを記録することができる。
【0132】
ステップSG406では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG407では、CPU34cが頂点角(3D)を算出し、算出した頂点角(3D)をRAM34aに記録する。このとき、CPU34cは、図33(b)のように、頂点角(3D)をパン・チルト方向の回転角度と関連付けて、データリストに1行ずつ追加記録していく。
【0133】
ステップSG403〜SG407の繰り返し処理が終了すると、処理はステップSG408に移行する。この時点でのデータリストは、図33(c)のようになり、61×61行分のデータで構成されている。ステップSG408では、CPU34cがカメラポーズをパン・チルト方向にそれぞれ−30deg回転させる。ステップSG403〜SG407の繰り返し処理が終了した時点で、パン・チルト方向の回転角度はそれぞれ+30degであるので、ここでは、−30deg回転させることによって、カメラポーズを元の状態に戻すことになる。
【0134】
ステップSG409では、CPU34cが、頂点角(計測)と頂点角(3D)との差を算出する。具体的には、CPU34cは、(1)式〜(3)式のように、頂点角(計測)A1〜A3と頂点角(3D)A1’〜A3’との差の絶対値D1〜D3を算出する。
D1=|A1−A1’| ・・・(1)
D2=|A2−A2’| ・・・(2)
D3=|A3−A3’| ・・・(3)
さらに、CPU34cは、図34(a)のように、頂点角の差をパン・チルト方向の回転角度と関連付けて、データリストに追加記録する。
【0135】
ステップSG410では、CPU34cが差D1〜D3の平均値を算出する。さらに、CPU34cは、図34(b)のように、平均値をパン・チルト方向の回転角度と関連付けて、データリストに追加記録する。
【0136】
ステップSG411では、CPU34cが平均値の最小値をデータリストから検索する。図35は、データリストにおいて、0.5が最小値として検索された様子を示している。
【0137】
ステップSG412では、CPU34cが、平均値が最小となる場合のパン・チルト方向の回転角度をデータリストから読み込む。具体的には、CPU34cは、図35のように、データリストから、最小の平均値に関連付けられたパン・チルト方向の回転角度を読み込む。
【0138】
ステップSG413では、CPU34cが、カメラポーズをパン・チルト方向に、ステップSG412で読み込まれた回転角度だけ回転させる。このカメラポーズで3Dオブジェクトを表示した場合、図32(c),(d)のように、回転後の頂点角(計測)と頂点角(3D)とが、良く一致しており、参照図形(計測)と参照図形(3D)とが相似に近いことがわかる。
【0139】
ステップSG414では、CPU34cが、このときのカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ここでは、カレントカメラポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG414の処理が終了すると、パン・チルト方向のマッチング処理が終了する。
【0140】
次に、図36を用いて、ステップSG5のロール方向のマッチング処理の流れを説明する。ロール方向のマッチング処理の目的は、参照図形(計測)と参照図形(3D)の回転方向のアングルが最も一致するカメラポーズを見つける、ということである。それぞれの参照図形の回転方向のアングルが近い場合、計測画像に写った被検体を観察する視線のロール方向の回転角度と、3Dオブジェクトを観察する視線のロール方向の回転角度とが、ほぼ一致しているということができる。
【0141】
ステップSG501では、CPU34cが相対角(計測)を算出し、算出した相対角(計測)をRAM34aに記録する。相対角(計測)とは、図37(a)のように、計測画像において上下方向に伸びる直線3700と、参照図形(計測)の3つの辺との間の角度Ar1〜Ar3である。このときの相対角(計測)は、直線3700から辺への右回り方向の角度である。
【0142】
ステップSG502では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG503では、CPU34cが相対角(3D)を算出し、算出した相対角(3D)をRAM34aに記録する。相対角(3D)とは、図37(b)のように、スクリーン平面において上下方向に伸びる直線3701と参照図形(3D)の3つの辺との間の角度Ar1’〜Ar3’である。スクリーン平面は、計測画像が表示される[計測画像]ボックス611に相当するため、直線3700と直線3701の方向は一致する。また、このときの相対角(3D)は、直線3701から辺への右回り方向の角度である。
【0143】
ステップSG504では、CPU34cが相対角(計測)と相対角(3D)との差を算出する。具体的には、CPU34cは、(4)式〜(6)式のように、相対角(計測)Ar1〜Ar3と相対角(3D)Ar1’〜Ar3’とのそれぞれの差Dr1〜Dr3を算出する。
Dr1=Ar1−Ar1’ ・・・(4)
Dr2=Ar2−Ar2’ ・・・(5)
Dr3=Ar3−Ar3’ ・・・(6)
【0144】
ステップSG505では、CPU34cが差Dr1〜Dr3の平均値を算出し、算出した平均値をRAM34aに記録する。ステップSG506では、CPU34cがカメラポーズをロール方向に、ステップSG505で算出した平均値だけ回転させる。このカメラポーズで3Dオブジェクトを表示した場合、図37(c),(d)のように、回転後の相対角(計測)と相対角(3D)とが良く一致していることがわかる。
【0145】
ステップSG507では、CPU34cが、このときのカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ここでは、カレントカメラポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG507の処理が終了すると、ロール方向のマッチング処理が終了する。
【0146】
次に、図38を用いて、ステップSG6のズーム方向のマッチング処理の流れを説明する。ズーム方向のマッチング処理の目的は、参照図形(計測)と参照図形(3D)のサイズが最も一致するカメラポーズを見つける、ということである。それぞれの参照図形のサイズが近い場合、計測画像に写った被検体を観察する視線のズーム方向の位置と、3Dオブジェクトを観察する視線のズーム方向の位置とが、ほぼ一致しているということができる。
【0147】
ステップSG601では、CPU34cが辺長(計測)を算出し、算出した辺長(計測)をRAM34aに記録する。辺長(計測)とは、図39(a)のように、参照点(計測)R1〜R3によって構成される3角形の3つの辺の長さL1〜L3である。
【0148】
ステップSG602では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG603では、CPU34cが辺長1(3D)を算出し、算出した辺長1(3D)をRAM34aに記録する。辺長1(3D)とは、図39(b)のように、参照図形(3D)の3つの辺の長さL1’〜L3’である。
【0149】
ステップSG604では、CPU34cが、このときのカメラポーズをカメラポーズ1としてRAM34aに上書き記録する。ステップSG605では、CPU34cが、図39(b)のように、カメラポーズをズーム方向に所定値だけ移動させる。
【0150】
ステップSG606では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG607では、CPU34cが辺長2(3D)を算出し、算出した辺長2(3D)をRAM34aに記録する。辺長2(3D)とは、図39(b)のように、カメラポーズをズーム方向に所定値だけ移動させた後の、参照図形(3D)の3つの辺の長さLz1’〜Lz3’である。ステップSG608では、CPU34cが、このときのカメラポーズをカメラポーズ2としてRAM34aに上書き記録する。
【0151】
ステップSG609では、CPU34cがズーム量を算出し、算出したズーム量をRAM34aに記録する。ズーム量は、辺長(3D)と辺長(計測)とが一致するようなカメラポーズのズーム方向の移動量であり、辺長1,2(3D)と、カメラポーズ1,2との関係から算出される。辺は3つであるので、ズーム量も3つ算出される。
【0152】
図40は、辺長(3D)とカメラポーズのズーム方向位置との関係を示している。図40のグラフ4000が示すように、両者は線形的な比例関係にある。グラフ4000を用いることで、辺長(3D)と辺長(計測)とを一致させる場合にカメラポーズをズーム方向に移動させる際の移動量を算出することができる。
【0153】
ステップSG610では、CPU34cが3つのズーム量の平均値を算出し、算出した平均値をRAM34aに記録する。ステップSG611では、CPU34cが、カメラポーズをズーム方向に、ステップSG611で算出した平均値だけ移動させる。このカメラポーズで3Dオブジェクトを表示した場合、図39(c),(d)のように、移動後の辺長(計測)と辺長(3D)とが、良く一致していることがわかる。
【0154】
ステップSG612では、CPU34cが、このときのカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ここでは、カレントカメラポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG612の処理が終了すると、ズーム方向のマッチング処理が終了する。
【0155】
次に、図41を用いて、ステップSG7のシフト方向のマッチング処理の流れを説明する。シフト方向のマッチング処理の目的は、[計測画像]ボックス611における、計測画像に写った被検体と3Dオブジェクトとが一致するように、シフト方向に3Dオブジェクトを移動させる、ということである。本処理は、3Dオブジェクトのシフト位置を決定するものであるため、カメラポーズの算出は行わない。
【0156】
ステップSG701では、CPU34cが重心点(計測)を算出し、算出した重心点(計測)をRAM34aに記録する。重心点(計測)とは、図42(a)のように、参照点(計測)R1〜R3によって構成される3角形の重心点Gである。
【0157】
ステップSG702では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG703では、CPU34cが重心点(3D)を算出し、算出した重心点(3D)をRAM34aに記録する。重心点(3D)とは、図42(a)のように、投影点(3D)Rp1’〜Rp3’によって構成される3角形の重心点G’である。
【0158】
ステップSG704では、CPU34cがシフト量を算出し、算出したシフト量をRAM34aに記録する。シフト量とは、重心点(計測)の、重心点(3D)との相対位置(平面座標系、pixel単位)である。ステップSG705では、CPU34cが、3Dオブジェクトをシフト方向に、ステップSG704で算出したシフト量だけ移動させる。このカメラポーズで3Dオブジェクトを表示した場合、図42(b)のように、重心点(計測)と重心点(3D)とが、良く一致していることがわかる。ステップSG705の処理が終了すると、シフト方向のマッチング処理が終了する。
【0159】
従来例では、2次元画像と3Dオブジェクトの投影図(2Dモデル)とを用いて、画像から検出されるエッジをベースとした画像処理によるマッチング処理を行っていたため、3Dオブジェクトの再表示や、膨大なデータ量をもつ画像データの統計計算に、多くの処理時間がかかっていた。しかし、本実施形態では、3Dマッチング処理を実行する際、ユーザが指定する平易な形状の参照図形に基づく簡単な幾何学計算のみを実行すれば良く、処理時間を大幅に短縮することができる。さらに、3Dオブジェクトの再表示は、3Dマッチング処理終了後の1度のみで良い。
【0160】
前述したように、現実のカメラの内部パラメータ(カメラの光学系の光学特性や撮像素子の構造特性を表すパラメータ)は、カメラを製造する際の設計値によって決まるが、必ずしも設計通りにカメラを製造できるわけではない。そのため、製造されたカメラ1台ごとに、それぞれ異なる内部パラメータをもつことになる。仮想カメラの内部パラメータに設計値を設定しても、そのとき使用している現実のカメラが設計値通りに製造されているとは限らない。よって、3Dマッチング処理を行う際には、3Dオブジェクトを撮像した仮想カメラの内部パラメータも調整する必要がある。
【0161】
図22に示したように、3Dマッチング処理後の、計測画像における被検体と3Dオブジェクトはほぼ一致している。しかし、図43のように被検体と3Dオブジェクトを拡大して詳細に見てみると、両者がうまくマッチングできていない箇所があることがわかる。原因としては、仮想カメラの内部パラメータを調整していないことが、理由の1つと考えられる。3Dマッチングの精度が低いと、その後に行われる計測処理の精度にも影響を及ぼすことになる。以上の理由から、3Dマッチング処理の精度を向上させるためには、この内部パラメータも考慮し、調整する必要がある。
【0162】
以下では、仮想カメラの外部パラメータの調整を行った後、仮想カメラの内部調整を行う動作を説明する。仮想カメラの内部パラメータを調整することにより、3Dマッチング処理の精度が向上し、ひいては、計測処理の精度も向上する。
【0163】
図11に示した3D計測ソフトの動作のうち、ステップSCの初期化処理とステップSGの3Gマッチング処理が以下のように変更される。図44は、ステップSCの初期化処理の動作を示している。ステップSC1では、CPU34cが、メモリカード50に記録された所定の計測画像ファイルおよびCADデータをRAM34aに読み込む。ステップSC2では、CPU34cが、読み込まれたCADデータに基づいて、カメラポーズ(初期値)を算出する。
【0164】
カメラポーズのうち、視点位置については、図13のように、CPU34cは空間座標系の原点の座標(x,y,z)=(0,0,0)を初期値(視点1300)とする。カメラポーズのうち、視線中心位置については、図13のように、CPU34cは、CADデータにおける全ての空間座標の重心位置を算出し、その座標を初期値(視点中心1301)とする。この視線中心位置は、CADデータごとに固有の値であり、この後、カメラポーズが変更されても、この値が変化することはない。カメラポーズのうち、上方向ベクトルについては、図13のように、CPU34cは、視点1300と視線中心1301を結ぶ直線と直交する単位ベクトルのうち、スクリーン平面の縦辺に平行な単位ベクトルを初期値(上方向ベクトル1302)とする。
【0165】
ステップSC3では、CPU34cが、ステップSC2で算出したカメラポーズ(初期値)をカレントカメラポーズとしてRAM34aに記録する。カレントカメラポーズとは、現在設定されているカメラポーズのことであり、3Dオブジェクトは、このカレントカメラポーズに基づいて表示されることになる。
【0166】
ステップSC5では、CPU34cが、メモリカード50に記録されたカメラパラメータをRAM34aに読み込む。ここで読み込まれるカメラパラメータは、現在使用されている現実のカメラに対応したカメラパラメータである。
【0167】
カメラパラメータの内容は、以下の通りである。
(A)撮像光学系によって画像に生じる歪みを補正するための歪み補正データ
(B)撮像光学系の焦点距離
(C)撮像光学系と撮像素子(主平面と撮像面)との傾きである撮像面傾き
これらのカメラパラメータは、3D計測ソフトが起動する前にメモリカード50に記録される。(A)の歪み補正データに関しては、例えば特開平10−248806号公報に記載された歪み補正テーブルの算出方法を用いて歪み補正データを算出すれば良い。(B)(C)の焦点距離および撮像面傾きに関しては、カメラを製造する際の設計値をそのまま焦点距離および撮像面傾きに用いれば良い。
【0168】
CPU34aは、ステップSC5でメモリカード50から読み込んだカメラパラメータのうち、(B)(C)の焦点距離および撮像面傾きを、カレントスクリーンポーズとして、RAM34aに記録する(ステップSC6)。スクリーンポーズとは、内部パラメータに相当するパラメータであり、3Dオブジェクトの像が投影されるスクリーン平面が、仮想カメラの位置である視点および仮想カメラの撮像方向である視線方向に対して、どのような位置関係にあるかを示すパラメータである。カレントスクリーンポーズとは、現在設定されているスクリーンポーズのことである。3Dオブジェクトは、カレントカメラポーズおよびカレントスクリーンポーズに基づいて表示される。
【0169】
図45を用いて、スクリーンポーズについて説明する。実空間に対応する仮想的な空間上に3DオブジェクトOB1および視点4500がある。3DオブジェクトOB1の重心位置には視線中心4501があり、視点4500から視線方向4502に伸びる直線は、常にこの視線中心4501を向いている。視点4500は、3DオブジェクトOB1を撮像する仮想カメラの位置に相当し、視線方向4502は仮想カメラの撮像方向(光軸方向)に相当する。3DオブジェクトOB1と視点4500との間には、矩形状の仮想的な平面であるスクリーン平面4503がある。3DオブジェクトOB1をスクリーン平面4503に投影した投影像が、[計測画像]ボックス611に表示される3DオブジェクトOBである。視点4500から視線方向4502に伸びる直線は、スクリーン平面4503の中心であるスクリーン平面中心4504を常に通る。
【0170】
スクリーンポーズを構成するパラメータは、スクリーン距離とスクリーン傾きの2つである。スクリーン距離とは、視点4500からスクリーン平面中心4504までの距離のことであり、スクリーン傾きとは、視線方向4502とスクリーン平面4503との傾きのことである。
【0171】
以下では、撮像光学系および撮像素子とスクリーンポーズとの関係を説明する。図46は、内視鏡挿入部20の先端に内蔵された撮像光学系30aおよび撮像素子30bの位置関係を示している。内視鏡挿入部20の先端20a側から順に、撮像光学系30aおよび撮像素子30bが並んで設置されている。撮像光学系30aの光軸4600は光学中心4601(レンズ中心)を通り、さらに撮像中心4602(撮像素子中心)を通る。
【0172】
理想的な状態(すなわち設計値)では、撮像光学系30aの主平面と撮像素子30bの撮像面は、互いに平行であり、撮像光学系30aの中心(光学中心4601)と、撮像素子30bの中心(撮像中心4602)との間隔が撮像光学系30aの焦点距離となるはずである。しかし、実際には、撮像光学系30aおよび撮像素子30bを必ずしも設計値通りに設置できるわけではなく、製造誤差が発生する。例えば、図47のように、撮像素子30bが光軸4600の方向にずれて設置されたり、図48、図49のように、撮像素子30bが光軸4600に対して傾いて設置されたりする場合がある。
【0173】
これらを、仮想的な空間上において表現するために用いるのがスクリーンポーズである。撮像光学系30aと撮像素子30bとの間隔がスクリーン距離に対応し、撮像光学系30aと撮像素子30bとの傾きがスクリーン傾きに対応する。また、光軸4600は視線方向に対応し、撮像中心4602はスクリーン平面中心に対応する。ステップSC6でRAM34aに記録されるカレントスクリーンポーズでは、スクリーン距離は使用中の撮像光学系30aの焦点距離であり、スクリーン傾きは、使用中の撮像光学系30aおよび撮像素子30bに対応した撮像面傾き(例えば90°)である。
【0174】
ステップSC7では、CPU34cが、歪み補正データを用いて、計測画像を補正する。図50(a)は、歪み補正を行う前の計測画像である。被検体DUTが歪んでいることがわかる。このような計測画像を用いて3Dマッチング処理を行っても、図50(b)のように、被検体DUTと3DオブジェクトOBとをうまくマッチングさせることができない。しかし、図51のように、計測画像5100に歪み補正を行った後の計測画像5110では、被検体DUTの歪みは除去される。歪み補正を行った計測画像5110を用いて3Dマッチング処理を行うことにより、被検体と3Dオブジェクトとをマッチングさせることが可能となる。本実施形態では、計測画像に対して歪み補正を行っているが、計測画像に含まれる歪みと同一の歪みを有するように、歪み補正データを用いて3Dオブジェクトの歪み補正(歪みをかける補正)を行ってもよい。
【0175】
ステップSC4では、CPU34cが、図14のように[計測画像]ボックス611に計測画像IMGを表示し、さらにその上に3DオブジェクトOBを所定の透過率で重畳表示するための処理を実行する。このとき、3DオブジェクトOBは、算出されたカメラポーズ(初期値)およびスクリーンポーズ(初期値)に基づいて、スクリーン平面に投影された平面図として表示される。ステップSC4の処理が終了すると、初期化処理が終了する。
【0176】
次に、図52を用いて、ステップSGの3Dマッチング処理の流れを説明する。ステップSG1では、CPU34cが、[3Dマッチング]ボタン664がユーザによって押下されたかどうかを確認する。[3Dマッチング]ボタン664が押下された場合、処理はステップSG2に移行し、[3Dマッチング]ボタン664が押下されていない場合、3Dマッチング処理が終了する。
【0177】
ステップSG2では、CPU34cが、全ての参照点が既に指定済みであるどうかを確認する。具体的には、CPU34cは、参照点(計測)および参照点(3D)が、それぞれ3点ずつ、既に指定済みであるかどうかを確認する。全ての参照点が指定済みの場合、処理はステップSG3に移行し、参照点が指定済みでない場合、3Dマッチング処理が終了する。ステップSG3では、CPU34cが、RAM34aに記録された全ての参照点の座標を読み込む。
【0178】
ステップSG4では、CPU34cが、指定された参照点の座標に基づいて、パン・チルト方向のマッチング処理を行う。パン・チルト方向のマッチング処理の詳細については、図30に示した通りである。ステップSG5では、CPU34cが、指定された参照点の座標に基づいて、ロール方向のマッチング処理を行う。ロール方向のマッチング処理の詳細については、図36に示した通りである。
【0179】
ステップSG6では、CPU34cが、指定された参照点の座標に基づいて、ズーム方向のマッチング処理を行う。ズーム方向のマッチング処理の詳細については、図38に示した通りである。ステップSG7では、CPU34cが、指定された参照点の座標に基づいて、シフト方向のマッチング処理を行う。シフト方向のマッチング処理の詳細については、図41に示した通りである。
【0180】
ステップSG8では、CPU34cが、[計測画像]ボックス611において、3Dオブジェクトを再表示するための処理を行う。このとき、3Dオブジェクトは、ステップSG4〜SG7において最終的に算出されたカメラポーズおよびシフト位置に基づいて、姿勢および位置が調整されて表示される。
【0181】
ステップSG9では、CPU34cがファインマッチング判別処理を行う。上記のステップSG4〜SG6で行われる処理が、カメラポーズに基づいた3Dマッチング処理であったのに対し、ファインマッチングとは、スクリーンポーズに基づいた、より詳細な3Dマッチング処理を指す。ファインマッチング判別処理とは、ファインマッチングをどのように行うかを判別する処理である。ファインマッチング判別処理の詳細については、後述する。
【0182】
ステップSG10では、CPU34cが、RAM34aに記録されている判別値が0よりも大きいかどうかを確認する。判別値とは、ステップSG9のファインマッチング判別処理の結果であり、0〜3の値をとる。判別値の詳細については、後述する。判別値が0よりも大きい場合、処理はステップSG11に移行し、判別値が0の場合、3Dマッチング処理が終了する。
【0183】
ステップSG11では、CPU34cが、ファインマッチングを行うかどうかをユーザに確認させる確認メッセージ(図示せず)を表示するための処理を行う。確認メッセージを表示するためのウィンドウには[Yes]および[No]ボタンが配置されている。ユーザは、ステップSG8において[計測画像]ボックス611に表示された被検体と3Dオブジェクトとの一致の度合い(マッチング状態)を目視し、ファインマッチングを行うかどうかを決定する。マッチング状態に問題があれば、ユーザは[Yes]ボタンを押下すれば良いし、マッチング状態に問題なければ、ユーザは[No]ボタンを押下すれば良い。
【0184】
ステップSG12では、CPU34cが、確認メッセージを表示したウィンドウにおいて、[Yes]ボタンがユーザにより押下されたかどうかを確認する。[Yes]ボタンが押下された場合、処理はステップSG13に移行し、[Yes]ボタンが押下されていない場合、3Dマッチング処理が終了する。
【0185】
ステップSG13では、CPU34cがファインマッチング処理を実行する。ファインマッチング処理の詳細については、後述する。ステップSG14では、CPU34cが、[計測画像]ボックス611において、3Dオブジェクトを再表示するための処理を行う。このとき、3Dオブジェクトは、ステップSG4〜SG7において最終的に算出されたカメラポーズおよびシフト位置と、ステップSG13において最終的に算出されたスクリーンポーズとに基づいて表示される。ステップSG8で表示された被検体と3Dオブジェクトとのマッチング状態が良好でない場合でも、ステップSG14では被検体と3Dオブジェクトとがほぼ一致した画像を表示することができる。ステップSG14の処理が終了すると、3Dマッチング処理が終了する。
【0186】
次に、図53を用いて、ステップSG9のファインマッチング判別処理の流れを説明する。ステップSG901では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG902では、CPU34cが頂点角(3D)を算出し、算出した頂点角(3D)をRAM34aに記録する。ステップSG903では、CPU34cが辺長(3D)を算出し、算出した辺長(3D)をRAM34aに記録する。
【0187】
ステップSG904では、CPU34cが、頂点角(計測)と頂点角(3D)との差を算出し、算出した差をRAM34aに記録する。頂点角(計測)の値には、図30のステップSG401で算出された値が用いられる。頂点角(計測)と頂点角(3D)はそれぞれ3組あるので、CPU34cは、3組の頂点角(計測)と頂点角(3D)の差を算出し、算出した3組の差の平均値をRAM34aに記録する。
【0188】
ステップSG905では、CPU34cが、辺長(計測)と辺長(3D)との差を算出し、算出した差をRAM34aに記録する。辺長(計測)の値には、図38のステップSG601で算出された値が用いられる。辺長(計測)と辺長(3D)はそれぞれ3組あるので、CPU34cは、3組の辺長(計測)と辺長(3D)の差を算出し、算出した3組の差の平均値をRAM34aに記録する。
【0189】
ステップSG906では、CPU34cが、RAM34aに記録された頂点角の差および辺長の差が所定値より大きいかどうかを確認する。頂点角・辺長の差が両方とも所定値より小さい場合、処理はステップSG907に移行し、CPU34cは、判別値を0として、RAM34aに上書き記録する。頂点角の差のみが所定値より大きい場合、処理はステップSG908に移行し、CPU34cは、判別値を1として、RAM34aに上書き記録する。
【0190】
辺長の差のみ、所定値より大きい場合、処理はステップSG909に移行し、CPU34cは、判別値を2として、RAM34aに上書き記録する。頂点角・辺長の差が両方とも所定値より大きい場合、処理はステップSG910に移行し、CPU34cは、判別値を3として、RAM34aに上書き記録する。ステップSG907〜SG910の処理が終了すると、ファインマッチング判別処理が終了する。
【0191】
次に、図54を用いて、ステップSG13のファインマッチング処理の流れを説明する。ステップSG1301では、CPU34cが、RAM34aに記録された判別値を確認する。判別値が1の場合、処理はステップSG1302に移行し、CPU34cがパン・チルト方向(Sp)マッチング処理を行う。判別値が2の場合、処理はステップSG1303に移行し、CPU34cがズーム方向(Sp)マッチング処理を行う。判別値が3の場合、処理はステップSG1304に移行し、CPU34cがパン・チルト方向(Sp)マッチング処理を行い、さらにステップSG1305では、CPU34cがズーム方向(Sp)マッチング処理を行う。
【0192】
パン・チルト方向(Sp)マッチング処理およびズーム方向(Sp)マッチング処理の詳細については、後述する。なお、カメラポーズに関するパン・チルト方向等の各方向と、スクリーンポーズに関するパン・チルト方向等の各方向とを区別するため、スクリーンポーズに関する各方向については、各方向を表す文字列に「(Sp)」を付与している。
【0193】
ここで、判別値とファインマッチング処理との関連性について、説明する。判別値が0の場合、頂点角および辺長の差が小さいので、2つの参照図形はほぼ一致していると考えられる。そのため、ファインマッチング処理は行われない。
【0194】
判別値が1の場合、辺長の差は小さいが、頂点角の差が大きいので、2つの参照図形のサイズはほぼ一致しているが、角度に関してより詳細なマッチング処理を行う必要があると判断できる。そのため、角度に関する影響がより大きなパン・チルト方向(Sp)のマッチング処理を行うこととする。
【0195】
判別値が2の場合、頂点角の差は小さいが、辺長の差が大きいので、2つの参照図形の角度はほぼ一致しているが、サイズに関してより詳細なマッチング処理を行う必要があると判断できる。そのため、サイズに関する影響がより大きなズーム方向(Sp)のマッチング処理を行うこととする。
【0196】
判別値が2の場合、頂点角および辺長の差が大きいので、2つの参照図形の角度およびサイズの両方に関してより詳細なマッチングを行う必要があると判断できる。そのため、パン・チルト方向(Sp)およびズーム方向(Sp)のマッチング処理を両方行うこととする。ステップSG1302〜SG1305の処理が終了すると、ファインマッチング処理が終了する。上記のファインマッチング処理を行うによって、被検体を撮像したカメラ(内視鏡装置3)の光学系の光学特性や撮像素子の構造特性に近づくように、3Dオブジェクトを撮像した仮想カメラの光学系の光学特性や撮像素子の構造特性を調整することができ、被検体と3Dオブジェクトをより高精度にマッチングさせることができる。
【0197】
次に、図55を用いて、ステップSG1302,SG1304のパン・チルト方向(Sp)マッチング処理の流れを説明する。ステップSG1302,SG1304のパン・チルト方向(Sp)マッチング処理の流れは、ステップSG4のパン・チルト方向マッチング処理の流れとほぼ同じである。異なる点は、回転の対象がカメラポーズではなくスクリーンポーズである点と、回転角度の範囲および回転角度のステップである。
【0198】
図56は、スクリーンポーズをパン方向(Sp)に回転させる様子を示している。視点5600と視線中心5601を結ぶ直線と直交する単位ベクトルのうち、初期位置のスクリーン平面の縦辺に平行な単位ベクトルである上方向ベクトル5602が予め求められている。この上方向ベクトル5602に平行でスクリーン平面中心5603を通る回転軸5604を中心にスクリーン平面5605を回転させると、スクリーン平面5603はパン方向(Sp)5606に回転する。つまり、スクリーンポーズをパン方向(Sp)に回転させることは、撮像中心を中心にスクリーン平面を左右方向に回転させること、すなわち、スクリーン傾きを左右方向に回転させて調整することと同義である。
【0199】
図57は、スクリーンポーズをチルト方向(Sp)に回転させる様子を示している。視点5700と視線中心5701を結ぶ直線と直交する単位ベクトルのうち、初期位置のスクリーン平面の横辺に平行な単位ベクトルである右方向ベクトル5702が予め求められている。この右方向ベクトル5702に平行でスクリーン平面中心5703を通る回転軸5704を中心にスクリーン平面5705を回転させると、スクリーン平面5703はチルト方向(Sp)5706に回転する。つまり、スクリーンポーズをチルト方向(Sp)に回転させることは、撮像中心を中心にスクリーン平面を上下方向に回転させること、すなわち、スクリーン傾きを上下方向に回転させて調整することと同義である。
【0200】
ステップSG1311では、CPU34cが、スクリーンポーズをパン・チルト方向(Sp)にそれぞれ−3.1deg回転させる。ステップSG1312では、CPU34cが、スクリーンポーズをパン方向(Sp)に+0.1deg回転させる。そして、ステップSG1312〜SG1316では、カメラポーズのパン方向(Sp)の回転角度が+3degとなるまでCPU34cが繰り返し処理を行う。
【0201】
ステップSG1313では、CPU34cが、スクリーンポーズをチルト方向(Sp)に+0.1deg回転させる。そして、ステップSG1313〜SG1316では、スクリーンポーズのチルト方向(Sp)の回転角度が+3degとなるまでCPU34cが繰り返し処理を行う。なお、ステップSG1312〜SG1316の繰り返し処理において、スクリーンポーズを−3degから+3degとなるまで回転させているが、スクリーンポーズを回転させる範囲は必ずしもこの範囲である必要はない。
【0202】
ステップSG1314では、CPU34cが、現在のパン・チルト方向(Sp)の回転角度をRAM34aに記録する。ここでは、CPU34cは、回転角度をRAM34aに上書き記録するのではなく、スクリーンポーズをパン・チルト方向(Sp)に回転するたびに、前述したデータリスト(図33)に現在のパン・チルト方向(Sp)の回転角度を1行ずつ追加記録していく。このデータリストには、パン・チルト方向(Sp)の回転角度と関連付けて、頂点角(3D)等の様々なデータを記録することができる。
【0203】
ステップSG1315では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG1316では、CPU34cが頂点角(3D)を算出し、算出した頂点角(3D)をRAM34aに記録する。このとき、CPU34cは、頂点角(3D)をパン・チルト方向(Sp)の回転角度と関連付けて、データリストに1行ずつ追加記録していく。
【0204】
ステップSG1312〜SG1316の繰り返し処理が終了すると、処理はステップSG1317に移行する。ステップSG1317では、CPU34cがスクリーンポーズをパン・チルト方向にそれぞれ−3.0deg回転させる。ステップSG1312〜SG1316の繰り返し処理が終了した時点で、パン・チルト方向(Sp)の回転角度はそれぞれ+3.0degであるので、ここでは、−3.0deg回転させることによって、スクリーンポーズを元の状態に戻すことになる。
【0205】
ステップSG1318では、CPU34cが、3組の頂点角(計測)と頂点角(3D)との差を算出する。さらに、CPU34cは、3組の頂点角の差をパン・チルト方向(Sp)の回転角度と関連付けて、データリストに追加記録する。ステップSG1319では、CPU34cが3組の頂点角の差の平均値を算出する。さらに、CPU34cは、平均値をパン・チルト方向(Sp)の回転角度と関連付けて、データリストに追加記録する。
【0206】
ステップSG1320では、CPU34cが平均値の最小値をデータリストから検索する。ステップSG1321では、CPU34cが、平均値が最小となる場合のパン・チルト方向(Sp)の回転角度をデータリストから読み込む。ステップSG1322では、CPU34cが、スクリーンポーズをパン・チルト方向(Sp)に、ステップSG1321で読み込まれた回転角度だけ回転させる。
【0207】
ステップSG1323では、CPU34cが、このときのスクリーンポーズを、カレントスクリーンポーズとして、RAM34aに上書き記録する。ここでは、カレントスクリーンポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG1323の処理が終了すると、パン・チルト方向(Sp)マッチング処理が終了する。
【0208】
次に、図58を用いて、ステップSG1303,SG1305のズーム方向(Sp)マッチング処理の流れを説明する。ステップSG1303,SG1305のズーム方向(Sp)マッチング処理の流れは、ステップSG6のズーム方向マッチング処理の流れとほぼ同じである。異なる点は、移動の対象がカメラポーズではなくスクリーンポーズである点である。
【0209】
図59は、スクリーンポーズをズーム方向(Sp)に移動させる様子を示している。視点5900から視線中心5901に向かう視線方向5902に平行にスクリーン平面5903を移動させると、スクリーン平面5903はズーム方向(Sp)5904に移動する。つまり、スクリーンポーズをズーム方向(Sp)に移動させることは、スクリーン平面を光軸と平行に前後に移動させること、すなわち、スクリーン距離を調整することと同義である。
【0210】
ステップSG1331では、CPU34cが辺長(計測)を算出し、算出した辺長(計測)をRAM34aに記録する。ステップSG1332では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG1333では、CPU34cが辺長1(3D)を算出し、算出した辺長1(3D)をRAM34aに記録する。
【0211】
ステップSG1334では、CPU34cが、このときのスクリーンポーズをスクリーンポーズ1としてRAM34aに上書き記録する。ステップSG1335では、CPU34cが、スクリーンポーズをズーム方向(Sp)に所定値だけ移動させる。
【0212】
ステップSG1336では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG1337では、CPU34cが辺長2(3D)を算出し、算出した辺長2(3D)をRAM34aに記録する。ステップSG1338では、CPU34cが、このときのスクリーンポーズをスクリーンポーズ2としてRAM34aに上書き記録する。
【0213】
ステップSG1339では、CPU34cがズーム量を算出し、算出したズーム量をRAM34aに記録する。ズーム量は、辺長(3D)と辺長(計測)とが一致するようなスクリーンポーズのズーム方向(Sp)の移動量であり、辺長1,2(3D)と、スクリーンポーズ1,2との関係から算出される。辺は3つであるので、ズーム量も3つ算出される。
【0214】
図40に示したように、辺長(3D)とカメラポーズのズーム方向位置は線形的な比例関係にある。同様に、辺長(3D)とスクリーンポーズのズーム方向(Sp)の位置は線形的な比例関係にある。したがって、辺長(3D)と辺長(計測)とを一致させる場合にスクリーンポーズをズーム方向(Sp)に移動させる際の移動量を算出することができる。
【0215】
ステップSG1340では、CPU34cが3つのズーム量の平均値を算出し、算出した平均値をRAM34aに記録する。ステップSG1341では、CPU34cが、スクリーンポーズをズーム方向(Sp)に、ステップSG1340で算出した平均値だけ移動させる。
【0216】
ステップSG1342では、CPU34cが、このときのスクリーンポーズをカレントスクリーンポーズとしてRAM34aに上書き記録する。ここでは、カレントスクリーンポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG1342の処理が終了すると、ズーム方向(Sp)マッチング処理が終了する。
【0217】
本実施形態では、CPU34cがファインマッチング処理を実行する際、スクリーンポーズをパン・チルト方向(Sp)、ズーム方向(Sp)にのみ調整していたが、さらに以下のような調整を行っても良い。
【0218】
図60は、3Dマッチング処理において、スクリーンポーズをシフト方向(Sp)に調整した場合の視線方向とスクリーン平面との関係を示している。シフト方向(Sp)とは、スクリーン平面6000と視点6001との距離が一定のままでスクリーン平面6000が視線方向6002と垂直に移動するときの移動方向のことである。図60のように、上方向ベクトル6003に平行な上下方向6004と、右方向ベクトル6005に平行な左右方向6006がシフト方向(Sp)である。現実のカメラでは、図61のように、撮像素子30bの中心(撮像中心)が光軸6100を通らず、光軸6100と垂直方向にずれて設置された場合のズレ方向6101がシフト方向(Sp)に相当する。
【0219】
図62は、3Dマッチング処理において、スクリーンポーズをロール方向(Sp)に調整した場合の視線方向とスクリーン平面との関係を示している。ロール方向(Sp)とは、スクリーン平面6200と視点6201との距離が一定のままでスクリーン平面6200が、視線方向6202を中心に回転するときの回転方向のことである。図62のように、視線方向6202を中心とする回転方向6203がロール方向(Sp)である。現実のカメラでは、図63のように、撮像素子30bが光軸6300を中心に回転方向6301にずれて設置された場合のズレ方向がロール方向(Sp)に相当する。
【0220】
図64は、3Dマッチング処理において、スクリーンポーズをサイズ方向(Sp)に調整した場合の視線方向とスクリーン平面との関係を示している。サイズ方向(Sp)とは、スクリーン平面6400の位置が固定されたままでスクリーン平面6400の縦横のサイズが変化するときの変化方向のことである。図64のように、スクリーン平面6400のサイズが変化する方向6401がサイズ方向(Sp)である。現実のカメラでは、図65のように、撮像素子30bの撮像面の縦横のサイズが設計値と異なる場合に、スクリーンポーズをサイズ方向(Sp)に調整する必要がある。また、図示していていないが、撮像素子30bを構成する画素の縦横のサイズが設計値と異なる場合にも、スクリーンポーズをサイズ方向(Sp)に調整する必要がある。撮像素子30bの縦横のサイズが設計値と異なると、図66のように、撮影した画像に写った被検体DUTの縦横比が歪んでしまう可能性がある。
【0221】
以上のように、CPU34cがファインマッチング処理を実行する際、パン・チルト方向(Sp)、ズーム方向(Sp)に加え、これらの方向にスクリーンポーズを調整することにより、設計値に対する撮像素子のズレをより詳細に表現することができる。その結果、3Dマッチング処理の精度がさらに向上することが期待できる。しかし、用いるスクリーンポーズの調整値を増やしすぎると、3Dマッチング処理に多くの時間がかかってしまうので、ユーザが処理時間を許容できる限りにおいて、用いる調整値の数や、その調整値を変化させる範囲を変更すると良い。
【0222】
なお、本実施形態では、ユーザが計測画像および3Dオブジェクト上の参照点を指定し、その参照点に対応する参照図形に基づいて、CPU34cが3Dマッチング処理を実行していたが、以下のように、計測画像および3Dオブジェクトの画像情報に基づいて、3Dマッチング処理を実行しても良い。
【0223】
例えば、CPU34cは、3Dマッチング処理を実行する前にカメラポーズおよびスクリーンポーズを様々な状態に調整しながら、スクリーン平面に対する3Dオブジェクトの投影図(2次元画像)を複数作成し、その投影図をまとめてモデルデータとして、RAM34aに記録しておく。そして、CPU34cは、3Dマッチング処理を実行する際、計測画像と、RAM34aに記録されたモデルデータとの相関値を順次算出し、その相関値が最も高かった場合のカメラポーズおよびスクリーンポーズに基づいて、3Dオブジェクトを計測画像上に重畳表示させる。これにより、ユーザが参照点を指定しなくても、CPU34cは3Dマッチング処理を実行することが可能となる。
【0224】
本実施形態では、計測に係る一連の処理の手順および内容を規定したソフトウェア(プログラム)である3D計測ソフトに従ってCPU34cが上記の処理を行うことによって計測が行われる。図67は、CPU34cに必要な機能構成を示している。図67では、本実施形態の計測に関係する機能構成のみが示されており、他の機能構成については省略されている。CPU34cの機能構成には、撮像制御部340、指定部341、マッチング処理部342、表示制御部343、および計測部344が含まれる。
【0225】
撮像制御部340は、光源32および湾曲制御ユニット33の制御や撮像素子30bの制御を行う。指定部341は、リモコン23を介してユーザによって入力される指示に基づいて、計測画像上や3Dオブジェクトの画像上の指定された位置に対応する参照点(計測)、参照点(3D)、計測点を指定(設定)する。マッチング処理部342は、指定部341によって指定された参照点(計測)および参照点(3D)に基づいて、参照図形(計測)および参照図形(3D)を算出し、参照図形(計測)と参照図形(3D)との幾何学計算により、マッチングに必要なカメラポーズおよびスクリーンポーズの変更量を算出する。
【0226】
表示制御部343は、モニタ22に表示される画像の内容や表示状態等を制御する。特に、表示制御部343は、マッチング処理部342によって算出されたカメラポーズおよびスクリーンポーズの変更量に基づいて3Dオブジェクトの姿勢を調整することによって、計測画像と3Dオブジェクトを互いにマッチングさせた状態で表示させる。上記の説明では3Dオブジェクトのみの姿勢を調整しているが、これに限らず、計測画像のみの姿勢を調整したり、計測画像および3Dオブジェクトの姿勢を調整したりしてもよい。計測部344は、指定部341によって指定された計測点に基づいて、計測処理を行う。図46に示す機能構成の一部または全部を、計測に必要な機能を実現するためのアナログ回路やデジタル回路を配置して構成した特定のハードウェアに置き換えることも可能である。
【0227】
上述したように、本実施形態によれば、カメラの外部パラメータであるカメラポーズを調整することで、計測画像を撮像した現実のカメラの姿勢と、3Dオブジェクトを撮像した仮想的なカメラの姿勢とを近づけることができ、計測画像と3Dオブジェクトをマッチングさせることができる。さらに、カメラの内部パラメータであるスクリーンポーズを調整することで、計測画像を撮像したカメラの光学系または撮像素子の特性と、3Dオブジェクトを撮像した仮想的なカメラの光学系または撮像素子の特性とを近づけることができ、計測画像と3Dオブジェクトをより高精度にマッチングさせることができる。このため、計測精度を向上させることができる。
【0228】
また、参照図形(計測)と参照図形(3D)との幾何学計算を行い、幾何学計算の結果に基づいて、計測画像と3Dオブジェクトとの少なくとも一方の姿勢を調整することによって、マッチングに必要な処理時間を低減することができる。
【0229】
また、参照点(計測)と参照点(3D)のそれぞれの点の指定された順番に基づいて参照点(計測)と参照点(3D)とを対応付けることによって、簡易な方法で両者の対応付けが可能となり、マッチングに必要な処理時間を低減することができる。
【0230】
また、計測画像上の参照図形(計測)と、3Dオブジェクト上の参照点(計測)によって構成される3角形をスクリーン平面に投影した参照図形(3D)との幾何学計算によるマッチングを行うことによって、マッチングの精度を維持しつつ、マッチングに必要な処理時間を低減することができる。
【0231】
また、ユーザが参照点(計測)を指定する際に3Dオブジェクトの透過率が大きく設定されることによって、ユーザが計測画像を見やすくすることができ、かつ、ユーザが参照点(計測)を指定しやすくすることができる。
【0232】
また、3Dマッチング処理において、カメラの外部パラメータまたは内部パラメータの調整中は処理負荷の高い3Dオブジェクトの再表示を行わず、外部パラメータまたは内部パラメータの調整の終了時に3Dオブジェクトの再表示を行うことによって、3Dマッチング処理に必要な処理時間を低減することができる。
【0233】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【0234】
1・・・ジェットエンジン、2・・・ターニングツール、3・・・内視鏡装置、4・・・ビデオ端子ケーブル、5・・・ビデオキャプチャカード、6・・・PC、7・・・LANケーブル、10・・・タービンブレード、20・・・内視鏡挿入部、21・・・内視鏡装置本体、22,25・・・モニタ(表示部)、23・・・リモコン(入力装置)、24・・・PC本体、30a・・・撮像光学系、30b・・・撮像素子、31・・・画像信号処理装置、32・・・光源、33・・・湾曲制御ユニット、34,35・・・制御用コンピュータ、34a,35a・・・RAM、34b・・・ROM、34c,35c・・・CPU(第1の調整部、第2の調整部、計測部)、34d,35d・・・ネットワークI/F、34e・・・RS232C・・・I/F、34f・・・カードI/F、35b・・・HDD、35e・・・USB・・・I/F、340・・・撮像制御部、341・・・指定部、342・・・マッチング処理部、343・・・表示制御部、344・・・計測部

【特許請求の範囲】
【請求項1】
計測対象物の画像と、前記計測対象物に対応する物体であって予め算出された3次元形状を有する前記物体の画像とを表示する表示部と、
前記計測対象物を撮像したカメラの姿勢と、前記物体を撮像した仮想的なカメラの姿勢とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第1の調整部と、
前記計測対象物を撮像したカメラの光学系と撮像素子との少なくとも一方の特性と、前記物体を撮像した仮想的なカメラの光学系と撮像素子との少なくとも一方の特性とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第2の調整部と、
前記第1の調整部および前記第2の調整部による調整が行われた後、入力装置を介して入力される指示に基づいて指定された計測位置に対応する前記物体上の空間座標を算出し、算出した空間座標に基づいて、前記物体のサイズを算出する計測部と、
を備えたことを特徴とする画像処理装置。
【請求項2】
前記第2の調整部は、前記物体の画像が投影される平面と、前記物体を撮像した仮想的なカメラの視点及び視線方向との幾何学的な関係を示すパラメータで構成されるスクリーンポーズに基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする請求項1に記載の画像処理装置。
【請求項3】
前記スクリーンポーズは、前記物体の画像が投影される平面と、前記物体を撮像した仮想的なカメラの視点との距離を示すパラメータを含むことを特徴とする請求項2に記載の画像処理装置。
【請求項4】
前記スクリーンポーズは、前記物体の画像が投影される平面と、前記物体を撮像した仮想的なカメラの視線方向との傾きを示すパラメータを含むことを特徴とする請求項2または請求項3に記載の画像処理装置。
【請求項5】
前記第2の調整部はさらに、前記計測対象物を撮像したカメラの光学系の歪み特性を示すデータに基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方を補正することを特徴とする請求項1〜請求項4のいずれか一項に記載の画像処理装置。
【請求項6】
前記第2の調整部は、前記第1の調整部による調整が行われた後、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする請求項1〜請求項5のいずれか一項に記載の画像処理装置。
【請求項7】
前記第2の調整部は、前記第1の調整部による調整が行われた後の前記計測対象物の画像と前記物体の画像の特徴に基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整するか否かを判定することを特徴とする請求項6に記載の画像処理装置。
【請求項8】
前記第1の調整部は、前記計測対象物の画像上の第1の点を基準とする第1の図形と、前記物体の画像上の第2の点を基準とする第2の図形との幾何学計算を行った結果に基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする請求項1〜請求項7のいずれか一項に記載の画像処理装置。
【請求項9】
前記第2の調整部は、前記計測対象物の画像上の第1の点を基準とする第1の図形と、前記物体の画像上の第2の点を基準とする第2の図形との幾何学計算を行った結果に基づいて、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整することを特徴とする請求項1〜請求項8のいずれか一項に記載の画像処理装置。
【請求項10】
計測対象物の画像と、前記計測対象物に対応する物体であって予め算出された3次元形状を有する前記物体の画像とを表示部が表示するステップと、
前記計測対象物を撮像したカメラの姿勢と、前記物体を撮像した仮想的なカメラの姿勢とが近づくように、第1の調整部が前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整するステップと、
前記計測対象物を撮像したカメラの光学系と撮像素子との少なくとも一方の特性と、前記物体を撮像した仮想的なカメラの光学系と撮像素子との少なくとも一方の特性とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を第2の調整部が調整するステップと、
前記第1の調整部および前記第2の調整部による調整が行われた後、計測部が、入力装置を介して入力される指示に基づいて指定された計測位置に対応する前記物体上の空間座標を算出し、算出した空間座標に基づいて、前記物体のサイズを算出するステップと、
を備えたことを特徴とする画像処理方法。
【請求項11】
計測対象物の画像と、前記計測対象物に対応する物体であって予め算出された3次元形状を有する前記物体の画像とを表示する表示部と、
前記計測対象物を撮像したカメラの姿勢と、前記物体を撮像した仮想的なカメラの姿勢とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第1の調整部と、
前記計測対象物を撮像したカメラの光学系と撮像素子との少なくとも一方の特性と、前記物体を撮像した仮想的なカメラの光学系と撮像素子との少なくとも一方の特性とが近づくように、前記計測対象物の画像と前記物体の画像との少なくとも一方の姿勢を調整する第2の調整部と、
前記第1の調整部および前記第2の調整部による調整が行われた後、入力装置を介して入力される指示に基づいて指定された計測位置に対応する前記物体上の空間座標を算出し、算出した空間座標に基づいて、前記物体のサイズを算出する計測部と、
としてコンピュータを機能させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate

【図39】
image rotate

【図40】
image rotate

【図41】
image rotate

【図42】
image rotate

【図43】
image rotate

【図44】
image rotate

【図45】
image rotate

【図46】
image rotate

【図47】
image rotate

【図48】
image rotate

【図49】
image rotate

【図50】
image rotate

【図51】
image rotate

【図52】
image rotate

【図53】
image rotate

【図54】
image rotate

【図55】
image rotate

【図56】
image rotate

【図57】
image rotate

【図58】
image rotate

【図59】
image rotate

【図60】
image rotate

【図61】
image rotate

【図62】
image rotate

【図63】
image rotate

【図64】
image rotate

【図65】
image rotate

【図66】
image rotate

【図67】
image rotate


【公開番号】特開2013−96938(P2013−96938A)
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願番号】特願2011−242134(P2011−242134)
【出願日】平成23年11月4日(2011.11.4)
【出願人】(000000376)オリンパス株式会社 (11,466)
【Fターム(参考)】