以下、図面を参照し、本発明の実施形態を説明する。図1は、本実施形態によるブレード検査システムの構成を示している。ジェットエンジン1内には、検査対象物である複数のタービンブレード10(もしくはコンプレッサーブレード)が所定の間隔で周期的に配置されている。また、ジェットエンジン1には、タービンブレード10を回転方向Aに所定の速度で回転させるターニングツール2が接続されている。本実施形態では、タービンブレード10の画像を取り込んでいる間は常にタービンブレード10を回転させた状態にしている。
本実施形態では、タービンブレード10の画像を取得するため、内視鏡装置3(本発明の画像処理装置に対応)が用いられる。ジェットエンジン1の内部には、内視鏡装置3の内視鏡挿入部20が挿入されており、この内視鏡挿入部20により、回転しているタービンブレード10の映像が取り込まれる。また、内視鏡装置3には、タービンブレード10の3次元計測を行うための3D計測ソフトが記憶されている。
図2は内視鏡装置3の構成を示している。内視鏡装置3は、内視鏡挿入部20、内視鏡装置本体21、モニタ22、およびリモコン(リモートコントローラ)23から構成されている。内視鏡挿入部20の先端には、撮像光学系30aおよび撮像素子30bが内蔵されている。また、内視鏡装置本体21には、画像信号処理装置(CCU)31、光源32、湾曲制御ユニット33、および制御用コンピュータ34が内蔵されている。
内視鏡挿入部20において、撮像光学系30aは被写体(被検体)からの光を集光し、撮像素子30bの撮像面上に被写体像を結像する。撮像素子30bは、被写体像を光電変換して撮像信号を生成する。撮像素子30bから出力された撮像信号は画像信号処理装置31に入力される。
内視鏡装置本体21において、画像信号処理装置31は、撮像素子30bからの撮像信号をNTSC信号等の映像信号に変換して制御用コンピュータ34に供給し、さらに必要に応じてアナログビデオ出力として、外部に出力する。
光源32は、光ファイバ等を通じて内視鏡挿入部20の先端に接続されており、光を外部に照射することができる。湾曲制御ユニット33は内視鏡挿入部20の先端と接続されており、先端を上下左右に湾曲させることができる。光源32および湾曲制御ユニット33の制御は、制御用コンピュータ34によって行われる。
制御用コンピュータ34は、RAM34a、ROM34b、CPU34c、外部インターフェースとしてネットワークI/F34d、RS232C I/F34e、カード I/F34fから構成されている。RAM34aは、ソフトウェア動作に必要な画像情報等のデータを一時記憶するために使用される。ROM34bには、内視鏡装置3を制御するための一連のソフトウェア(プログラム)が記憶されており、後述する3D計測ソフトもROM34b内に記憶される。CPU34cは、ROM34bに記憶されているソフトウェアの命令コードに従って、RAM34aに記憶されたデータを用いて各種制御のための演算等を実行する。
ネットワークI/F34dは、外部PCとLANケーブルによって接続するためのインターフェースであり、外部PCに対して、画像信号処理装置31から出力された映像情報を展開することができる。RS232C I/F34eは、リモコン23と接続するためのインターフェースであり、このリモコン23をユーザが操作することによって、内視鏡装置3の各種動作を制御することができる。カード I/F34fは、記録媒体である各種メモリカード50を自由に着脱できるようになっている。メモリカード50を装着することにより、CPU34cの制御によって、メモリカード50に記憶されている画像情報等のデータを取り込み、あるいは画像情報等のデータをメモリカード50に記録することができる。
本実施形態によるブレード検査システムの構成の変形例として、図3に示す構成を用いてもよい。本変形例では、内視鏡装置3にビデオ端子ケーブル4およびビデオキャプチャカード5が接続されており、これによって、内視鏡装置3が取り込んだ映像をPC6(本発明の画像処理装置に対応)にも取り込ませることが可能となっている。PC6は、図3ではノート型PCとして描かれているが、デスクトップ型のPC等でもよい。PC6には、タービンブレード10の3次元計測を行うための3D計測ソフトが記憶されている。
さらに、図3では、PC6への映像の取り込みにビデオ端子ケーブル4およびビデオキャプチャカード5を用いているが、図4に示すようにLANケーブル7を用いてもよい。内視鏡装置3は、取り込まれた映像をLANネットワーク上に展開することのできるネットワークI/F34dを備えている。そして、LANケーブル7を通じて、PC6に映像を取りませることができる。
図5はPC6の構成を示している。PC6はPC本体24およびモニタ25から構成されている。PC本体24には、制御用コンピュータ35が内蔵されている。制御用コンピュータ35は、RAM35a、HDD(ハードディスクドライブ)35b、CPU35c、外部インターフェースとして、ネットワークI/F35d、USB I/F35eから構成されている。制御用コンピュータ35はモニタ25に接続されており、映像情報およびソフトウェアの画面等がモニタ25に表示される。
RAM35aは、ソフトウェア動作に必要な画像情報等のデータを一時記憶するために使用される。HDD35bには、内視鏡装置を制御するために一連のソフトウェアが記憶されており、3D計測ソフトもHDD35b内に記憶される。また、本実施形態では、タービンブレード10の画像を保存する保存用フォルダはHDD35b内に設定される。CPU35cは、HDD35bに記憶されているソフトウェアの命令コードに従って、RAM35aに記憶されたデータを用いて各種制御のための演算等を実行する。
ネットワークI/F35dは、内視鏡装置3とPC6をLANケーブル7によって接続するためのインターフェースであり、内視鏡装置3からLAN出力された映像情報をPC6に入力することができる。USB I/F35eは、内視鏡装置3とPC6をビデオキャプチャカード5によって接続するためのインターフェースであり、内視鏡装置3からアナログビデオ出力された映像情報をPC6に入力することができる。
図3および図4に示すブレード検査システムでは、図1に示すブレード検査システムと同様の効果を得ることができる。特に、内視鏡装置の性能がPCよりも劣っており、内視鏡装置の動作速度等が十分でない場合等に、図3および図4に示すブレード検査システムは有効である。
次に、3D計測ソフトの画面を説明する。図6は、3D計測ソフトのメインウィンドウを示している。図6に示すメインウィンドウ600は、ユーザが3D計測ソフトを起動した際にモニタ22に表示される。CPU34cは、3D計測ソフトに従って、メインウィンドウ600内の各種GUIの操作に基づく処理を行う。
メインウィンドウ600の表示は、CPU34cによる制御に従って行われる。CPU34cは、メインウィンドウ600を表示するためのグラフィック画像信号(表示信号)を生成し、モニタ22へ出力する。また、内視鏡装置3に取り込まれた映像(以下、計測画像と記載)をメインウィンドウ600上に重畳表示する場合には、CPU34cは、画像信号処理装置31から取り込んだ画像データをグラフィック画像信号に重畳する処理を行い、処理後の信号(表示信号)をモニタ22へ出力する。
また、メインウィンドウ600上のGUIの表示状態を更新する場合、CPU34cは、更新後のメインウィンドウ600に対応したグラフィック画像信号を生成し、上記と同様の処理を行う。メインウィンドウ600以外のウィンドウの表示に係る処理も上記と同様である。以下、メインウィンドウ600等を表示(更新も含む)するためにCPU34cがグラフィック画像信号を生成する処理のことを、メインウィンドウ600等を表示するための処理と記載する。
ユーザは、GUI(グラフィカルユーザインタフェース)機能を利用して、リモコン23を介してメインウィンドウ600を操作し、メインウィンドウ600に重畳表示されるカーソルCを移動させ、クリック等の指示を入力することにより、メインウィンドウ600の各種GUIの操作を行うことができる。以下、各種GUIの機能を説明する。
メインウィンドウ600の右上部には、[ファイル選択]ボックス610が配置されている。また、メインウィンドウ600の左上部には[計測画像]ボックス611が配置されている。[ファイル選択]ボックス610は、[計測画像]ボックス611に表示される計測画像の選択、および[計測画像]ボックス611に表示される3Dオブジェクトに対応したCADデータの選択を行うためのボックスである。
CADデータは、CADを利用して予め算出されたタービンブレード10の3次元形状を表すデータである。CADデータの形式には、STL(Standard Triangulated Language)形式等を用いる。3Dオブジェクトは、CADデータの内容をもとに構築されたCG物体である。[ファイル選択]ボックス610内のGUIおよび操作の詳細については、記載しない。
[計測画像]ボックス611は、計測対象物であるタービンブレード10を撮像して得られた計測画像IMGを表示し、計測画像IMG上に3DオブジェクトOBの画像を重畳表示するためのボックスである。後述するように、ユーザは[計測画像]ボックス611の操作を行うことにより、カメラポーズの変更、参照点の指定等を行う。
メインウィンドウ600の左下部には、[表示設定]ボックス620が配置されている。[表示設定]ボックス620内には、[計測画像]ボックス611に表示された3DオブジェクトOBの表示設定に関するGUIが配置されている。[表示設定]ボックス620内の各GUIの機能は以下の通りである。
[透過率]バー621は、3Dオブジェクトの表示透過率を設定するためのバーである。[透過率]バー621は水平方向(横方向)に移動(スライド)可能になっており、ユーザが[透過率]バー621を移動させることで、3Dオブジェクトの表示透過率が変化する。
例えば、透過率が大きく設定された場合、3DオブジェクトOBは透明に近い透過率で表示され、透過率が小さく設定された場合、3DオブジェクトOBは透過されずに表示される。後述するように、[計測画像]ボックス611において、ユーザが計測画像IMGに参照点を指定する際には、3DオブジェクトOBの透過率を大きく設定することで、計測画像IMGを見やすくすると良い。また、ユーザが3DオブジェクトOBに参照点を指定する際には、3DオブジェクトOBの透過率を小さく設定することで、3DオブジェクトOBを見やすくすると良い。
[表示方法]ラジオボタン622は、3DオブジェクトOBの表示方法を設定するためのラジオボタンである。[表示方法]ラジオボタン622には、「シェーディング」と「ワイヤーフレーム」の2つの設定項目がある。「シェーディング」が選択された場合、3DオブジェクトOBは、ワイヤーフレームおよび表面が塗りつぶされた状態で表示され、「ワイヤーフレーム」が選択された場合、図6のように、3DオブジェクトOBはワイヤーフレームのみの状態で表示される。
[表示方法]ラジオボタン623は、3DオブジェクトOBの表示色を設定するためのラジオボタンである。[表示方法]ラジオボタン623には、「水色」と「黄色」の2つの設定項目がある。[表示方法]ラジオボタン623の設定によって、3DオブジェクトOBの表示色を切り替えることができる。
[移動方向]ラジオボタン624は、カメラポーズの移動方向を設定するためのラジオボタンである。カメラポーズは、3DオブジェクトOBの姿勢(ポーズ)、すなわち3DオブジェクトOBをどの方向、どの位置から見ているかを示すパラメータである。言い換えると、カメラポーズは、3DオブジェクトOBを撮像した仮想的なカメラ(以下、仮想カメラと記載)の姿勢を示すパラメータである。[移動方向]ラジオボタン624には、「パン/チルト」と「ロール/ズーム」の2つの設定項目がある。「パン/チルト」が選択された場合、[計測画像]ボックス611において、ユーザがカーソルCを上下左右に移動させることで、カメラポーズをパン・チルト方向に回転させることができる。また、「ロール/ズーム」が選択された場合、同様の操作で、カメラポーズをロール・ズーム方向に回転させることができる。
[計測画像]ボックス611の下側には、[現在位置]ボックス630が配置されている。[現在位置]ボックス630は、カーソル位置における3DオブジェクトOBの表面座標をリアルタイムで表示するためのボックスである。3DオブジェクトOBの表面座標は空間座標系の座標としてmm単位で示される。[計測画像]ボックス611において、ユーザがカーソルCを移動させることで、[現在位置]ボックス630の値もリアルタイムに変更される。例えば、カーソルCが3DオブジェクトOB上に位置する場合、3DオブジェクトOBの表面座標が算出され、[現在位置]ボックス630に表示される。カーソルCが3DオブジェクトOB上に位置しない場合は、[現在位置]ボックス630に「null」と表示される。3DオブジェクトOBの表面座標の算出方法については、図21〜図24を用いて後述する。
[現在位置]ボックス630の下側には、[カメラポーズ]ボックス640が配置されている。[カメラポーズ]ボックス640は、カメラポーズをリアルタイムで表示するためのボックスである。ユーザがカメラポーズを変更することで、[カメラポーズ]ボックス640の値がアルタイムに変更される。カメラポーズは、空間座標系の座標としてmm単位で示される。
[カメラポーズ]ボックス640の右側には、[シフト位置]ボックス650が配置されている。[シフト位置]ボックス650は、[計測画像]ボックス611における3DオブジェクトOBのシフト位置を表示するためのボックスである。3DオブジェクトOBのシフト位置は、平面座標系の座標としてpixel単位で示される。
3DオブジェクトOBは[計測画像]ボックス611の中央部に表示されており、カメラポーズが変更されても表示位置は変化しない。しかし、計測画像IMGに写った被検体は、必ずしも画像の中央部に位置しているわけではない。そのため、計測画像IMGと3Dオブジェクト3Dとをマッチングさせる処理である3Dマッチング処理の実行後、3DオブジェクトOBは[計測画像]ボックス611の中央部ではなく、計測画像に写った被検体の上に位置しているべきである。
上記のシフト位置は、[計測画像]ボックス611の中央部からの3DオブジェクトOBの相対位置を示している。以下、平面座標系におけるシフト位置の移動方向をシフト方向と記載する。ユーザが手動で任意にシフト位置を変更することはできない。シフト位置は、3Dマッチング処理の実行後に、CPU34cが算出するものである。
[ファイル選択]ボックス610の下側には、[マッチング/計測]ボックス660が配置されている。[マッチング/計測]ボックス660内には、3Dマッチング処理および計測に関するGUIが配置されている。[マッチング/計測]ボックス660内の各GUIの機能は以下の通りである。
[カメラポーズ]ボタン661aは、カメラポーズを変更するためのボタンである。[カメラポーズ]ボタン661aが押下された後、[計測画像]ボックス611aにおいて、ユーザがカーソルCを上下左右に移動させることで、カメラポーズが変更可能となる。また、[カメラポーズ]ボタン661aの右側には、[リセット]ボタン661bが配置されており、[リセット]ボタン661bが押下されると、カメラポーズが初期値に設定される。
[参照点(計測)]ボタン662aは、計測画像IMGの参照点(計測)を指定するためのボタンである。参照点(計測)とは、CPU34cが3Dマッチング処理を実行する際の基準となる計測画像IMG上の点のことである。[参照点(計測)]ボタン662aが押下された後、[計測画像]ボックス611において、ユーザがカーソルCを移動させて、指定したい位置でクリック等を行うことで、計測画像IMGに写った被検体に対して参照点(計測)を指定することができる。参照点(計測)は、平面座標系の座標としてpixel単位で示される。また、[参照点(計測)]ボタン662aが押下されると、3DオブジェクトOBの表示透過率が自動的に大きく設定され、計測画像IMGが見やすい状態となる。また、[参照点(計測)]ボタン662aの右側には、[クリア]ボタン662bが配置されており、[クリア]ボタン662bが押下されると、既に指定された参照点(計測)が全てクリアされ、指定前の状態となる。
[参照点(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)が全てクリアされ、指定前の状態となる。
[3Dマッチング]ボタン664は、3Dマッチング処理を実行するためのボタンである。[3Dマッチング]ボタン664が押下された後、ユーザが指定した2組の参照点(参照点(計測)と参照点(3D))に基づいて、CPU34cは3Dマッチング処理を実行する。このとき、CPU34cは、2組の参照点の位置がそれぞれ一致するように、3Dマッチング処理を行うことになる。3Dマッチング処理の結果、計測画像IMG内の被検体と3DオブジェクトOBとがほぼ一致するように表示され、計測画像IMG内の被検体と3DオブジェクトOBが計測に適した状態となる。
[計測]ボタン665aは、計測処理を行うためのボタンである。 [計測]ボタン665aが押下された後、後述するように計測ウィンドウが表示され、3DオブジェクトOBに対して計測処理を行うことができる。
メインウィンドウ600の右下部には、[終了]ボタン680が配置されている。[終了]ボタン680は、3D計測ソフトを終了するためのボタンである。[終了]ボタン680が押下されると、全てのソフト動作が終了し、メインウィンドウ600が閉じる(非表示となる)。
次に、図7を用いて、3Dオブジェクトとカメラポーズとの関係について説明する。図7に示すように、実空間に対応する仮想的な空間上に3DオブジェクトOB1および視点700がある。3DオブジェクトOB1の位置は固定されているが、視点700の位置はユーザによって自由に変更される。3DオブジェクトOB1の重心位置には視線中心701があり、視点700から視線方向702に伸びる直線は、常にこの視線中心701を向いている。視線中心701の位置は固定されている。視点700は、3DオブジェクトOB1を撮像する仮想カメラの位置に相当し、視線方向702は仮想カメラの撮像方向(光軸方向)に相当する。
3DオブジェクトOB1と視点700との間には、矩形状の仮想的な平面であるスクリーン平面703がある。スクリーン平面703は[計測画像]ボックス611に相当するものである。スクリーン平面703の縦方向および横方向のサイズは固定値である。3DオブジェクトOB1をスクリーン平面703に投影した投影像が、[計測画像]ボックス611に表示される3DオブジェクトOBである。
スクリーン平面703は、視線方向702と常に垂直であり、視点700から視線方向702に伸びる直線は、常にスクリーン平面703の中心704を通る。視点700からスクリーン平面703の中心704までの距離706は固定値であるが、視点700から視線中心701までの距離は、ユーザによって自由に変更される。
スクリーン平面703の向いている方向は、上方向ベクトル705によって示される。この上方向ベクトル705は、スクリーン平面703と平行であり、スクリーン平面703の上方向がどの方向かを表す単位ベクトルである。
図7に示した項目のうち、カメラポーズを構成するパラメータは、視点位置、視線中心位置、上方向ベクトルの3つである。以下では、図8〜図10を用いて、カメラポーズを変更したときの3Dオブジェクトとカメラポーズとの関係について説明する。
図8(a)は、カメラポーズをパン・チルト方向に変更した場合の3Dオブジェクトとカメラポーズとの関係を示している。パン方向とは、視点800から視線中心801までの距離を固定したまま、視点800を上方向ベクトル802と垂直に移動させた場合の方向(パン方向803)である。チルト方向とは、視点800から視線中心801までの距離を固定したまま、視点800を上方向ベクトル802と平行に移動させた場合の方向(チルト方向804)である。図8(a)のように、カメラポーズをパン・チルト方向に変更すると、図8(b)のように、スクリーン平面805に投影される3DオブジェクトOBは、上下左右の各方向に回転することがわかる。
図9(a)は、カメラポーズをロール方向に変更した場合の3Dオブジェクトとカメラポーズとの関係を示している。ロール方向とは、視点900の位置を固定したまま、視点900から視点中心901に向かう視点方向902の軸を中心に、スクリーン平面903を回転させた場合の方向(ロール方向904)である。図9(a)のように、カメラポーズをロール方向に変更すると、図9(b)のように、スクリーン平面903に投影される3DオブジェクトOBは、スクリーン平面903の中心を軸として回転することがわかる。
図10(a)は、カメラポーズをズーム方向に変更した場合の3Dオブジェクトとカメラポーズとの関係を示している。ズーム方向とは、上方向ベクトル1000を固定したまま、視点1001を視線方向1002と平行に移動させた場合の方向(ズーム方向1003)である。図10(a)のように、カメラポーズをズーム方向に変更すると、図10(b)のように、スクリーン平面1004に投影される3DオブジェクトOBは、拡大・縮小することがわかる。
上記の説明の通り、カメラポーズが変更されると、スクリーン平面の位置・方向が変化する。それに伴い、スクリーン平面に投影される3Dオブジェクトの表示も変化し、その結果、[計測画像]ボックス611に表示される3Dオブジェクトの表示も変化することになる。CPU34cは、ユーザによってリモコン23を介して入力されるカメラポーズの変更指示を検出し、その変更指示に応じて、3Dオブジェクトを[計測画像]ボックス611に表示するための処理を行う。
次に、3D計測ソフトの動作の流れを説明する。以下では、メインウィンドウ600における全てのGUIに関する動作ではなく、一部のGUIに関する動作のみ説明するものとする。具体的には、[計測画像]ボックス611、[カメラポーズ]ボタン661a、[参照点(計測)]ボタン662a、[参照点(3D)]ボタン663a、[3Dマッチング]ボタン664、[計測]ボタン665a、 [終了]ボタン680に関する動作は説明するが、その他のGUIに関する動作の説明は行わない。
図11は3D計測ソフトの動作の流れを示している。ステップSAでは、CPU34cが3D計測ソフトを起動する。具体的には、ユーザがリモコン23を介して入力した起動指示に基づいて、CPU34cは、ROM34bに格納されている3D計測ソフトをRAM34aに読み込み、3D計測ソフトに従った動作を開始する。ステップSBでは、CPU34cが、メインウィンドウ600を表示するための処理を行う。
ステップSCでは、CPU34cが初期化処理を行う。初期化処理とは、メインウィンドウ600内の各種GUIの初期状態を設定したり、RAM34aに記録された各種データの初期値を設定したりする処理である。初期化処理の詳細については、後述する。
ステップSDでは、CPU34cがカメラポーズ設定処理を行う。カメラポーズ設定処理とは、ユーザが入力した、カメラポーズを変更する指示に基づいて、[計測画像]ボックス611の計測画像内の被検体と3Dオブジェクトとを大まかにマッチングさせる処理である。カメラポーズ設定処理の詳細については、後述する。
ステップSEでは、CPU34cが参照点(計測)指定処理を行う。参照点(計測)指定処理とは、ユーザが入力した、[計測画像]ボックス611の計測画像に写った被検体上の位置を指定する指示に基づいて、参照点を指定(設定)する処理である。参照点(計測)指定処理の詳細については、後述する。
ステップSFでは、CPU34cが参照点(3D)指定処理を行う。参照点(3D)指定処理とは、ユーザが入力した、[計測画像]ボックス611の3Dオブジェクト上の位置を指定する指示に基づいて、参照点を指定(設定)する処理である。参照点(3D)指定処理の詳細については、後述する。
ステップSGでは、CPU34cが3Dマッチング処理を行う。3Dマッチング処理とは、ユーザが指定した2組の参照点(参照点(計測)・参照点(3D))に基づいて、[計測画像]ボックス611に表示された計測画像と3Dオブジェクトとをマッチングさせる処理である。3Dマッチング処理の詳細については、後述する。
ステップSHでは、CPU34cが計測処理を行う。計測処理とは、ユーザが入力した、[計測画像]ボックス611の3Dオブジェクト上の位置を指定する指示に基づいて、参照点を指定(設定)し、指定した参照点に基づいて、被検体のサイズを算出する処理である。計測処理の詳細については、後述する。
ステップSIでは、CPU34cが、ユーザによって[終了]ボタン680が押下されたかどうかを確認する。ユーザが[終了]ボタン680を押下した場合、処理はステップSJに移行する。また、ユーザが[終了]ボタン680を押下しなかった場合、処理はステップSDに移行する。ステップSJでは、CPU34cがメインウィンドウ600を非表示とし、3D計測ソフトの動作を終了する。
次に、図12を用いて、ステップSCの初期化処理の動作の流れを説明する。ステップSC1では、CPU34cが、メモリカード50に記録された所定の計測画像ファイルおよびCADデータをRAM34aに読み込む。ステップSC2では、CPU34cが、読み込まれたCADデータに基づいて、カメラポーズ(初期値)を算出する。
カメラポーズのうち、視点位置については、図13のように、CPU34cは空間座標系の原点の座標(x,y,z)=(0,0,0)を初期値(視点1300)とする。カメラポーズのうち、視線中心位置については、図13のように、CPU34cは、CADデータにおける全ての空間座標の重心位置を算出し、その座標を初期値(視点中心1301)とする。この視線中心位置は、CADデータごとに固有の値であり、この後、カメラポーズが変更されても、この値が変化することはない。カメラポーズのうち、上方向ベクトルについては、図13のように、CPU34cは、視点1300と視線中心1301を結ぶ直線と直交する単位ベクトルのうち、スクリーン平面の縦辺に平行な単位ベクトルを初期値(上方向ベクトル1302)とする。
ステップSC3では、CPU34cが、ステップSC2で算出したカメラポーズ(初期値)をカレントカメラポーズとしてRAM34aに記録する。カレントカメラポーズとは、現在設定されているカメラポーズのことであり、3Dオブジェクトは、このカレントカメラポーズに基づいて表示されることになる。
ステップSC4では、CPU34cが、図14のように[計測画像]ボックス611に計測画像IMGを表示し、さらにその上に3DオブジェクトOBを所定の透過率で重畳表示するための処理を実行する。このとき、3DオブジェクトOBは、算出されたカメラポーズ(初期値)に基づいて、スクリーン平面に投影された平面図として表示される。ステップSC4の処理が終了すると、初期化処理が終了する。
次に、図15を用いて、ステップSDのカメラポーズ設定処理の流れを説明する。ステップSD1では、CPU34cが、[カメラポーズ]ボタン661aが既に押下された状態(ステップSD3の処理が既に行われた状態)であるかどうかを確認する。[カメラポーズ]ボタン661aが押下された状態である場合、処理はステップSD4に移行し、[カメラポーズ]ボタン661aが押下された状態でない場合、処理はステップSD2に移行する。
ステップSD2では、CPU34cが、[カメラポーズ]ボタン661aがユーザによって押下されたかどうかを確認する。[カメラポーズ]ボタン661aが押下された場合、処理はステップSD3に移行し、[カメラポーズ]ボタン661aが押下されていない場合、カメラポーズ設定処理が終了する。
ステップSD3では、CPU34cが、図16(a)のように[カメラポーズ]ボタン661aを強調表示するための処理を行う。[カメラポーズ]ボタン661aを強調表示するのは、現在、カメラポーズが変更可能であることをユーザに通知するためである。
ステップSD4では、CPU34cが、図16(b)のように、[計測画像]ボックス611において、ユーザがリモコン23を操作してカーソルCによりクリック等を行いながらカーソルCを上下左右に移動させる操作(ドラッグ操作)を検出し、カーソルCの操作を検出した結果に基づいてカメラポーズを変更する。このとき、ユーザは、計測画像に写った被検体DUTと3DオブジェクトOBとが大まかにマッチングするように、カメラポーズを変更する。カメラポーズは、前述したパン・チルト・ロール・ズームの方向に変更可能である。また、このとき、CPU34cは、リモコン23を介して入力されるカーソルCの操作指示を検出し、その操作指示に基づいて、変更後のカメラポーズを算出する。
ステップSD5では、CPU34cが変更後のカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ステップSD6では、CPU34cが、カレントカメラポーズに基づいて、3Dオブジェクトを再表示するための処理を行う。これによって、図16(c)のように、カメラポーズが変更された3DオブジェクトOBが[計測画像]ボックス611に表示される。ステップSD6の処理が終了すると、カメラポーズ設定処理が終了する。
次に、図17を用いて、ステップSEの参照点(計測)指定処理の流れを説明する。ステップSE1では、CPU34cが、[参照点(計測)]ボタン662aが既に押下された状態(ステップSE3,SE4の処理が既に行われた状態)であるかどうかを確認する。[参照点(計測)]ボタン662aが押下された状態である場合、処理はステップSE5に移行し、[参照点(計測)]ボタン662aが押下された状態でない場合、処理はステップSE2に移行する。
ステップSE2では、CPU34cが、[参照点(計測)]ボタン662aがユーザによって押下されたかどうかを確認する。[参照点(計測)]ボタン662aが押下された場合、処理はステップSE3に移行し、押下されていない場合、参照点(計測)指定処理が終了する。
ステップSE3では、CPU34cが、図18(a)のように、[参照点(計測)]ボタン662aを強調表示するための処理を行う。[参照点(計測)]ボタン662aを強調表示するのは、現在、計測画像に対して参照点が指定可能であることをユーザに通知するためである。
ステップSE4では、CPU34cが、図18(b)のように、3DオブジェクトOBの透過率を変更し、変更後の透過率で3DオブジェクトOBを再表示するための処理を行う。ここで設定される透過率は大きな値であり、3DオブジェクトOBは透明に近い状態となり、計測画像が見やすい状態となる。なお、特に図示していないが、既に指定した参照点(3D)が存在する場合は、3DオブジェクトOBが一旦非表示となる。これも、計測画像を見やすい状態とするためである。
ステップSE5では、CPU34cが、[計測画像]ボックス611において、計測画像に写った被検体DUTに対して参照点(計測)を指定するためにユーザがリモコン23を操作してカーソルCによりクリック等を行う操作を検出し、カーソルCの操作を検出した結果に基づいて、指定された参照点の座標を算出する。このとき算出される参照点(計測)の座標は、計測画像における平面座標(pixel単位)である。
ステップSE6では、CPU34cが、指定された参照点(計測)の座標をRAM34aに記録する。ステップSE7では、CPU34cが、指定された参照点(計測)を計測画像上に重畳表示するための処理を行う。これによって、図18(c)のように、参照点(計測)R1,R2,R3が計測画像上に重畳表示される。ステップSE7の処理が終了すると、参照点(計測)指定処理が終了する。
次に、図19を用いて、ステップSFの参照点(3D)指定処理の流れを説明する。ステップSF1では、CPU34cが、[参照点(3D)]ボタン663aが既に押下された状態(ステップSF3,SF4が既に行われた状態)であるかどうかを確認する。[参照点(3D)]ボタン663aが押下された状態である場合、処理はステップSF5に移行し、[参照点(3D)]ボタン663aが押下されていない状態でない場合、処理はステップSF2に移行する。
ステップSF2では、CPU34cが、[参照点(3D)]ボタン663aがユーザによって押下されたかどうかを確認する。[参照点(3D)]ボタン663aが押下された場合、処理はステップSF3に移行し、[参照点(3D)]ボタン663aが押下されていない場合、参照点(3D)指定処理が終了する。
ステップSF3では、CPU34cが、図20(a)のように、[参照点(3D)]ボタン663aを強調表示するための処理を行う。[参照点(3D)]ボタン663aを強調表示するのは、現在、3Dオブジェクトに対して参照点が指定可能であることをユーザに通知するためである。
ステップSF4では、CPU34cが、図20(b)のように、3DオブジェクトOBの透過率を変更し、変更後の透過率で3DオブジェクトOBを再表示するための処理を行う。ここで設定される透過率は小さな値であり、3DオブジェクトOBが見やすい状態となる。このとき、特に図示していないが、既に指定した参照点(計測)が存在する場合は、計測画像が一旦非表示となる。これも、3DオブジェクトOBを見やすい状態とするためである。
ステップSF5では、CPU34cが、[計測画像]ボックス611において、計測画像に写った被検体DUTに対して参照点(3D)を指定するためにユーザがリモコン23を操作してカーソルCによりクリック等を行う操作を検出し、カーソルCの操作を検出した結果に基づいて、指定された参照点の座標を算出する。このとき算出される参照点(3D)の座標は、3Dオブジェクト表面における空間座標(mm単位)であり、CPU34cは、まず指定された参照点の平面座標(pixel単位)を算出し、続いて、算出した平面座標から空間座標(mm単位)を算出する。
ユーザが指定する参照点(3D)と、既に指定された参照点(計測)とが、それぞれ対応付けられていなくてはならない。本実施形態では、CPU34cは、ユーザが参照点(計測)を指定した順番と、参照点(3D)を指定した順番とに基づいて、参照点(3D)と参照点(計測)とを対応付けるものとする。より具体的には、CPU34cは、参照点(計測)のうち最初に指定された点と参照点(3D)のうち最初に指定された点とを対応付け、参照点(計測)のうち2番目に指定された点と参照点(3D)のうち2番目に指定された点とを対応付け、・・・、参照点(計測)のうちn番目に指定された点と参照点(3D)のうちn番目に指定された点とを対応付ける。上記の方法は一例であり、これに限るわけではない。
図18(c)に示すように、被検体DUTの左上の参照点(計測)R1、右上の参照点(計測)R2、右下の参照点(計測)R3が指定されている。参照点(計測)の指定が終了した後、ユーザは、被検体DUT上の参照点(計測)に対応する3DオブジェクトOB上の参照点(3D)を、参照点(計測)を指定したときと同じ順番で指定する。図20(c)に示すように、被検体DUT上の参照点(計測)R1,R2,R3に対応する3Dオブジェクト上の位置に参照点(計測)R1’,R2’,R3’が指定されている。
ステップSF6では、CPU34cが、指定された参照点(3D)の座標をRAM34aに記録する。ステップSF7では、CPU34cが、指定された参照点(3D)を3Dオブジェクト上に重畳表示するための処理を行う。これによって、図20(c)のように、参照点(3D)R1’,R2’,R3’が3DオブジェクトOB上に重畳表示される。ステップSF7の処理が終了すると、参照点(3D)指定処理が終了する。
なお、CPU34cが、指定された参照点(3D)の座標をCADデータに記録してもよいし、CADデータと紐付けされた(関連付けられた)別のファイルに記録してもよい。これによって、再度ステップSC1にて同じCADデータを読み出した場合、ステップSF1〜ステップSF5の処理を省略することができる。また、参照点(3D)は必ずしもステップSFにおいて指定されるべきものではなく、予め内視鏡装置3またはPC6等によって、CADデータに記録されていてもよいし、CADデータと紐付けされた(関連付けられた)別のファイルに記録されていてもよい。
次に、図21〜図24を用いて、指定された参照点(3D)の、3Dオブジェクト表面における空間座標(3次元座標)の算出方法について説明する。図21は、3次元空間における3Dオブジェクトの一部と視点Eとの関係を示している。
3Dオブジェクトは、複数の三角形の空間平面から構成されている。視点Eから3Dオブジェクトの重心点Gへ向かう方向を視線方向とする。視点Eと3Dオブジェクトとの間には、視線方向と垂直に交わるスクリーン平面SCが設定されている。
ユーザが[計測画像]ボックス611における3Dオブジェクト上の参照点(3D)を指定すると、CPU34cは、図22のように、スクリーン平面SC上に参照点Sを設定する。参照点Sと視点Eとを通る空間直線を直線Lとする。そして、CPU34cは、3Dオブジェクトを構成する複数の三角形の中から、直線Lと交差する全ての三角形を検索する。直線と空間三角形とが交差するかどうかを判定する方法として、例えばTomas Mollerの交差判定法を用いることが可能である。この例では、図23のように、三角形T1,T2が、直線Lと交差する三角形であると判定される。
そして、図24のように、CPU34cは、直線Lと三角形T1,T2との交点を算出し、算出したそれぞれの交点を交点F1,F2とする。ここでは、3Dオブジェクト表面における空間座標を算出したいので、CPU34cは、交点F1,F2のうち、より視点Eに近い方を選択する。この場合、CPU34cは、交点F1の空間座標を、3Dオブジェクト表面における空間座標として算出する。上記では、直線Lと交差すると判定された三角形を2つのみとしたが、3Dオブジェクトの形状や視線方向によっては、より多くの三角形が交差すると判定される場合もある。その場合も、直線Lと三角形との交点をそれぞれ求め、求めた交点の中で、最も視点Eに近い交点を選択することになる。
上記のようにして、参照点(3D)の空間座標を算出することができる。後述する計測処理で指定される参照点の空間座標も上記と同様にして算出することができる。
次に、図25を用いて、ステップSGの3Dマッチング処理の流れを説明する。ステップSG1では、CPU34cが、[3Dマッチング]ボタン664がユーザによって押下されたかどうかを確認する。[3Dマッチング]ボタン664が押下された場合、処理はステップSG2に移行し、[3Dマッチング]ボタン664が押下されていない場合、3Dマッチング処理が終了する。
ステップSG2では、CPU34cが、全ての参照点が既に指定済みであるどうかを確認する。具体的には、CPU34cは、参照点(計測)および参照点(3D)が、それぞれ3点ずつ、既に指定済みであるかどうかを確認する。全ての参照点が指定済みの場合、処理はステップSG3に移行し、参照点が指定済みでない場合、3Dマッチング処理が終了する。ステップSG3では、CPU34cが、RAM34aに記録された全ての参照点の座標を読み込む。
ステップSG4では、CPU34cが、指定された参照点の座標に基づいて、パン・チルト方向のマッチング処理を行う。パン・チルト方向のマッチング処理の詳細については、後述する。ステップSG5では、CPU34cが、指定された参照点の座標に基づいて、ロール方向のマッチング処理を行う。ロール方向のマッチング処理の詳細については、後述する。
ステップSG6では、CPU34cが、指定された参照点の座標に基づいて、ズーム方向のマッチング処理を行う。ズーム方向のマッチング処理の詳細については、後述する。ステップSG7では、CPU34cが、指定された参照点の座標に基づいて、シフト方向のマッチング処理を行う。シフト方向のマッチング処理の詳細については、後述する。
ステップSG8では、CPU34cが、[計測画像]ボックス611において、3Dオブジェクトを再表示するための処理を行う。このとき、3Dオブジェクトは、ステップSG4〜SG7において最終的に算出されたカメラポーズおよびシフト位置に基づいて、姿勢および位置が調整されて表示される。図26は、マッチング処理後の計測画像に写った被検体と3Dオブジェクトを示している。図26のように、計測画像に写った被検体と3Dオブジェクトとが、ほぼ一致していること、すなわち、両者がうまくマッチングしていることがわかる。ステップSG8の処理が終了すると、3Dマッチング処理が終了する。上記の3Dマッチング処理を行うによって、被検体を撮像したカメラ(内視鏡装置3)の姿勢に近づくように、3Dオブジェクトを撮像した仮想カメラの姿勢を調整することができる。すなわち、計測画像中の被検体の姿勢に近づくように3Dオブジェクトの姿勢を調整することができ、被検体と3Dオブジェクトをマッチングさせることができる。
次に、図27を用いて、ステップSG4のパン・チルト方向のマッチング処理の流れを説明する。パン・チルト方向のマッチング処理の目的は、参照点(計測)によって構成される3角形と、参照点(3D)をスクリーン平面に降ろした投影点によって構成される3角形とが最も相似に近くなるカメラポーズを見つける、ということである。これらの3角形が相似に近い場合、計測画像に写った被検体が撮像されたときの視線のパン・チルト方向と、3Dオブジェクトを観察する視線のパン・チルト方向とが、ほぼ一致しているということができる。
以下、図28(a)のように、参照点(3D)R1’〜R3’をスクリーン平面3100に降ろした投影点Rp1’〜Rp3’を投影点(3D)と記載する。さらに、図28(b)のように、参照点(計測)R1〜R3によって構成される3角形3102を参照図形(計測)と記載し、図28(a)のように、投影点(3D)Rp1’〜Rp3’によって構成される3角形3101を参照図形(3D)と記載する。
ステップSG401では、CPU34cが頂点角(計測)を算出し、算出した頂点角(計測)をRAM34aに記録する。頂点角(計測)とは、図29(a)のように、参照図形(計測)3200の3つの頂点R1〜R3の角度A1〜A3である。
ステップSG402では、CPU34cが、カメラポーズをパン・チルト方向にそれぞれ−31deg回転させる。ステップSG403〜SG407において繰り返し処理が行われるが、これは、図29(b)のように、カメラポーズをパン・チルト方向に回転させながら、頂点角(3D)を順次算出するためである。頂点角(3D)とは、図29(b)のように、参照図形(3D)3201の3つの投影点(3D)Rp1’〜Rp3’の角度A1’〜A3’である。
前述したように、参照点(計測)と参照点(3D)は、各参照点が指定された順番によって対応付けられており、角度A1〜A3と角度A1’〜A3も、この順番によって対応付けられている。図29では、角度A1と角度A1’が対応付けられ、角度A2と角度A2’が対応付けられ、角度A3と角度A3’が対応付けられている。
ステップSG403では、CPU34cが、カメラポーズをパン方向に+1deg回転させる。そして、ステップSG403〜SG407では、カメラポーズのパン方向の回転角度が+30degとなるまでCPU34cが繰り返し処理を行う。CPU34cは、カメラポーズをパン方向に−30degから+30degとなるまで+1degずつ回転させるので、結果としてステップSG403〜SG407の一連の処理を61回繰り返すことになる。
ステップSG404では、CPU34cが、カメラポーズをチルト方向に+1deg回転させる。そして、ステップSG404〜SG407では、カメラポーズのチルト方向の回転角度が+30degとなるまでCPU34cが繰り返し処理を行う。CPU34cは、カメラポーズをチルト方向に−30degから+30degとなるまで+1degずつ回転させるので、結果としてステップSG404〜SG407の処理を61回繰り返すことになる。なお、ステップSG403〜SG407の繰り返し処理において、カメラポーズを−30degから+30degとなるまで回転させているが、カメラポーズを回転させる範囲は必ずしもこの範囲である必要はない。
ステップSDのカメラポーズ設定処理において、ユーザがカメラポーズを変更する際、計測画像に写った被検体と3Dオブジェクトとをどの程度までマッチングさせるかによって、ステップSG403〜SG407の繰り返し処理において、カメラポーズを回転させるのに必要な範囲が変わることになる。範囲が広い場合、ユーザは大まかなマッチングさえ行えば良いが、その代わり、3Dマッチングの処理時間が長くなる。範囲が狭い場合、3Dマッチングの処理時間が短くて済むが、その代わり、ユーザはある程度詳細にマッチングを行う必要がある。
ステップSG405では、CPU34cが、現在のパン・チルト方向の回転角度をRAM34aに記録する。図30は、RAM34aに記録される回転角度を示している。ステップSG405では、CPU34cは、回転角度をRAM34aに上書き記録するのではなく、カメラポーズをパン・チルト方向に回転するたびに、図30(a)のように、RAM34aに用意されたデータリストに現在のパン・チルト方向の回転角度を1行ずつ追加記録していく。このデータリストには、後述するように、パン・チルト方向の回転角度と関連付けて、頂点角(3D)等の様々なデータを記録することができる。
ステップSG406では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG407では、CPU34cが頂点角(3D)を算出し、算出した頂点角(3D)をRAM34aに記録する。このとき、CPU34cは、図30(b)のように、頂点角(3D)をパン・チルト方向の回転角度と関連付けて、データリストに1行ずつ追加記録していく。
ステップSG403〜SG407の繰り返し処理が終了すると、処理はステップSG408に移行する。この時点でのデータリストは、図30(c)のようになり、61×61行分のデータで構成されている。ステップSG408では、CPU34cがカメラポーズをパン・チルト方向にそれぞれ−30deg回転させる。ステップSG403〜SG407の繰り返し処理が終了した時点で、パン・チルト方向の回転角度はそれぞれ+30degであるので、ここでは、−30deg回転させることによって、カメラポーズを元の状態に戻すことになる。
ステップ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は、図31(a)のように、頂点角の差をパン・チルト方向の回転角度と関連付けて、データリストに追加記録する。
ステップSG410では、CPU34cが差D1〜D3の平均値を算出する。さらに、CPU34cは、図31(b)のように、平均値をパン・チルト方向の回転角度と関連付けて、データリストに追加記録する。
ステップSG411では、CPU34cが平均値の最小値をデータリストから検索する。図32は、データリストにおいて、0.5が最小値として検索された様子を示している。
ステップSG412では、CPU34cが、平均値が最小となる場合のパン・チルト方向の回転角度をデータリストから読み込む。具体的には、CPU34cは、図32のように、データリストから、最小の平均値に関連付けられたパン・チルト方向の回転角度を読み込む。
ステップSG413では、CPU34cが、カメラポーズをパン・チルト方向に、ステップSG412で読み込まれた回転角度だけ回転させる。このカメラポーズで3Dオブジェクトを表示した場合、図29(c),(d)のように、回転後の頂点角(計測)と頂点角(3D)とが、良く一致しており、参照図形(計測)と参照図形(3D)とが相似に近いことがわかる。
ステップSG414では、CPU34cが、このときのカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ここでは、カレントカメラポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG414の処理が終了すると、パン・チルト方向のマッチング処理が終了する。
次に、図33を用いて、ステップSG5のロール方向のマッチング処理の流れを説明する。ロール方向のマッチング処理の目的は、参照図形(計測)と参照図形(3D)の回転方向のアングルが最も一致するカメラポーズを見つける、ということである。それぞれの参照図形の回転方向のアングルが近い場合、計測画像に写った被検体を観察する視線のロール方向の回転角度と、3Dオブジェクトを観察する視線のロール方向の回転角度とが、ほぼ一致しているということができる。
ステップSG501では、CPU34cが相対角(計測)を算出し、算出した相対角(計測)をRAM34aに記録する。相対角(計測)とは、図34(a)のように、計測画像において上下方向に伸びる直線3700と、参照図形(計測)の3つの辺との間の角度Ar1〜Ar3である。このときの相対角(計測)は、直線3700から辺への右回り方向の角度である。
ステップSG502では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG503では、CPU34cが相対角(3D)を算出し、算出した相対角(3D)をRAM34aに記録する。相対角(3D)とは、図34(b)のように、スクリーン平面において上下方向に伸びる直線3701と参照図形(3D)の3つの辺との間の角度Ar1’〜Ar3’である。スクリーン平面は、計測画像が表示される[計測画像]ボックス611に相当するため、直線3700と直線3701の方向は一致する。また、このときの相対角(3D)は、直線3701から辺への右回り方向の角度である。
ステップ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)
ステップSG505では、CPU34cが差Dr1〜Dr3の平均値を算出し、算出した平均値をRAM34aに記録する。ステップSG506では、CPU34cがカメラポーズをロール方向に、ステップSG505で算出した平均値だけ回転させる。このカメラポーズで3Dオブジェクトを表示した場合、図34(c),(d)のように、回転後の相対角(計測)と相対角(3D)とが良く一致していることがわかる。
ステップSG507では、CPU34cが、このときのカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ここでは、カレントカメラポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG507の処理が終了すると、ロール方向のマッチング処理が終了する。
次に、図35を用いて、ステップSG6のズーム方向のマッチング処理の流れを説明する。ズーム方向のマッチング処理の目的は、参照図形(計測)と参照図形(3D)のサイズが最も一致するカメラポーズを見つける、ということである。それぞれの参照図形のサイズが近い場合、計測画像に写った被検体を観察する視線のズーム方向の位置と、3Dオブジェクトを観察する視線のズーム方向の位置とが、ほぼ一致しているということができる。
ステップSG601では、CPU34cが辺長(計測)を算出し、算出した辺長(計測)をRAM34aに記録する。辺長(計測)とは、図36(a)のように、参照点(計測)R1〜R3によって構成される3角形の3つの辺の長さL1〜L3である。
ステップSG602では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG603では、CPU34cが辺長1(3D)を算出し、算出した辺長1(3D)をRAM34aに記録する。辺長1(3D)とは、図36(b)のように、参照図形(3D)の3つの辺の長さL1’〜L3’である。
ステップSG604では、CPU34cが、このときのカメラポーズをカメラポーズ1としてRAM34aに上書き記録する。ステップSG605では、CPU34cが、図36(b)のように、カメラポーズをズーム方向に所定値だけ移動させる。
ステップSG606では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG607では、CPU34cが辺長2(3D)を算出し、算出した辺長2(3D)をRAM34aに記録する。辺長2(3D)とは、図36(b)のように、カメラポーズをズーム方向に所定値だけ移動させた後の、参照図形(3D)の3つの辺の長さLz1’〜Lz3’である。ステップSG608では、CPU34cが、このときのカメラポーズをカメラポーズ2としてRAM34aに上書き記録する。
ステップSG609では、CPU34cがズーム量を算出し、算出したズーム量をRAM34aに記録する。ズーム量は、辺長(3D)と辺長(計測)とが一致するようなカメラポーズのズーム方向の移動量であり、辺長1,2(3D)と、カメラポーズ1,2との関係から算出される。辺は3つであるので、ズーム量も3つ算出される。
図37は、辺長(3D)とカメラポーズのズーム方向位置との関係を示している。図37のグラフ4000が示すように、両者は線形的な比例関係にある。グラフ4000を用いることで、辺長(3D)と辺長(計測)とを一致させる場合にカメラポーズをズーム方向に移動させる際の移動量を算出することができる。
ステップSG610では、CPU34cが3つのズーム量の平均値を算出し、算出した平均値をRAM34aに記録する。ステップSG611では、CPU34cが、カメラポーズをズーム方向に、ステップSG611で算出した平均値だけ移動させる。このカメラポーズで3Dオブジェクトを表示した場合、図36(c),(d)のように、移動後の辺長(計測)と辺長(3D)とが、良く一致していることがわかる。
ステップSG612では、CPU34cが、このときのカメラポーズをカレントカメラポーズとしてRAM34aに上書き記録する。ここでは、カレントカメラポーズに基づく3Dオブジェクトの再表示は行わない。ステップSG612の処理が終了すると、ズーム方向のマッチング処理が終了する。
次に、図38を用いて、ステップSG7のシフト方向のマッチング処理の流れを説明する。シフト方向のマッチング処理の目的は、[計測画像]ボックス611における、計測画像に写った被検体と3Dオブジェクトとが一致するように、シフト方向に3Dオブジェクトを移動させる、ということである。本処理は、3Dオブジェクトのシフト位置を決定するものであるため、カメラポーズの算出は行わない。
ステップSG701では、CPU34cが重心点(計測)を算出し、算出した重心点(計測)をRAM34aに記録する。重心点(計測)とは、図39(a)のように、参照点(計測)R1〜R3によって構成される3角形の重心点Gである。
ステップSG702では、CPU34cが投影点(3D)を算出し、算出した投影点(3D)をRAM34aに記録する。ステップSG703では、CPU34cが重心点(3D)を算出し、算出した重心点(3D)をRAM34aに記録する。重心点(3D)とは、図39(a)のように、投影点(3D)Rp1’〜Rp3’によって構成される3角形の重心点G’である。
ステップSG704では、CPU34cがシフト量を算出し、算出したシフト量をRAM34aに記録する。シフト量とは、重心点(計測)の、重心点(3D)との相対位置(平面座標系、pixel単位)である。ステップSG705では、CPU34cが、3Dオブジェクトをシフト方向に、ステップSG704で算出したシフト量だけ移動させる。このカメラポーズで3Dオブジェクトを表示した場合、図39(b)のように、重心点(計測)と重心点(3D)とが、良く一致していることがわかる。ステップSG705の処理が終了すると、シフト方向のマッチング処理が終了する。
本実施形態では、3Dマッチング処理を実行する際、ユーザが指定する平易な形状の参照図形に基づく簡単な幾何学計算のみを実行すれば良く、処理時間を大幅に短縮することができる。さらに、3Dオブジェクトの再表示は、3Dマッチング処理終了後の1度のみで良い。
次に、本実施形態の計測処理について説明する。まず、ベンド(曲がり)の計測の流れを説明する。ステップSGの3Dマッチング処理の終了後、[計測画像]ボックス611には、図40に示すような被検体DUTおよび3DオブジェクトOBが表示されている。ここで、計測画像に写った被検体DUTは、角が折れ曲がった状態となっている。すなわち、被検体DUTはベンド(曲がり)の欠陥をもつ状態である。ステップSHの計測処理では、CPU34cは、ユーザが入力した、[計測画像]ボックス611の3DオブジェクトOB上の位置を指定する指示に基づいて、参照点を指定(設定)し、指定した参照点に基づいて、3DオブジェクトOBを変形し、参照点に基づいた計測を行う。これによって、被検体に生じた欠陥の形状およびサイズをユーザが確認することができる。
図41を用いて、ステップSHの計測処理の流れを説明する。ステップSH1では、CPU34cが、[計測]ボタン665aが既に押下された状態(ステップSH3が既に行われた状態)であるかどうかを確認する。[計測]ボタン665aが押下された状態である場合、処理はステップSH5に移行し、[計測]ボタン665aが押下された状態でない場合、処理はステップSH2に移行する。
ステップSH2では、CPU34cが、[計測]ボタン665aがユーザによって押下されたかどうかを確認する。[計測]ボタン665aが押下された場合、処理はステップSH3に移行し、[計測]ボタン665aが押下されていない場合、計測処理が終了する。
ステップSH3では、CPU34cが、[計測]ボタン665aを強調表示するための処理を行う。[計測]ボタン665aを強調表示するのは、現在、3Dオブジェクトに対して参照点が指定可能であることをユーザに通知するためである。
ステップSH4では、CPU34cが、図42のようにメインウィンドウ600の上に計測ウィンドウ4200を表示する。このとき表示される計測ウィンドウ4200はモードレスウィンドウであり、ユーザはメインウィンドウ600と計測ウィンドウ4200との両方を操作可能な状態にある。さらに、計測ウィンドウ4200は、メインウィンドウ600より常に上位(手前側)に重畳表示された状態にある。
ここで、図42を用いて、計測ウィンドウ4200上に配置された各種GUIの機能を説明する。計測ウィンドウ4200の上部には、[設定]ボックス4210が配置され、計測ウィンドウ4200の下部には、[結果]ボックス4220が配置されている。[設定]ボックス4210の内部には、計測処理の設定に関するGUIが配置され、[結果]ボックス4220の内部には、計測結果に関するGUIが配置されている。
[設定]ボックス4210の内部には、[欠陥]コンボボックス4211、[クリア]ボタン4212、[ポーズ]ボタン4213、[リセット]ボタン4214が配置されている。[欠陥]コンボボックス4211は、ユーザが計測したい欠陥の種類を選択するボックスであり、「ベンド(曲がり)」、「クラック(欠け)」、「デント(陥没)」の3種類を選択できる。[ポーズ]ボタン4213は、[計測画像]ボックス611に表示されている変形後の3DオブジェクトOBのカメラポーズを変更可能な状態に移行するためのボタンである。
[クリア]ボタン4212は、[計測画像]ボックス611において、3DオブジェクトOBに対して既に指定された参照点をクリアするためのボタンである。[リセット]ボタン4214は、[計測画像]ボックス611において、[ポーズ]ボタン4213の押下後に変更されたカメラポーズを、[ポーズ]ボタン4213の押下前の元のカメラポーズに戻すためのボタンである。[クリア]ボタン4212、[リセット]ボタン4214が押下された際にCPU34cが行う処理に関しては、詳細な説明は行わない。
[結果]ボックス4220の内部には、欠陥の計測結果である「幅」、「面積」、「角度」をそれぞれ表示するテキストボックス4221,4222,4223が配置されている。ただし、図42は、[欠陥]コンボボックス4211において「ベンド(曲がり)」が選択されている場合の計測ウィンドウ4200の状態を示しており、[欠陥]コンボボックス4211において他の欠陥が選択されている場合には、その欠陥に応じた計測結果が表示されることになる。
計測ウィンドウ4200の下部には[閉じる]ボタン4224が配置されている。[閉じる]ボタン4224は、計測処理を終了するためのボタンであり、[閉じる]ボタン4224が押下されると、計測ウィンドウ4200が非表示となる。
ステップSH5〜SH6の処理は、計測画像における被検体DUTに発生している欠陥の種類を選択するための処理である。ステップSH5では、CPU34cが、ユーザによって[欠陥]コンボボックス4211上で指定される情報に基づいて欠陥の種類を選択する。計測画像に写った被検体DUTがベンド(曲がり)の欠陥をもっている場合、ユーザは[欠陥]コンボボックス4211において「ベンド(曲がり)」を選択することになる。
ステップSH6では、ステップSH5において選択された欠陥の種類に応じて、CPU34cが、[結果]ボックス4220の表示を切り替える。欠陥の種類として「ベンド(曲がり)」が選択されている場合、[結果]ボックス4220には、図42のように、欠陥の「幅」、「面積」、「角度」をそれぞれ表示するテキストボックス4221,4222,4223が表示される。
ステップSH7では、CPU34cが3Dオブジェクト変形処理を行う。3Dオブジェクト変形処理とは、ユーザが指定する参照点に基づいて3DオブジェクトOBを変形する処理である。ここで一旦、図41の計測処理の流れから離れ、図43を用いて、3Dオブジェクト変形処理の流れを説明する。
図43は、[欠陥]コンボボックス4211において「ベンド(曲がり)」が選択されている場合の3Dオブジェクト変形処理の流れを示している。ステップSH701では、[計測画像]ボックス611において、図44(a)のように、ユーザが3DオブジェクトOBに対してカーソルCにより参照点1,2(P1,P2)を指定すると、CPU34cが、カーソルCの位置における平面座標に基づいて、指定された参照点1,2の空間座標を算出し、3DオブジェクトOB上に参照点1,2を●印で表示するための処理を行う。参照点1,2は、3DオブジェクトOBを変形させる際の基準点(第1の基準点)となる。ユーザは、被検体DUTにおけるベンド部の両端に位置する3DオブジェクトOB上の空間点を、参照点1,2として指定する。
ステップSH702では、CPU34cが、指定された参照点1と参照点2を結ぶ空間直線を、基準線として算出する。さらに、ステップSH702では、CPU34cが、[計測画像]ボックス611において、図44(a)のように、基準線L1を直線で表示するための処理を行う。
ステップSH703では、[計測画像]ボックス611において、図44(b)のように、ユーザが3DオブジェクトOBに対してカーソルCにより参照点3(P3)を指定すると、CPU34cが、カーソルCの位置における平面座標に基づいて、指定された参照点3の空間座標を算出し、3DオブジェクトOB上に参照点3を●印で表示するための処理を行う。参照点3は、3DオブジェクトOBを変形させる際の基準点(第2の基準点)となる。ユーザは、3DオブジェクトOBの頂点(ブレードの頂点)を、参照点3として指定する。
ステップSH704では、CPU34cが、指定された参照点1と参照点3を結ぶ空間直線および参照点2と参照点3を結ぶ空間直線を、輪郭線として算出する。さらに、ステップSH704では、CPU34cが、[計測画像]ボックス611において、図44(b)のように、輪郭線L2,L3を直線で表示するための処理を行う。
ステップSH705では、CPU34cが構成点を確定する。構成点とは、3Dオブジェクトを構成する空間点のうち、後述する回転移動の対象となる空間点の集まりのことである。ここで、構成点として確定されるのは、図45(a)のように、[計測画像]ボックス611において、基準線および輪郭線によって囲まれた3角形の内部に位置する、3DオブジェクトOBを構成する空間点4500である。
ステップSH706では、CPU34cが、[計測画像]ボックス611において、ユーザによってポイントが指定されたかどうかを確認する。ここでは、CPU34cは、ポイントが指定されたかどうかによって、3DオブジェクトOBの変形が完了したかどうかを確認している。
後述するように、ユーザがカーソルCを移動させると、カーソルCの移動に応じて、参照点3が回転移動する。回転移動した参照点3の位置が、計測画像の被検体DUTにおけるベンド部の頂点の位置と一致した場合に、ユーザはポイント(第3の基準点)を指定する。ポイントが指定された場合、処理はステップSH711に移行し、ポイントが指定されていない場合、処理はステップSH707に移行する。
ステップSH707では、CPU34cが、[計測画像]ボックス611において、ユーザによってリモコン23を介して入力されるカーソルCの移動指示を検出し、その移動指示に基づいて、カーソルCの位置および移動量を算出する。ステップSH708では、CPU34cが、カーソルCの移動量に応じて、回転角度を算出する。
ここで、カーソルCの移動量とは、図45(b)のように、カーソルCが参照点3の初期位置から基準線L1に近づく(カーソルCが方向D1に移動する)につれて+方向に増加し、基準線L1から遠ざかる(カーソルCが方向D2に移動する)につれて−方向に減少するような値と考えれば良い。回転角度は、このカーソルCの初期位置からの移動量に比例する角度値として定義される。ユーザは、カーソルCをどこに移動させるかによって、参照点3および構成点をどの程度回転させるかを決定することができる。
ステップSH709では、CPU34cが、基準線L1を回転軸として、ステップS708で算出した回転角度分だけ、参照点3を回転移動させ、回転移動後の参照点3の空間座標を算出する。さらに、ステップSH709では、CPU34cが、[計測画像]ボックス611において、回転移動後の参照点3を再表示する。回転移動処理の詳細については、後述する。
ステップSH710では、CPU34cが、ステップSH709で回転移動した参照点3の空間座標に基づいて、参照点1と参照点3および参照点2と参照点3を結ぶ2本の空間直線を、輪郭線として算出する。さらに、ステップSH710では、CPU34cが、[計測画像]ボックス611において、輪郭線を再表示する。
このとき、図46〜図47のように、[計測画像]ボックス611において、カーソルCが矢印Ar1で示されるように移動することに対応して、参照点3が矢印Ar2で示されるように回転移動し、回転移動後の参照点3と、その参照点3に基づいて算出された輪郭線L2,L3とが再表示されていることがわかる。
図48は、参照点1,2,3、基準線、および輪郭線を3DオブジェクトOBの右側面から見た状態を示している。図48の左側が画面手前側であり、右側が画面奥側である。カーソルCが、基準線L1に近づく方向に移動する場合、矢印Ar3で示されるように参照点3は画面手前側に回転移動することになる。なお、カーソルCが基準線L1から遠ざかる方向に移動する場合、矢印Ar4で示されるように参照点3は画面奥側に回転移動することになる。
ステップSH711では、CPU34cが、[計測画像]ボックス611において、既に表示されている参照点および基準線を非表示とする。ステップSH712では、CPU34cが、基準線を回転軸として、構成点を回転移動させる処理(回転移動処理)を行う。回転移動処理により、図49(a)のように、構成点が移動する。回転移動処理の詳細については、後述する。
ステップSH713では、CPU34cが、回転移動した構成点に基づいて、[計測画像]ボックス611において、図49(b)のように、3DオブジェクトOBを再表示する。このとき、基準線を軸に、3DオブジェクトOBの角(ブレードの角)が、画面手前側に折れ曲がるように変形されていることがわかる。なお、図示していないが、カーソルCの移動位置を調整することで、3Dオブジェクトの角が画面奥側に折れ曲がるように変形させることもできる。
ステップSH714では、[結果]ボックス4220において、CPU34cが、参照点1,2、および移動後の参照点3に基づいて、計測結果を算出し、算出した計測結果を表示する。ベンドの計測では、ベンド部の幅、面積、角度が算出される。ベンド部の幅は、基準線L1の長さ(参照点1−参照点2間の空間距離)である。ベンド部の面積は、基準線L1および輪郭線L2,L3で囲まれた空間3角形の面積である。ベンド部の角度は、ステップSH708で算出された回転角度(折れ曲がり角度)である。算出されたベンド部の幅、面積、角度はそれぞれテキストボックス4221,4222,4223に表示される。ステップSH714の処理が終了すると、計測処理は終了する。
次に、ステップSH712において実行される回転移動処理の詳細を説明する。以下では、基準線L1を回転軸として、ある空間点Sを回転させる場合の空間点Sの移動後の座標の計算方法について説明する。
参照点1,2の空間座標をそれぞれ(Px1,Py1,Pz1)、(Px2,Py2,Pz2)とすると、基準線L1は以下の(7)式で表される。
基準線L1の空間長さ(参照点1−参照点2間の空間距離)をLとすると、空間長さは以下の(8)式で表される。
参照点1から参照点2へ伸びる方向の、基準線L1の単位方向ベクトルをn=(nx,ny,nz)とすると、単位方向ベクトルは以下の(9)式で表される。
基準線L1を回転軸として、空間点Sを回転させる場合、回転前および回転後の空間点Sの座標をそれぞれ(x,y,z)、(x’,y’,z’)とすると、回転前と回転後の空間点Sの座標の関係は以下の(10)式で表される。
(10)式が示す関係は、図50のように、単位方向ベクトルnを正方向として、右回り(右ねじ方向R1)に角度θだけ空間点Sを回転させた場合の関係である。この角度θは、ステップSH706でポイントが指定される直前にカーソルCの移動量に基づいてステップSH708で算出された回転角度である。ステップSH712においては、上記のように回転移動された空間点Sのように、参照点3および構成点が回転移動される。
次に、図41を再度参照して、計測処理の流れを説明する。ステップSH8〜SH11の処理は、カメラポーズの変更および欠陥の確認を行うための処理である。ステップSH8では、CPU34cが、[設定]ボックス4210において、ユーザによってリモコン23を介して入力される[ポーズ]ボタン4213の押下を検出する。[ポーズ]ボタン4213が押下されると、[計測画像]ボックス611において、変形後の3DオブジェクトOBのカメラポーズを変更可能な状態となる。
ステップSH9では、CPU34cが、[計測画像]ボックス611において、変形後の3DオブジェクトOBの透過率を変更し、変更後の透過率で3DオブジェクトOBを再表示するための処理を行う。このとき、3DオブジェクトOBがより見やすいように、透過率が低く設定されることが望ましい。
ステップSH10では、CPU34cが、 [計測画像]ボックス611において、ユーザがリモコン23を操作してカーソルCによりクリック等を行いながらカーソルCを上下左右に移動させる操作(ドラッグ操作)を検出し、カーソルCの操作を検出した結果に基づいて、変形後の3DオブジェクトOBのカメラポーズを変更する。ステップSH11では、CPU34cが、変形後の3DオブジェクトOBを再表示するための処理を行う。
図51(a)は、ステップSH10でカメラポーズが変更される前の3DオブジェクトOBを示している。ステップSH7における3Dオブジェクト変形処理によって、計測画像の被検体DUTにおける欠陥(ベンド部)が3DオブジェクトOB上で再現されているが、1つのカメラポーズに対応する3DオブジェクトOBを観察しただけでは、ベンド部の形状が必ずしもわからない場合がある。
図51(b)は、ステップSH10でカメラポーズが変更された後の3DオブジェクトOBを示している。このように、ユーザがカメラポーズを変更することで、変形後の3DオブジェクトOBのベンド部の形状をより確認しやすい状態にすることができる。すなわち、ユーザは、3DオブジェクトOBのベンド部の形状を詳細に確認することができる。
計測画像のみでは、ユーザは被検体DUTを一方向からしか観察できないため、被検体DUTに形成された欠陥の状態を詳細に把握することはできない。しかし、ユーザが欠陥の状態に合わせて3DオブジェクトOBを変形させ、さらに欠陥を様々な角度から観察することで、ユーザは欠陥の形状を視覚的に把握でき、かつ得られる欠陥の情報量が格段に増えることになる。なお、図41には図示していないが、[ポーズ]ボタン4213以外の計測ウィンドウ4200内のGUIが操作されない限り、ユーザは変形後の3DオブジェクトOBのカメラポーズを何度でも変更することができる。すなわちステップSH10〜SH11の処理を順次繰り返すことができる。
ステップSH12〜SH14の処理は、計測処理を終了するための処理である。ステップSH12では、CPU34cが、計測ウィンドウ4200において、ユーザによってリモコン23を介して入力される[閉じる]ボタン4224の押下を検出する。[閉じる]ボタン4224が押下されると、処理はステップSH13に移行する。
ステップSH13では、[計測画像]ボックス611において、CPU34cが、3DオブジェクトOBを変形前の形状(計測ウィンドウ4200が開かれた時点での3DオブジェクトOBの形状)に戻し、再表示するための処理を行う。ステップSH14では、CPU34cが計測ウィンドウ4200を非表示とする。ステップSH14の処理が終了すると、計測処理は終了する。
次に、ステップSH5において、ユーザが、[欠陥]コンボボックス4211の欠陥の種類として、「クラック(欠け)」を選択した場合の計測処理について説明する。ステップSGの3Dマッチング処理の終了後、[計測画像]ボックス611には、図52に示すような被検体DUTおよび3DオブジェクトOBが表示されている。ここで、計測画像に写った被検体DUTは、辺が欠けた状態となっている。すなわち、被検体DUTはクラック(欠け)の欠陥をもつ状態である。
計測処理の全体の流れは、図41に示した計測処理の流れと同様である。ただし、計測画像に写った被検体DUTがクラック(欠け)の欠陥をもっている場合、ステップSH5では、ユーザは[欠陥]コンボボックス4211において「クラック(欠け)」を選択することになる。また、ステップSH6では、欠陥の種類として「クラック(欠け)」が選択されている場合、[結果]ボックス4220には、欠陥の「幅」、「深さ」、「面積」をそれぞれ表示するテキストボックスが表示される。
図53は、[欠陥]コンボボックス4211において「クラック(欠け)」が選択されている場合の3Dオブジェクト変形処理の流れを示している。ステップSH721では、[計測画像]ボックス611において、図54(a)のように、ユーザが3DオブジェクトOBに対してカーソルCにより参照点1,2(P1,P2)を指定すると、CPU34cが、カーソルCの位置における平面座標に基づいて、指定された参照点1,2の空間座標を算出し、3DオブジェクトOB上に参照点1,2を●印で表示するための処理を行う。参照点1,2は、3DオブジェクトOBを変形させる際の基準点(第1の基準点)となる。ユーザは、被検体DUTにおけるクラック部の両端に位置する3DオブジェクトOB上の空間点を、参照点1,2として指定する。
ステップSH722では、CPU34cが、指定された参照点1と参照点2を結ぶ空間直線を、基準線として算出する。さらに、ステップSH722では、CPU34cが、[計測画像]ボックス611において、図54(a)のように、基準線L1を直線で表示するための処理を行う。
ステップSH723では、[計測画像]ボックス611において、図54(b)のように、ユーザが3DオブジェクトOBに対してカーソルCにより参照点3(P3)を指定すると、CPU34cが、カーソルCの位置における平面座標に基づいて、指定された参照点3の空間座標を算出し、3DオブジェクトOB上に参照点3を●印で表示するための処理を行う。参照点3は、3DオブジェクトOBを変形させる際の基準点(第2の基準点)となる。ユーザは、参照点1,2の中間に位置する、基準線L1上の点を、参照点3として指定する。
ステップSH724では、CPU34cが、指定された参照点1,3,2を結ぶ空間曲線を、輪郭線として算出する。さらに、ステップSH724では、CPU34cが、[計測画像]ボックス611において、図54(b)のように、輪郭線L2を曲線で表示するための処理を行う。このとき算出される輪郭線として、参照点1,3,2を結ぶスプライン補間曲線等を用いる。
ステップSH725では、CPU34cが、[計測画像]ボックス611において、ユーザによってポイントが指定されたかどうかを確認する。ここでは、CPU34cは、ポイントが指定されたかどうかによって、3DオブジェクトOBの変形が完了したかどうかを確認している。
後述するように、ユーザがカーソルCを移動させると、カーソルCの移動に応じて、参照点3が移動する。移動した参照点3の位置が、計測画像の被検体DUTにおけるクラック部の輪郭の位置と一致した場合に、ユーザはポイント(第3の基準点)を指定する。ポイントが指定された場合、処理はステップSH729に移行し、ポイントが指定されていない場合、処理はステップSH726に移行する。
ステップSH726では、CPU34cが、[計測画像]ボックス611において、ユーザによってリモコン23を介して入力されるカーソルCの移動指示を検出し、その移動指示に基づいて、カーソルCの位置および移動量を算出する。
ステップSH727では、CPU34cが、[計測画像]ボックス611において、現在のカーソルCの位置と同じ位置に参照点3を移動させ、移動後の参照点3の空間座標を算出する。さらに、ステップSH727では、CPU34cが、[計測画像]ボックス611において、移動後の参照点3を再表示する。
ステップSH728では、CPU34cが、ステップSH727で移動した参照点3の空間座標に基づいて、参照点1,3,2を結ぶ空間曲線を、輪郭線として算出する。さらに、ステップSH728では、CPU34cが、[計測画像]ボックス611において、輪郭線を再表示する。輪郭線は、参照点3の位置に応じて、弓なりに湾曲して変形する。
このとき、図55〜図56のように、[計測画像]ボックス611において、カーソルCの移動に対応して、参照点3が矢印Ar5で示されるように移動し、移動後の参照点3と、その参照点3に基づいて算出された輪郭線L2とが再表示されていることがわかる。
ステップSH729では、CPU34cが構成点を確定する。ここで、構成点として確定されるのは、図57(a)のように、[計測画像]ボックス611において、基準線および輪郭線によって囲まれた図形の内部に位置する、3DオブジェクトOBを構成する空間点5700である。
ステップSH730では、CPU34cが、[計測画像]ボックス611において、既に表示されている参照点および基準線を非表示とする。ステップSH731では、CPU34cが、図57(b)のように全ての構成点を輪郭線側に移動させる処理を行う。
ステップSH732では、CPU34cが、移動した構成点に基づいて、[計測画像]ボックス611において、図58のように、3DオブジェクトOBを再表示する。このとき、基準線を軸に、3DオブジェクトOBの辺(ブレードの辺)が、画面左側に欠けるように変形されていることがわかる。なお、図示していないが、カーソルCの移動位置を調整することで、3Dオブジェクトの辺が画面右側に突起するように変形させることもできる。
ステップSH733では、[結果]ボックス4220において、CPU34cが、参照点1,2、および移動後の参照点3に基づいて、計測結果を算出し、算出した計測結果を表示する。クラックの計測では、クラック部の幅、深さ、面積が算出される。クラック部の幅は、基準線L1の長さ(参照点1−参照点2間の空間距離)である。クラック部の深さは、参照点3から基準線L1に降ろした垂線の空間長さである。クラック部の面積は、基準線L1と輪郭線L2で囲まれた空間平面の面積である。算出されたクラック部の幅、深さ、面積は、それぞれに対応したテキストボックスに表示される。ステップSH733の処理が終了すると、計測処理は終了する。
図59(a)は、ステップSH10でカメラポーズが変更される前の3DオブジェクトOBを示している。ステップSH7における3Dオブジェクト変形処理によって、計測画像の被検体DUTにおける欠陥(クラック部)が3DオブジェクトOB上で再現されているが、1つのカメラポーズに対応する3DオブジェクトOBを観察しただけでは、クラック部の形状が必ずしもわからない場合がある。
図59(b)は、ステップSH10でカメラポーズが変更された後の3DオブジェクトOBを示している。このように、ユーザがカメラポーズを変更することで、変形後の3DオブジェクトOBのクラック部の形状をより確認しやすい状態にすることができる。すなわち、ユーザは、3DオブジェクトOBのクラック部の形状を詳細に確認することができる。
次に、ステップSH5において、ユーザが、[欠陥]コンボボックス4211の欠陥の種類として、「デント(陥没)」を選択した場合の計測処理について説明する。ステップSGの3Dマッチング処理の終了後、[計測画像]ボックス611には、図60に示すような被検体DUTおよび3DオブジェクトOBが表示されている。ここで、計測画像に写った被検体DUTは、表面が陥没した状態となっている。すなわち、被検体DUTはデント(陥没)の欠陥をもつ状態である。
計測処理の全体の流れは、図41に示した計測処理の流れと同様である。ただし、計測画像に写った被検体DUTがデント(陥没)の欠陥をもっている場合、ステップSH5では、ユーザは[欠陥]コンボボックス4211において「デント(陥没)」を選択することになる。また、ステップSH6では、欠陥の種類として「デント(陥没)」が選択されている場合、[結果]ボックス4220には、欠陥の「幅」、「深さ」をそれぞれ表示するテキストボックスが表示される。
[欠陥]コンボボックス4211において「デント(陥没)」が選択されている場合の3Dオブジェクト変形処理の流れは、図53に示した3Dオブジェクト変形処理の流れと同様である。以下、図53を用いて、[欠陥]コンボボックス4211において「デント(陥没)」が選択されている場合の3Dオブジェクト変形処理の流れを説明する。
ステップSH721では、[計測画像]ボックス611において、図61(a)のように、ユーザが3DオブジェクトOBに対してカーソルCにより参照点1,2(P1,P2)を指定すると、CPU34cが、カーソルCの位置における平面座標に基づいて、指定された参照点1,2の空間座標を算出し、3DオブジェクトOB上に参照点1,2を●印で表示するための処理を行う。参照点1,2は、3DオブジェクトOBを変形させる際の基準点(第1の基準点)となる。ユーザは、被検体DUTにおけるデント部の両端に位置する3DオブジェクトOB上の空間点を、参照点1,2として指定する。
ステップSH722では、CPU34cが、指定された参照点1と参照点2を結ぶ空間直線を、基準線として算出する。さらに、ステップSH722では、CPU34cが、[計測画像]ボックス611において、図61(a)のように、基準線L1を直線で表示するための処理を行う。
ステップSH723では、[計測画像]ボックス611において、図61(b)のように、ユーザが3DオブジェクトOBに対してカーソルCにより参照点3(P3)を指定すると、CPU34cが、カーソルCの位置における平面座標に基づいて、指定された参照点3の空間座標を算出し、3DオブジェクトOB上に参照点3を●印で表示するための処理を行う。参照点3は、3DオブジェクトOBを変形させる際の基準点(第2の基準点)となる。ユーザは、参照点1,2の中間に位置する、基準線L1上の点を、参照点3として指定する。
ステップSH724では、CPU34cが、指定された参照点1,3,2を結ぶ空間曲線を、輪郭線として算出する。さらに、ステップSH724では、CPU34cが、[計測画像]ボックス611において、図61(b)のように、輪郭線L2を曲線で表示するための処理を行う。このとき算出される輪郭線として、参照点1,3,2を結ぶスプライン補間曲線等を用いる。
ステップSH725では、CPU34cが、[計測画像]ボックス611において、ユーザによってポイントが指定されたかどうかを確認する。ここでは、CPU34cは、ポイントが指定されたかどうかによって、3DオブジェクトOBの変形が完了したかどうかを確認している。
後述するように、ユーザがカーソルCを移動させると、カーソルCの移動に応じて、参照点3が移動する。移動した参照点3の位置が、計測画像の被検体DUTにおけるデント部の奥行き方向の輪郭(凹み)の位置と一致した場合に、ユーザはポイント(第3の基準点)を指定する。ポイントが指定された場合、処理はステップSH729に移行し、ポイントが指定されていない場合、処理はステップSH726に移行する。
ステップSH726では、CPU34cが、[計測画像]ボックス611において、ユーザによってリモコン23を介して入力されるカーソルCの移動指示を検出し、その移動指示に基づいて、カーソルCの位置および移動量を算出する。
ステップSH727では、CPU34cが、[計測画像]ボックス611において、現在のカーソルCの位置と同じ位置に参照点3を移動させ、移動後の参照点3の空間座標を算出する。さらに、ステップSH727では、CPU34cが、[計測画像]ボックス611において、移動後の参照点3を再表示する。
ステップSH728では、CPU34cが、ステップSH727で移動した参照点3の空間座標に基づいて、参照点1,3,2を結ぶ空間曲線を、輪郭線として算出する。さらに、ステップSH728では、CPU34cが、[計測画像]ボックス611において、輪郭線を再表示する。輪郭線は、参照点3の位置に応じて、弓なりに湾曲して変形する。
このとき、図62のように、[計測画像]ボックス611において、カーソルCの移動に対応して、参照点3が矢印Ar6で示されるように移動し、移動後の参照点3と、その参照点3に基づいて算出された輪郭線L2とが再表示されていることがわかる。
ステップSH729では、CPU34cが構成点を確定する。ここで、構成点として確定されるのは、図63(a)のように、[計測画像]ボックス611において、参照点1,2を直径とする円6300の内部に位置する、3DオブジェクトOBを構成する空間点6310である。
ステップSH730では、CPU34cが、[計測画像]ボックス611において、既に表示されている参照点および基準線を非表示とする。ステップSH731では、CPU34cが、図63(b)のように全ての構成点を移動させる処理を行う。このとき、各構成点が形成する形状が輪郭線L2の形状に合うように、各構成点が画面奥側に移動する。
ステップSH732では、CPU34cが、移動した構成点に基づいて、[計測画像]ボックス611において、図64のように、3DオブジェクトOBを再表示する。このとき、基準線を軸に、3DオブジェクトOBの表面(ブレードの表面)が、画面奥側に陥没するように変形されていることがわかる。なお、図示していないが、カーソルCの移動位置を調整することで、3Dオブジェクトの表面が画面手前側に突起するように変形させることもできる。
ステップSH733では、[結果]ボックス4220において、CPU34cが、参照点1,2、および移動後の参照点3に基づいて、計測結果を算出し、算出した計測結果を表示する。デントの計測では、デント部の幅、深さが算出される。デント部の幅は、基準線L1の長さ(参照点1−参照点2間の空間距離)である。デント部の深さは、変形後の3DオブジェクトOBにおけるデント部の底から基準線L1に降ろした垂線の空間長さである。算出されたデント部の幅、深さは、それぞれに対応したテキストボックスに表示される。ステップSH733の処理が終了すると、計測処理は終了する。
図65(a)は、ステップSH10でカメラポーズが変更される前の3DオブジェクトOBを示している。ステップSH7における3Dオブジェクト変形処理によって、計測画像の被検体DUTにおける欠陥(デント部)が3DオブジェクトOB上で再現されているが、1つのカメラポーズに対応する3DオブジェクトOBを観察しただけでは、デント部の形状が必ずしもわからない場合がある。
図65(b)は、ステップSH10でカメラポーズが変更された後の3DオブジェクトOBを示している。このように、ユーザがカメラポーズを変更することで、変形後の3DオブジェクトOBのデント部の形状をより確認しやすい状態にすることができる。すなわち、ユーザは、3DオブジェクトOBのデント部の形状を詳細に確認することができる。
本実施形態では、計測に係る一連の処理の手順および内容を規定したソフトウェア(プログラム)である3D計測ソフトに従ってCPU34cが上記の処理を行うことによって計測が行われる。図66は、CPU34cに必要な機能構成を示している。図66では、本実施形態の計測に関係する機能構成のみが示されており、他の機能構成については省略されている。CPU34cの機能構成には、撮像制御部340、指定部341、マッチング処理部342、表示制御部343、変形処理部344、および計測部345が含まれる。
撮像制御部340は、光源32および湾曲制御ユニット33の制御や撮像素子30bの制御を行う。指定部341は、リモコン23を介してユーザによって入力される指示に基づいて、計測画像上や3Dオブジェクトの画像上の指定された位置に対応する参照点(計測)、参照点(3D)、3Dオブジェクト変形処理時の参照点を指定(設定)する。マッチング処理部342は、指定部341によって指定された参照点(計測)および参照点(3D)に基づいて、参照図形(計測)および参照図形(3D)を算出し、参照図形(計測)と参照図形(3D)との幾何学計算により、マッチングに必要なカメラポーズの変更量を算出する。
表示制御部343は、モニタ22に表示される画像の内容や表示状態等を制御する。特に、表示制御部343は、マッチング処理部342によって算出されたカメラポーズの変更量に基づいて3Dオブジェクトの姿勢を調整することによって、計測画像と3Dオブジェクトを互いにマッチングさせた状態で表示させる。上記の説明では3Dオブジェクトのみの姿勢を調整しているが、これに限らず、被検体を含む計測画像の姿勢を調整したり、計測画像および3Dオブジェクトの姿勢を調整したりしてもよい。また、表示制御部343は、3Dオブジェクト変形処理によって変形された3Dオブジェクトの姿勢を、リモコン23を介してユーザによって入力されるカメラポーズの変更指示に基づいて調整する。
変形処理部344は、指定部341によって指定された参照点に基づいて、3Dオブジェクトを変形する処理を行う。計測部345は、指定部341によって指定された参照点に基づいて、ベンド部の幅、面積、角度、クラック部の幅、深さ、面積、デント部の幅、深さを算出する。なお、本実施形態では、3Dオブジェクト変形処理において3Dオブジェクトの変形の基準となる参照点に基づいて欠陥の計測を行っているが、3Dオブジェクト変形処理によって変形された3Dオブジェクト上でユーザによって任意に指定された参照点に基づいて欠陥の計測(例えば指定された2点の参照点間の空間距離の計測)を行ってもよい。図46に示す機能構成の一部または全部を、計測に必要な機能を実現するためのアナログ回路やデジタル回路を配置して構成した特定のハードウェアに置き換えることも可能である。
上述したように、本実施形態では、[計測画像]ボックス611において、観察対象物である被検体を含む計測画像の姿勢と、CG物体である3Dオブジェクトの姿勢とが近づくように計測画像と3Dオブジェクトとの少なくとも一方の姿勢(カメラポーズ)が調整された後、3Dオブジェクトが変形され、さらにユーザによる指示に応じて3Dオブジェクトの姿勢(カメラポーズ)が変更される。これによって、ユーザが変形後の3Dオブジェクトを様々な角度から観察することが可能となるので、欠陥の状態の視覚的な把握が容易となる。また、変形後の3Dオブジェクトに対して計測を行うことで、欠陥のサイズに関する詳細な情報を得ることができる。
また、参照点(計測)と参照点(3D)のそれぞれの点の指定された順番に基づいて参照点(計測)と参照点(3D)とを対応付けることによって、簡易な方法で両者の対応付けが可能となり、マッチングに必要な処理時間を低減することができる。
また、計測画像上の参照図形(計測)と、3Dオブジェクト上の参照点(計測)によって構成される3角形をスクリーン平面に投影した参照図形(3D)との幾何学計算によるマッチングを行うことによって、マッチングの精度を維持しつつ、マッチングに必要な処理時間を低減することができる。
また、ユーザが参照点(計測)を指定する際に3Dオブジェクトの透過率が大きく設定されることによって、ユーザが計測画像を見やすくすることができ、かつ、ユーザが参照点(計測)を指定しやすくすることができる。
また、3Dマッチング処理中は処理負荷の高い3Dオブジェクトの再表示を行わず、3Dマッチング処理の終了時に3Dオブジェクトの再表示を行うことによって、マッチングに必要な処理時間を低減することができる。
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。