(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-18
(45)【発行日】2023-04-26
(54)【発明の名称】表示制御方法、表示制御プログラムおよび情報処理装置
(51)【国際特許分類】
G06F 30/20 20200101AFI20230419BHJP
G06F 30/10 20200101ALI20230419BHJP
G06T 7/33 20170101ALI20230419BHJP
G06T 19/20 20110101ALI20230419BHJP
【FI】
G06F30/20
G06F30/10 100
G06T7/33
G06T19/20
(21)【出願番号】P 2019101130
(22)【出願日】2019-05-30
【審査請求日】2022-02-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】盛 夢都
(72)【発明者】
【氏名】片岡 正弘
【審査官】松浦 功
(56)【参考文献】
【文献】特開2018-142109(JP,A)
【文献】特開2017-187882(JP,A)
【文献】特開平11-051611(JP,A)
【文献】特開2017-091078(JP,A)
【文献】特開2010-176380(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 30/00 -30/28
G06T 15/00 -19/20
G06T 7/30 - 7/38
(57)【特許請求の範囲】
【請求項1】
コンピュータが、
撮像装置により撮像された構造物を含む撮影画像を取得し、
前記構造物の三次元モデルから生成された複数の投影像を取得し、
取得した前記複数の投影像の内、取得した前記撮影画像に含まれる前記構造物の形状に応じた第1の投影像を特定し、
特定した前記第1の投影像に含まれる前記三次元モデルの稜線と、前記撮影画像から抽出されたエッジ線とを表示し、
表示した前記稜線に含まれる所定数の稜線を、表示した前記エッジ線に含まれる所定数のエッジ線にそれぞれ対応付ける操作を受け付けると、前記所定数の稜線の位置が、前記所定数の稜線に対応付けられた前記所定数のエッジ線の位置にそれぞれ対応する前記三次元モデルの第2の投影像を生成し、
生成した前記第2の投影像を前記撮影画像に重畳表示する、
ことを特徴とする表示制御方法。
【請求項2】
前記第1の投影像の特定では、前記複数の投影像それぞれの第1のアウトラインを示す情報と前記撮影画像に含まれる前記構造物の第2のアウトラインを示す情報とを比較し、前記第2のアウトラインとの一致の度合いが最も高い前記第1のアウトラインに対応する前記第1の投影像を特定する、請求項1記載の表示制御方法。
【請求項3】
前記第1のアウトラインを示す情報は、前記第1のアウトラインの描画命令を含む第1のテキスト情報であり、前記第2のアウトラインを示す情報は、前記第2のアウトラインの描画命令を含む第2のテキスト情報であり、
前記第1および前記第2のアウトラインを示す情報の比較では、前記第2のテキスト情報と記述内容が一致する度合いが最も高い前記第1のテキスト情報に対応する前記第1の投影像を特定する、
請求項2記載の表示制御方法。
【請求項4】
前記第1および前記第2のテキスト情報の記述内容の比較では、複数の描画命令それぞれの前記第1のテキスト情報における出現位置を示す転置インデックスに基づいて、前記第1および前記第2のテキスト情報それぞれに含まれる描画命令と前記描画命令の出現順序とを比較する、請求項3記載の表示制御方法。
【請求項5】
前記コンピュータが、更に、前記撮影画像を取得すると、前記撮影画像に含まれる前記構造物の形状を表すアウトライン候補の線を表示し、前記撮影画像における前記アウトライン候補の線の抽出範囲の指定、または、前記アウトライン候補の線を補完する線の入力を受け付ける、請求項1乃至4の何れか1項に記載の表示制御方法。
【請求項6】
コンピュータに、
撮像装置により撮像された構造物を含む撮影画像を取得し、
前記構造物の三次元モデルから生成された複数の投影像を取得し、
取得した前記複数の投影像の内、取得した前記撮影画像に含まれる前記構造物の形状に応じた第1の投影像を特定し、
特定した前記第1の投影像に含まれる前記三次元モデルの稜線と、前記撮影画像から抽出されたエッジ線とを表示し、
表示した前記稜線に含まれる所定数の稜線を、表示した前記エッジ線に含まれる所定数のエッジ線にそれぞれ対応付ける操作を受け付けると、前記所定数の稜線の位置が、前記所定数の稜線に対応付けられた前記所定数のエッジ線の位置にそれぞれ対応する前記三次元モデルの第2の投影像を生成し、
生成した前記第2の投影像を前記撮影画像に重畳表示する、
処理を実行させることを特徴とする表示制御プログラム。
【請求項7】
構造物の三次元モデルから生成された複数の投影像を記憶する記憶部と、
撮像装置により撮像された前記構造物を含む撮影画像を取得し、前記構造物の前記複数の投影像を前記記憶部から取得し、取得した前記複数の投影像の内、取得した前記撮影画像に含まれる前記構造物の形状に応じた第1の投影像を特定し、特定した前記第1の投影像に含まれる前記三次元モデルの稜線と、前記撮影画像から抽出されたエッジ線とを表示し、表示した前記稜線に含まれる所定数の稜線を、表示した前記エッジ線に含まれる所定数のエッジ線にそれぞれ対応付ける操作を受け付けると、前記所定数の稜線の位置が、前記所定数の稜線に対応付けられた前記所定数のエッジ線の位置にそれぞれ対応する前記三次元モデルの第2の投影像を生成し、生成した前記第2の投影像を前記撮影画像に重畳表示する処理部と、
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は表示制御方法、表示制御プログラムおよび情報処理装置に関する。
【背景技術】
【0002】
種々の構造物の設計に三次元CAD(Computer Aided Design)が用いられている。また、製造者などのユーザは、検品などの作業において、製造された構造物が設計通りに製造されているか否かを確認することがある。そこで、情報処理技術により、ユーザの検品などの作業を支援することが考えられている。例えば、製作された構造物を撮像した撮像画像と、三次元CADの構造物のモデルとを重畳表示する表示制御装置の提案がある。
【0003】
なお、三次元モデルが特定の視点に基づいて仮想平面に写像された場合の輪郭に含まれる複数の位置を表す特徴情報と、複数の位置に対応する三次元における位置と、を対応付けたテンプレートを特定の視点ごとに作成する情報処理装置の提案もある。提案の情報処理装置は、対象物の撮像画像におけるエッジを表す特徴情報と、テンプレートの特徴情報とに基づいて、対象物の三次元での位置および姿勢を導出する。
【0004】
また、プラント建設用の製品資材の形状寸法、配置角度等を非接触で測定し、測定した情報から得られる製品資材の物体境界情報と、予め設計時に作成しておいた三次元モデル情報を照合するプラント建設支援装置の提案もある。提案のプラント建設支援装置は、照合により製品資材の個体認識番号を取得して、プラント建設用の製品資材のプラント建設サイトへの到着を判定する。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2018-142109号公報
【文献】特開2017-182274号公報
【文献】特開2012-180191号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
情報処理装置により、構造物の撮影画像と当該構造物に対応する三次元モデルとを画面に表示し、三次元モデルの姿勢を変更させるユーザの操作に応じて、表示中の三次元モデルの姿勢を変更して、構造物の撮影画像と三次元モデルとを対比可能にすることがある。この場合、三次元モデルを最初に表示するときの三次元モデルの姿勢が問題になる。
【0007】
例えば、予め定められた特定の初期姿勢で三次元モデルを表示することも考えられる。しかし、撮影画像における構造物の姿勢と、三次元モデルの初期姿勢との乖離の度合いが大きいほど、両者の対比を適切に行うための、ユーザによる三次元モデルの姿勢変更の操作が難しくなる。
【0008】
1つの側面では、本発明は、三次元モデルの投影像を重畳表示させる際の作業負荷を軽減できる表示制御方法、表示制御プログラムおよび情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0009】
1つの態様では、表示制御方法が提供される。この表示制御方法では、コンピュータが、撮像装置により撮像された構造物を含む撮影画像を取得し、構造物の三次元モデルから生成された複数の投影像を取得し、取得した複数の投影像の内、取得した撮影画像に含まれる構造物の形状に応じた第1の投影像を特定し、特定した第1の投影像に含まれる三次元モデルの稜線と、撮影画像から抽出されたエッジ線とを表示し、表示した稜線に含まれる所定数の稜線を、表示したエッジ線に含まれる所定数のエッジ線にそれぞれ対応付ける操作を受け付けると、所定数の稜線の位置が、所定数の稜線に対応付けられた所定数のエッジ線の位置にそれぞれ対応する三次元モデルの第2の投影像を生成し、生成した第2の投影像を撮影画像に重畳表示する、処理を実行する。
【0010】
また、1つの態様では、表示制御プログラムが提供される。
また、1つの態様では、情報処理装置が提供される。
【発明の効果】
【0011】
1つの側面では、三次元モデルの投影像を重畳表示させる際の作業負荷を軽減できる。
【図面の簡単な説明】
【0012】
【
図1】第1の実施の形態の情報処理装置を示す図である。
【
図2】第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【
図6】転置インデックステーブルの例を示す図である。
【
図8】撮影画像に含まれるアウトラインの例を示す図である。
【
図9】姿勢候補画像に含まれるエッジの例を示す図である。
【
図10】姿勢候補画像のアウトライン上の点の例を示す図である。
【
図11】各姿勢候補画像に含まれる線分の例を示す図である。
【
図12】視線方向に応じたアウトラインの変化の例を示す図である。
【
図14】姿勢候補の絞込み例(続き)を示す図である。
【
図15】PostScriptに対する転置インデックスの例を示す図である。
【
図16】転置インデックスのハッシュ化の例を示す図である。
【
図17】転置インデックスのハッシュ値の例を示す図である。
【
図18】転置インデックスの復元例を示す図である。
【
図19】転置インデックスの絞込み例を示す図である。
【
図20】アウトラインの誤検出の例を示す図である。
【
図21】アウトラインの誤検出時の修正例を示す図である。
【
図22】アウトライン抽出の例を示すフローチャートである。
【
図23】姿勢候補の絞込み例を示すフローチャートである。
【
図24】3Dモデル重畳制御例を示すフローチャートである。
【
図25】姿勢候補画像の初期表示例を示す図である。
【
図26】姿勢候補画像の初期表示の比較例を示す図である。
【発明を実施するための形態】
【0013】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0014】
図1は、第1の実施の形態の情報処理装置を示す図である。
情報処理装置10は、構造物の撮影画像と三次元モデルとの対比を支援する。情報処理装置10は、表示装置20に接続される。情報処理装置10は、記憶部11および処理部12を有する。
【0015】
記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサであってもよい。「プロセッサ」は、複数のプロセッサの集合(マルチプロセッサ)を含み得る。
【0016】
記憶部11は、構造物の三次元モデルから生成された複数の投影像を記憶する。例えば、記憶部11は、対象の構造物の三次元モデルから生成された投影像31,32,33,…を記憶する。投影像31,32,33,…は、三次元モデルの姿勢を回転角度A1、仰角A2刻みで変化させたときの、三次元モデルから生成された二次元画像である。投影像31,32,33,…の座標系(例えば、横方向をx軸、縦方向をy軸とする)は、予め正規化される。投影像31,32,33の原点位置は所定の位置(例えば各画像の中心)となる。
【0017】
処理部12は、撮像装置により撮像された構造物を含む撮影画像を取得する。
図1では撮像装置の図示を省略している。例えば、処理部12は、撮影画像40を取得する。撮影画像40は、構造物画像41を含む。構造物画像41は、撮像装置により撮像された構造物の画像である。構造物画像41は、撮像した方向から見たときの構造物の形状を示す画像であるとも言える。
【0018】
処理部12は、構造物の三次元モデルから生成された複数の投影像を取得する。例えば、処理部12は、構造物画像41に対応する構造物の三次元モデルから生成された投影像31,32,33,…を記憶部11から取得する。
【0019】
処理部12は、取得した複数の投影像の内、取得した撮影画像に含まれる構造物の形状に応じた第1の投影像を特定する。例えば、処理部12は、投影像31,32,33,…の内、撮影画像40に含まれる構造物の形状に応じた投影像32を特定する。
【0020】
より具体的には、処理部12は、撮影画像40の座標系を、投影像31,32,33,…の座標系に合わせて正規化する。撮影画像40の原点位置は、投影像31,32,33,…それぞれの原点位置に対応する位置となる。処理部12は、正規化した撮影画像40から構造物画像41に含まれるエッジの位置、エッジの延びる方向、および、曲線の位置などを抽出する。処理部12は、構造物画像41から抽出したエッジの位置、エッジの延びる方向、および、曲線の位置などを、投影像31,32,33,…それぞれに含まれる稜線の位置、稜線の延びる方向、および、曲線の位置と照合する。処理部12は、投影像31,32,33,…のうち、照合により、構造物画像41と最も良く一致する投影像32を特定する。
【0021】
処理部12による照合の方法には種々の方法が考えられる。例えば、処理部12は、ページ記述言語(PDL:Page Description Language)で表されたデータ(PDLデータ)を用いて照合を行ってもよい。PDLは、画像をテキスト情報で表現するデータ形式である。PDLの一例として、PostScript(登録商標)が挙げられる。処理部12は、構造物画像41に基づく構造物の形状を表すPDLデータと、投影像31,32,33,…それぞれに基づく三次元モデルの形状を表すPDLデータとを照合することで、構造物画像41と最も良く一致する投影像32を特定してもよい。PDLデータを用いて照合を行うことで、画像データを用いて照合を行うよりも、照合を高速に実行できる。
【0022】
あるいは、処理部12は、PDLデータの転置インデックスを照合に用いてもよい。例えば、処理部12は、投影像31,32,33,…それぞれのPDLデータに対して転置インデックスを作成しておくことが考えられる。処理部12は、転置インデックスに基づいて、投影像31,32,33,…それぞれのPDLデータのうち、構造物画像41のPDLデータと記述内容が類似する、投影像に対応するPDLデータを検索してもよい。転置インデックスを用いることで、より高速に照合を実行できる。
【0023】
更に、処理部12は、構造物画像41と投影像31,32,33,…との比較にPDLデータを用いる場合、構造物画像41における構造物の形状のアウトラインや投影像31,32,33,…それぞれに基づく三次元モデルの形状のアウトラインに対応するPDLデータを作成してもよい。アウトラインに対応するPDLデータを用いることで、アウトライン以外のエッジを用いるよりも高精度に照合を行える。なお、処理部12は、PDLデータを用いない場合に、両画像のウトライン同士の比較を行ってもよい。
【0024】
処理部12は、特定した投影像に含まれる三次元モデルの稜線と、撮影画像から抽出されたエッジ線とを表示する。例えば、処理部12は、表示画像50を表示装置20に表示させる。表示画像50は、稜線群51とエッジ線群52とを含む。稜線群51は、投影像32に含まれる三次元モデルの稜線の集合である。エッジ線群52は、撮影画像40から抽出された構造物画像41のエッジ線の集合である。
【0025】
処理部12は、表示した稜線に含まれる所定数の稜線を、表示したエッジ線に含まれる所定数のエッジ線にそれぞれ対応付ける操作を受け付ける。例えば、情報処理装置10は、入力装置(図示を省略している)に接続される。ユーザは、入力装置を用いて、表示された稜線と表示されたエッジ線とを対応付ける操作を行える。例えば、ユーザは、表示画像50を見ながら、稜線群51に含まれる所定数の稜線を、エッジ線群52に含まれる所定数のエッジ線にそれぞれ対応付ける操作を行える。処理部12は、入力装置を介して、稜線とエッジ線とを対応付ける、ユーザの操作を受け付ける。
【0026】
処理部12は、所定数の稜線の位置が、所定数の稜線に対応付けられた所定数のエッジ線の位置にそれぞれ対応する三次元モデルの第2の投影像を生成する。処理部12は、生成した第2の投影像を撮影画像に重畳表示する。
図1では第2の投影像の図示を省略している。これにより、ユーザは、実際に製造された構造物の画像と、三次元モデルの画像とを比較可能となり、製造された構造物が設計通りに製造されているか否かを確認できる。
【0027】
情報処理装置10によれば、撮像装置により撮像された構造物を含む撮影画像が取得される。構造物の三次元モデルから生成された複数の投影像が取得される。取得された複数の投影像の内、取得した撮影画像に含まれる構造物の形状に応じた第1の投影像が特定される。特定された第1の投影像に含まれる三次元モデルの稜線と、撮影画像から抽出されたエッジ線とが表示される。表示された稜線に含まれる所定数の稜線を、表示されたエッジ線に含まれる所定数のエッジ線にそれぞれ対応付ける操作が受け付けられる。所定数の稜線の位置が、所定数の稜線に対応付けられた所定数のエッジ線の位置にそれぞれ対応する三次元モデルの第2の投影像が生成される。生成した第2の投影像が撮影画像に重畳表示される。
【0028】
これにより、三次元モデルの投影像を重畳表示させる際の作業負荷を軽減できる。
例えば、予め定められた特定の初期姿勢で三次元モデルを表示することも考えられる。しかし、撮影画像における構造物の姿勢と、三次元モデルの初期姿勢との乖離の度合いが大きいほど、両者の対比を適切に行うための、ユーザによる三次元モデルの姿勢変更の操作が難しくなる。
【0029】
そこで、情報処理装置10は、撮像された構造物の姿勢に近い初期姿勢の三次元モデルの投影像(第1の投影像)を特定し、特定した投影像を表示することで、撮影画像における構造物の姿勢と、三次元モデルの初期姿勢との乖離を小さくする。このため、ユーザは、例えば、表示画像50において、三次元モデルの初期姿勢に対応する稜線群51の所定数の稜線を、エッジ線群52に含まれる所定数のエッジ線に対応付ける操作を行うことも可能である。すなわち、ユーザは、三次元モデルの初期姿勢を、ユーザ自身の操作によって変更しなくてもよい。このように、ユーザによる操作を省略可能にすることで、ユーザの作業負荷を軽減できる。
【0030】
また、三次元モデルの稜線と、撮影画像から抽出されたエッジ線とのユーザによる対応付け操作を適切に行えるようになるので、撮影画像に写り込んだ構造物の姿勢に対して、当該姿勢に対応する第2の投影像を適切に生成し、重畳表示することが可能になる。こうして、情報処理装置10は、三次元モデルと製造された構造物との差異のユーザによる確認作業を容易に行えるように支援できる。
【0031】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【0032】
情報処理装置100は、CPU101、RAM102、HDD103、出力IF(InterFace)104、入力IF105,106、媒体リーダ107およびNIC(Network Interface Card)108を有する。なお、CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
【0033】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよい。また、情報処理装置100は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【0034】
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【0035】
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【0036】
出力IF104は、CPU101からの命令に従って、情報処理装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
【0037】
入力IF105は、情報処理装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
【0038】
入力IF106は、CPU101からの命令に従って、情報処理装置100に接続されたカメラ113から、カメラ113により撮像された画像データを取得し、RAM102やHDD103に格納する。カメラ113は、製造された物体(構造物)を撮像する撮像装置である。カメラ113は、ステレオカメラでもよい。
【0039】
媒体リーダ107は、記録媒体114に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体114として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0040】
媒体リーダ107は、例えば、記録媒体114から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体114は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体114やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
【0041】
NIC108は、ネットワーク115に接続され、ネットワーク115を介して他のコンピュータと通信を行うインタフェースである。NIC108は、例えば、ネットワーク115に属するスイッチやルータなどの通信装置とケーブルで接続される。
【0042】
図3は、情報処理装置の機能例を示す図である。
情報処理装置100は、CADデータ記憶部120、姿勢候補データ記憶部130、転置インデックス記憶部140、撮影画像記憶部150、姿勢候補管理部160および表示制御部170を有する。
【0043】
CADデータ記憶部120、姿勢候補データ記憶部130、転置インデックス記憶部140および撮影画像記憶部150は、RAM102やHDD103の記憶領域を用いて実現される。姿勢候補管理部160および表示制御部170は、RAM102に記憶されたプログラムがCPU101により実行されることで実現される。
【0044】
CADデータ記憶部120は、三次元モデルのCADデータを記憶する。以下では、三次元モデルを「3D(Dimensions)モデル」と略記することがある。CADデータは、構造物(製品)の設計工程において、CADソフトウェアにより生成され、CADデータ記憶部120に予め格納される。
【0045】
姿勢候補データ記憶部130は、3Dモデルの姿勢候補データを記憶する。姿勢候補データは、複数の姿勢候補画像を含む。姿勢候補画像は、3Dモデルを様々な方向から眺めて3Dモデルを写した二次元画像(2D画像)である。
【0046】
転置インデックス記憶部140は、複数の姿勢候補画像それぞれに基づいて作成された転置インデックスを記憶する。転置インデックスは、姿勢候補画像から作成されたPDLデータに基づいて作成される。第2の実施の形態では、PDLの一例として、PostScriptを想定する。ただし、PostScript以外の他のPDLでもよい。
【0047】
撮影画像記憶部150は、カメラ113により撮像された撮影画像を記憶する。
姿勢候補管理部160は、CADデータ記憶部120に記憶されたCADデータに基づいて、複数の姿勢候補画像および姿勢候補画像毎の転置インデックスを生成する。姿勢候補管理部160は、姿勢候補データ生成部161、第1PDLデータ生成部162および転置インデックス生成部163を有する。
【0048】
姿勢候補データ生成部161は、CADデータ記憶部120に記憶されたCADデータに基づいて、3Dモデルの姿勢を、所定の回転角度、所定の仰角刻みで変更したときの複数の姿勢候補画像を生成する。姿勢候補データ生成部161は、姿勢候補画像を、3Dモデルの回転角、仰角に対応付けて、姿勢候補データ記憶部130に格納する。
【0049】
第1PDLデータ生成部162は、姿勢候補データ記憶部130に記憶された姿勢候補画像に基づいて、姿勢候補画像に含まれる3Dモデルの形状を表すPDLデータ(本例ではPostScriptデータ)を生成する。第1PDLデータ生成部162は、姿勢候補画像から3Dモデルの形状のアウトラインを抽出し、アウトラインに対応するPDLデータを生成する。第1PDLデータ生成部162は、生成したPDLデータを、転置インデックス記憶部140に格納する。
【0050】
ここで、アウトラインに着目する理由は、構造物の内側に存在するエッジは撮影位置によって取得できる場合と取得できない場合とがあるが、検査対象の構造物とそれ以外のものとの境界線であるアウトラインは必ず存在し、比較的精度良く取得できるためである。このため、アウトラインに対応するPDLデータを用いることで、後述される姿勢候補の絞込みの精度を向上させることができる。
【0051】
転置インデックス生成部163は、第1PDLデータ生成部162により生成されたPDLデータに基づいて、転置インデックスを生成する。転置インデックス生成部163は、生成元のPDLデータまたは姿勢候補画像に対応付けて、生成した転置インデックスを転置インデックス記憶部140に格納する。
【0052】
表示制御部170は、ユーザにより検品作業などが行われる際に、カメラ113により撮像された撮影画像に含まれる構造物画像と、当該構造物の3Dモデルとをディスプレイ111に表示させることで、ユーザの作業を支援する。例えば、撮影画像に重ねて3Dモデルなどの画像を表示させる技術は、AR(Augmented Reality)と呼ばれる。表示制御部170は、第2PDLデータ生成部171、検索部172および表示処理部173を有する。
【0053】
第2PDLデータ生成部171は、撮影画像に含まれる構造物画像の形状を表すPDLデータ(本例ではPostScriptデータ)を生成する。第2PDLデータ生成部171は、構造物画像から構造物の形状のアウトラインを抽出し、アウトラインに対応するPDLデータを生成する。第2PDLデータ生成部171は、生成したPDLデータを、検索部172に提供する。第2PDLデータ生成部171は、生成したPDLデータを、撮影画像記憶部150に格納してもよい。
【0054】
検索部172は、転置インデックス記憶部140に記憶されたPDLデータまたは転置インデックスに基づいて、第2PDLデータ生成部171により生成されたPDLデータに最も良く一致する3Dモデルの姿勢のPDLデータまたは転置インデックスを検索する。検索部172は、検索したPDLデータまたは転置インデックスに対応する3Dモデルの識別情報を、表示処理部173に提供する。
【0055】
表示処理部173は、検索部172から取得した識別情報に対応する姿勢候補画像(初期姿勢の姿勢候補画像)を姿勢候補データ記憶部130から取得する。表示処理部173は、撮影画像記憶部150に記憶された撮影画像に含まれる構造物画像と、取得した姿勢候補画像とをディスプレイ111により表示させる。
【0056】
表示処理部173は、撮影画像に含まれる構造物画像のエッジ(エッジ線と言うこともある)と、姿勢候補画像に含まれるエッジとを対応付けるユーザの操作を受け付ける。表示処理部173は、CADデータ記憶部120に記憶されたCADデータに基づいて、姿勢候補画像におけるエッジの位置が、当該エッジに対応付けられた撮影画像内のエッジの位置にそれぞれ対応する3Dモデルの投影像を生成する。表示処理部173は、生成した投影像を撮影画像に重畳表示する。
【0057】
図4は、姿勢候補テーブルの例を示す図である。
姿勢候補テーブル131は、姿勢候補データ記憶部130に記憶される姿勢候補データの一例である。姿勢候補テーブル131は、姿勢候補データ生成部161により生成される。姿勢候補テーブル131は、姿勢候補ID(IDentifier)、回転角、仰角および姿勢候補画像の項目を含む。
【0058】
姿勢候補IDの項目には、姿勢候補の識別情報である姿勢候補IDが登録される。回転角の項目には、姿勢候補に対応する3Dモデルの回転角の情報が登録される。回転角は、例えば、3Dモデルが設置される水平面上に互いに直交するx軸およびy軸を定義したとき、x軸およびy軸に直交する鉛直方向のz軸回りの角度で与えられてもよい。あるいは、回転角は、上記x軸、y軸およびz軸それぞれの回りの角度で与えられてもよい。仰角の項目には、姿勢候補に対応する、3Dモデルを眺めたときの仰角(3Dモデルを見る視線と水平面との角度)の情報が登録される。姿勢候補画像の項目には、3Dモデルの姿勢候補の2D画像(姿勢候補画像)のデータが登録される。
【0059】
例えば、姿勢候補テーブル131には、姿勢候補ID「1」、回転角「Z11」、仰角「Z21」、当該回転角および仰角に対応する姿勢候補画像を含むレコードが登録されている。
【0060】
一例では、姿勢候補データ生成部161は、1つの3Dモデルに対して、回転角を30°刻み、仰角を15°刻みで、それぞれ変化されたときの姿勢候補画像を生成し、姿勢候補テーブル131に登録する。ただし、姿勢候補データ生成部161は、更に細かい角度刻み、あるいは粗い角度刻みで、姿勢候補画像を生成して、姿勢候補テーブル131に登録してもよい。
【0061】
次に、姿勢候補データ生成部161により生成される姿勢候補画像の例を説明する。
図5は、姿勢候補画像の例を示す図である。
姿勢候補画像P1~P12は、ある3Dモデルについて、仰角45°に対応する回転角30°刻みで生成された12個の姿勢候補画像である。姿勢候補画像P1は回転角0°の場合である。姿勢候補画像P2は回転角30°の場合である。姿勢候補画像P3は回転角60°の場合である。以降、同様に、姿勢候補画像P4~P12も、回転角30°刻みで変化させた場合の姿勢候補画像となる。ここでは、仰角45°の場合が例示されているが、仰角0°、15°、45°、60°…それぞれに対して12個の姿勢候補画像が生成され、姿勢候補テーブル131に登録される。
【0062】
図6は、転置インデックステーブルの例を示す図である。
転置インデックステーブル141は、転置インデックス記憶部140に記憶される。転置インデックステーブル141に登録される情報は、第1PDLデータ生成部162および転置インデックス生成部163により生成される。転置インデックステーブル141は、姿勢候補ID、PDLデータおよび転置インデックスの項目を含む。
【0063】
姿勢候補IDの項目には、姿勢候補IDが登録される。PDLデータの項目には、PDLデータ(本例ではPostScriptデータ)が登録される。PDLデータは、第1PDLデータ生成部162により姿勢候補画像に基づいて生成される。転置インデックスの項目には、転置インデックスが生成される。転置インデックスは、転置インデックス生成部163によりPDLデータに基づいて生成される。
【0064】
例えば、転置インデックステーブル141には、姿勢候補ID「1」、PDLデータ「PDL-D1」、転置インデックス「INDEX-T1」を含むレコードが登録されている。転置インデックステーブル141には、他の姿勢候補画像に対するPDLデータおよび転置インデックスのレコードも登録される。
【0065】
次に、例示した3Dモデルに対して製造された構造物を撮像した撮影画像の例を説明する。
図7は、撮影画像の例を示す図である。
【0066】
撮影画像151は、製造された構造物がカメラ113により撮像されることで、生成される。情報処理装置100は、カメラ113から撮影画像151を取得し、撮影画像記憶部150に格納する。撮影画像151は、構造物画像151aを含む。構造物画像151aは、構造物の2D画像である。
【0067】
図8は、撮影画像に含まれるアウトラインの例を示す図である。
アウトライン画像152は、アウトライン152aを含む画像である。アウトライン152aは、構造物画像151aの外周のエッジを繋いだ輪郭線である。アウトライン152aは、撮影画像151に基づいて、第2PDLデータ生成部171により特定される。例えば、第2PDLデータ生成部171は、撮影画像151において画素値が比較的大きく異なる(例えば、画素値に閾値以上の差がある)領域間の境界線を特定することで、撮影画像151に含まれるエッジを検出する。第2PDLデータ生成部171は、検出された複数のエッジのうちの幾つかのエッジに囲われた領域を検出し、当該領域を囲う各エッジを繋いだ閉じた線をアウトライン152aとして抽出する。
【0068】
あるいは、カメラ113は、物体を2つの異なる方向から同時に撮影するステレオカメラ(双眼カメラ)、または、左右に可動可能な単眼カメラでもよい。この場合、第2PDLデータ生成部171は、既存の技術によって、カメラ113により撮像された2つの撮影画像に基づき、視差による構造物のアウトライン152aの識別を行うこともできる。
【0069】
次に、第1PDLデータ生成部162により姿勢候補画像から抽出されるエッジの例を説明する。一例として、前述の姿勢候補画像P2に対するエッジの例を説明する。
図9は、姿勢候補画像に含まれるエッジの例を示す図である。
【0070】
姿勢候補画像P2aは、姿勢候補画像P2に含まれるエッジのうち、当該姿勢候補に対応する3Dモデルの形状のアウトラインP21aを強調したものである。姿勢候補画像P2aのうち、太線で表した線が、アウトラインP21aに相当する。第1PDLデータ生成部162は、第2PDLデータ生成部171と同様の処理により、姿勢候補画像P2aからアウトラインP21aを抽出する。
【0071】
姿勢候補画像P2bは、姿勢候補画像P2に含まれる、アウトラインP21aに属さないエッジの一部であるエッジP21b,P22b,P24b,P23bを強調したものである。姿勢候補画像P2bのうち、太線で表した4つの線分がエッジP21b,P22b,P24b,P23bに相当する。ここで、エッジは、3Dモデルにおける2つの面により形成される稜線であるとも言える。
【0072】
図10は、姿勢候補画像のアウトライン上の点の例を示す図である。
アウトラインP21aの形状は、アウトラインP21a上の点の座標および点間を結ぶ線(線分または曲線)により表される。アウトラインP21a上の点として、2つのエッジが接続する点(アウトラインP21a上の節点)が用いられる。
【0073】
例えば、姿勢候補画像P2に対して、正規化された座標が定義される。姿勢候補画像P2の横方向の座標をX軸とし、左側から右側へ向かう方向をX軸の正方向とする。また、姿勢候補画像P2の縦方向の座標をY軸とし、下側から上側へ向かう方向をY軸の正方向とする。座標の原点Oは、姿勢候補画像P2における3Dモデルの中心の点(例えば、アウトラインP21aで表される形状の重心など)である。そして、各姿勢候補画像におけるX軸方向のサイズ、および、Y軸方向のサイズが一定サイズになるように、姿勢候補画像P2のX軸方向のサイズおよびY軸方向のサイズが正規化される。
【0074】
図8で例示したアウトライン152aについても同様に、姿勢候補画像とサイズが一致するように正規化された座標系を定義し、各点の座標や各点を結ぶ線(線分または曲線)の情報を用いることで、アウトライン152aの形状を表すことができる。例えば、線分であれば線分の位置や線分の延びる方向を含むベクトルの情報、曲線であれば曲線の位置や曲線を定義する制御点の情報を得ることができ、これらの線分や曲線の情報の組み合わせにより、アウトライン152aの形状が表される。
【0075】
ここで、各姿勢候補画像のアウトラインおよびアウトライン152aに対して、各点および2つの点を結ぶ線の抽出順は、第1PDLデータ生成部162および第2PDLデータ生成部171に予め定められる。第1PDLデータ生成部162および第2PDLデータ生成部171は、それぞれ予め定められた抽出順に従って、アウトラインに対応するPDLデータを生成する。例えば、第1PDLデータ生成部162および第2PDLデータ生成部171は、物体の中心を基準点(原点)として正規化した画像のうち、XYが共に正の領域内に存在する、原点から最も遠い点(始点)から時計回りに各点を辿るようにアウトラインに相当するPDLデータを生成する。ここで、「物体の中心」は、例えば、3Dモデルや構造物画像のアウトラインで表される形状の重心などである。
【0076】
図10の例では、アウトラインP21a上の点として、12個の点A~Lおよび2個の点α,βが示されている。制御点B,α,β,Cは、点B,Cを端点とするベジェ曲線を表す。この場合、点A~Lおよび点α,βそれぞれの座標と、点A~Lの各点を結ぶ線(線分または曲線)を、アウトラインP21aの形状を表す情報として用いることができる。例えば、
図10の例では、XYが共に正の領域内に存在する、原点から最も遠い点は、点Aである。したがって、第1PDLデータ生成部162は、点A,B,α,β,C,D,…,Lのように時計回りに、順番に、点および点間を結ぶ線を記述したPDLデータを生成する。
【0077】
図11は、各姿勢候補画像に含まれる線分の例を示す図である。
点Aは、姿勢候補画像P1~P12それぞれにおける3Dモデルのアウトラインの始点である。点Bは、姿勢候補画像P1~P12それぞれにおける始点の次の点である。姿勢候補画像P1~P12それぞれにおける点A,Bを結ぶ線分がアウトラインに対するPDLデータで最初に記述される線分(エッジ)である。
【0078】
図11で例示されるように、同じ3Dモデルであっても、アウトラインにより表される形状は姿勢候補画像毎に異なる。これは、3Dモデルを様々な角度から観察したときの視線方向に対して視認可能な3Dモデルのエッジが異なるためである。
【0079】
図12は、視線方向に応じたアウトラインの変化の例を示す図である。
例えば、透明でない三角柱の3DモデルV1を考える。3DモデルV1は、高さ方向のエッジV11,V12,V13を有する。観察点aは、エッジV11,V13を含む面に臨む。したがって、観察点aから3DモデルV1が観察されたとき、エッジV11,V13は観察されるが、エッジV12は観察されない。また、観察点bは、エッジV12,V13を含む面に臨む。したがって、観察点bから3DモデルV1が観察されたとき、エッジV12,V13は観察されるが、エッジV11は観察されない。
【0080】
図12の例は単純な形状を例示したが、複雑な形状を有する3Dモデルでは、姿勢候補画像毎に、観察可能なエッジが異なるため、姿勢候補画像に対するアウトラインにより表される形状も異なることになる。
【0081】
検索部172は、姿勢候補画像毎のアウトラインに含まれる線分を基に、撮影画像に含まれるアウトラインに類似する姿勢候補画像のアウトラインを特定する。次に、検索部172による姿勢候補の絞込み例を説明する。
【0082】
図13は、姿勢候補の絞込み例を示す図である。
ここでは、一例として、アウトライン画像152に対する姿勢候補画像P1~P12の絞込みを説明する。アウトライン画像152は、アウトライン152aで表される形状の中心を原点として正規化後のXY座標系において、XYが共に正である領域に点A,Bを含む。姿勢候補画像P1~P12のうち、正規化後のXY座標系において、XYが共に正である領域に点A,Bが含まれている姿勢候補画像は、姿勢候補画像P2,P6~P9である。
【0083】
したがって、検索部172は、姿勢候補画像P1~P12から姿勢候補画像P2,P6~P9に絞り込む。検索部172は、姿勢候補画像P1,P3~P5,P10~P12を候補から除外する。
【0084】
図14は、姿勢候補の絞込み例(続き)を示す図である。
アウトライン画像152は、正規化後のXY座標系において、XYが共に正である領域に、端点として点B,Cを含み、点B,C以外に点α,βを制御点とする曲線を含む。姿勢候補画像P2,P6~P9のうち、正規化後のXY座標系において、XYが共に正である領域に、端点として点B,Cを含み、点B,C以外に点α,βを制御点とする曲線を含む姿勢候補画像は、姿勢候補画像P2である。
【0085】
したがって、検索部172は、姿勢候補画像P2,P6~P9から姿勢候補画像P2に絞り込む。検索部172は、姿勢候補画像P6~P9を候補から除外する。
こうして、検索部172は、姿勢候補画像P1~P12の中から、アウトライン152aに最も良く類似する3Dモデルのアウトラインに対応する姿勢候補画像P2を特定する。
【0086】
検索部172は、
図13,
図14で例示した照合を、アウトラインに対応するPDLデータまたはPDLデータの転置インデックスを用いて行える。次に、PDLデータとして、PostScriptデータを用いる場合の転置インデックスの例を説明する。ただし、PostScriptに限定されるものではなく、PostScript以外の形式のPDLデータでもよい。
【0087】
図15は、PostScriptに対する転置インデックスの例を示す図である。
図15に示す例では、アウトライン200のPostScriptデータを生成する場合を説明する。アウトライン200は、線分201、曲線202、線分203および線分204により形成される。線分201は、点A,Bを端点とする線分である。曲線202は点B,Cを端点とする曲線であり、制御点B,C,α,βにより曲線の形状が決定されるベジェ曲線である。
【0088】
第1PDLデータ生成部162および第2PDLデータ生成部171は、点A,B,C,D,α,βを基にして、アウトライン200のPostScriptデータ210を生成する。PostScriptデータ210は、PDLデータの一例である。
【0089】
PostScriptデータ210は、パラメータ「Xa,Ya」、「Xb,Yb」、「Xα,Yα」、「Xβ,Yβ」、「Xc,Yc」を含む。「Xa,Ya」は、点Aの座標を示す。「Xb,Yb」は、点Bの座標を示す。「Xα,Yα」は、点αの座標を示す。「Xβ,Yβ」は、点βの座標を示す。「Xc,Yc」は、点Cの座標を示す。
【0090】
PostScriptデータ210は、複数の種類のコマンドを含む。具体的には、コマンド「newpath」、「moveto」、「lineto」、「curveto」、「stroke」、「showpage」である。コマンドは、制御文と呼ばれてもよい。
【0091】
転置インデックス生成部163は、PostScriptデータ210に含まれる文字列を、上段の行から順番に読み込み、読み込んだ文字列を並べることで、PostScript変換データ220を生成する。
【0092】
転置インデックス生成部163は、PostScript変換データ220に含まれるコマンドまたは座標と、当該コマンド又は座標の出現位置とに基づいて、転置インデックス230を生成する。転置インデックス230の横軸は、オフセットに対応する値である。転置インデックス230の縦軸は、コマンドまたは座標に対応する軸である。
【0093】
オフセットは、PostScript変換データ220の先頭からの位置を示す。PostScript変換データ220の先頭位置のオフセットを「0」とし、その後は、コマンドまたは座標の単位で、オフセットに1が加算される。例えば、PostScript変換データ220の例では、「newpath」、「Xa,Ya」、「moveto」、…のオフセットは、それぞれ、「0」、「1」、「2」、…となる。
【0094】
転置インデックス生成部163は、PostScript変換データ220を走査して、「オフセット」と、「コマンドまたは座標」との対応関係を特定する。転置インデックス生成部163は、特定した「オフセット」と、「コマンドまたは座標」の対応関係を基に、転置インデックス230にフラグ「1」を設定する。転置インデックス230のフラグ「1」以外の箇所は、「0」となる。
【0095】
例えば、PostScript変換データ220のオフセット「0」には、コマンド「newpath」が出現する。このため、転置インデックス生成部163は、転置インデックスのオフセット「0」と、コマンド「newpath」とが交差する位置に、フラグ「1」を設定する。転置インデックス生成部163は、PostScript変換データ220に含まれるコマンドまたは座標を、オフセット「0」から順に辿り、上記の処理を繰り返し実行することで、転置インデックス230を生成する。
【0096】
転置インデックス生成部163は、転置インデックスをハッシュ化することで、転置インデックスのデータサイズを小さくしてもよい。例えば、転置インデックス生成部163は、ビットマップの折り返し技術を用いて、転置インデックスを素数(底)でハッシュ化し得る。
【0097】
図16は、転置インデックスのハッシュ化の例を示す図である。
図16で説明する例では、32ビットレジスタを想定する。例えば、転置インデックス生成部163は、情報処理装置100が有する32ビットのレジスタを用いて、転置インデックスのハッシュ化を行える。また、一例として、転置インデックス生成部163は、「29」と「31」の素数(底)を基に、転置インデックスの各行のビットマップをハッシュ化するものとする。ここでは、ビットマップb1から、ハッシュ化ビットマップh11およびハッシュ化ビットマップh12を生成する場合について説明する。
【0098】
ビットマップb1は、転置インデックス(例えば、
図15に示した転置インデックス230)のある行を抽出したビットマップを示すものとする。ハッシュ化ビットマップh11は、底「29」によりハッシュ化されたビットマップである。ハッシュ化ビットマップh12は、底「31」によりハッシュ化されたビットマップである。
【0099】
転置インデックス生成部163は、ビットマップb1の各ビットの位置を、1つの底で割った余りの値を、ハッシュ化ビットマップの位置と対応付ける。転置インデックス生成部163は、該当するビットマップb1のビットの位置に「1」が設定されている場合には、対応付けられたハッシュ化ビットマップの位置に「1」を設定する処理を行う。
【0100】
ビットマップb1から、底「29」のハッシュ化ビットマップh11を生成する処理の一例について説明する。まず、転置インデックス生成部163は、ビットマップb1の位置「0~28」の情報を、ハッシュ化ビットマップh11にコピーする。
【0101】
ビットマップb1のビットの位置「35」を、底「29」で割った余りは「6」となるので、ビットマップb1の位置「35」は、ハッシュ化ビットマップh11の位置「6」と対応付けられる。転置インデックス生成部163は、ビットマップb1の位置「35」に「1」が設定されているため、ハッシュ化ビットマップh11の位置「6」に「1」を設定する。
【0102】
ビットマップb1のビットの位置「43」を、底「29」で割った余りは「14」となるので、ビットマップb1の位置「43」は、ハッシュ化ビットマップh11の位置「14」と対応付けられる。転置インデックス生成部163は、ビットマップb1の位置「43」に「1」が設定されているため、ハッシュ化ビットマップh11の位置「14」に「1」を設定する。
【0103】
転置インデックス生成部163は、ビットマップb1の位置「29」以上の位置に関し、「1」が設定されている位置について、上記処理を繰り返し実行することで、ハッシュ化ビットマップh11を生成する。なお、転置インデックス生成部163は、ビットマップb1の位置「29」以上の位置に関し、「0」が設定されている位置についてはスキップして次の位置の処理を行う。
【0104】
次に、ビットマップb1から、底「31」のハッシュ化ビットマップh12を生成する処理の一例について説明する。まず、転置インデックス生成部163は、ビットマップb1の位置「0~30」の情報を、ハッシュ化ビットマップh12にコピーする。
【0105】
ビットマップb1のビットの位置「35」を、底「31」で割った余りは「4」となるので、ビットマップb1の位置「35」は、ハッシュ化ビットマップh12の位置「4」と対応付けられる。転置インデックス生成部163は、ビットマップb1の位置「35」に「1」が設定されているため、ハッシュ化ビットマップh12の位置「4」に「1」を設定する。
【0106】
ビットマップb1のビットの位置「43」を、底「31」で割った余りは「12」となるので、ビットマップb1の位置「43」は、ハッシュ化ビットマップh12の位置「12」と対応付けられる。転置インデックス生成部163は、ビットマップb1の位置「43」に「1」が設定されているため、ハッシュ化ビットマップh12の位置「12」に「1」を設定する。
【0107】
転置インデックス生成部163は、ビットマップb1の位置「31」以上の位置に関し、「1」が設定されている位置について、上記処理を繰り返し実行することで、ハッシュ化ビットマップh12を生成する。なお、転置インデックス生成部163は、ビットマップb1の位置「31」以上の位置に関し、「0」が設定されている位置についてはスキップして次の位置の処理を行う。
【0108】
転置インデックス生成部163は、転置インデックスの各行について上記の折り返し技術による圧縮を行うことで、ハッシュ化転置インデックスを生成する。なお、底「29」、「31」のハッシュ化ビットマップは、生成元のビットマップの行(コマンドまたは座標)の情報が付与される。
【0109】
図17は、転置インデックスのハッシュ値の例を示す図である。
ハッシュ化ビットマップh21は、コマンド「moveto」に対応するハッシュ化ビットマップの一例である。ハッシュ化ビットマップh22は、コマンド「lineto」に対応するハッシュ化ビットマップの一例である。ハッシュ化ビットマップh23は、座標「Xa,Ya」に対応するハッシュ化ビットマップの一例である。このように、PostScriptデータに含まれるコマンドおよび座標毎に、ハッシュ化ビットマップが生成される。転置インデックス生成部163は、転置インデックスに代えて、ハッシュ化ビットマップを転置インデックス記憶部140に保存することで、転置インデックスのサイズが比較的大きい(本例では64ビットより大きい)場合に、保存するデータサイズを圧縮できる。
【0110】
ハッシュ化ビットマップが用いられる場合、検索部172は、次のようにして、ハッシュ化ビットマップから転置インデックスを復元し、姿勢候補の絞込みに用いる。
図18は、転置インデックスの復元例を示す図である。
【0111】
ここでは一例として、検索部172が、ハッシュ化ビットマップh11およびハッシュ化ビットマップh12を基にして、ビットマップb1を復元する場合を説明する。
図18(A)は、転置インデックスの復元の手順のうち、ハッシュ化ビットマップから中間ビットマップへ展開するステップを示す。
【0112】
検索部172は、底「29」のハッシュ化ビットマップh11から、中間ビットマップh11aを生成する。検索部172は、ハッシュ化ビットマップh11の位置0~28の値を、中間ビットマップh11aの位置0~28にそれぞれ、コピーする。
【0113】
検索部172は、中間ビットマップh11aの位置29以降の値については、「29」毎に、ハッシュ化ビットマップh11の位置0~28の値を、それぞれコピーする処理を繰り返し実行する。
図18では、中間ビットマップh11aの位置29~43の位置に、ハッシュ化ビットマップh11の位置0~14の値を、コピーした例を示す。
【0114】
検索部172は、底「31」のハッシュ化ビットマップh12から、中間ビットマップh12aを生成する。検索部172は、ハッシュ化ビットマップh12の位置0~30の値を、中間ビットマップh12aの位置0~30にそれぞれ、コピーする。
【0115】
検索部172は、中間ビットマップh12aの位置31以降の値については、「31」毎に、ハッシュ化ビットマップh12の位置0~30の値を、それぞれコピーする処理を繰り返し実行する。
図18では、中間ビットマップh12aの位置31~43の位置に、ハッシュ化ビットマップh12の位置0~12の値を、コピーした例を示す。
【0116】
こうして、ハッシュ化ビットマップから中間ビットマップが生成される。
図18(B)は、転置インデックスの復元の手順のうち、中間ビットマップ同士のAND演算を行うステップを示す。
【0117】
検索部172は、中間ビットマップh11aと、中間ビットマップh12aとをAND演算することで、ハッシュ化前のビットマップb1を復元する。検索部172は、他のハッシュ化されたビットマップについても、同様の処理を繰り返し実行することで、コマンドまたは座標に対応するビットマップを生成することができる。こうして、転置インデックスが復元される。
【0118】
図19は、転置インデックスの絞込み例を示す図である。
検索部172は、転置インデックスの絞込みにより、撮影画像151から抽出されるアウトライン152aに対応する姿勢候補画像の検索を行う。例えば、検索部172は、第2PDLデータ生成部171からアウトライン152aに対応するPostScriptデータを取得する。そして、検索部172は、PostScriptデータに含まれるコマンドまたは座標が、各姿勢候補画像に対応するPostScriptデータに含まれるかを、転置インデックスを用いて照合する。
【0119】
例えば、アウトライン152aに対応するPostScritpデータのオフセット「6」~「9」に対応する位置(あるいは別の位置でもよい)に「newpath Xa Ya moveto …」の文字列が含まれているとする。なお、図中、「newpath」を「np」と略記し、「moveto」を「mt」と略記することがある。
【0120】
この場合、検索部172は、転置インデックスのコマンド「newpath」に対応するビットマップを復元する(ステップST1)。
図19では、オフセット「6」がフラグ「1」であるビットマップの一例として、ビットマップb11が示されている。
【0121】
検索部172は、ビットマップb11を左シフトし、ビットマップb12を得る(ステップST2)。検索部172は、該当の転置インデックスの座標「Xa Ya」に対応するビットマップを復元する(ステップST3)。
【0122】
検索部172は、ビットマップb12,b13のAND演算を行い、ビットマップb14を得る(ステップST4)。ビットマップb14において、オフセット「7」がフラグ「1」の場合、該当の転置インデックスに対応するPostScriptデータは、オフセット「6」、「7」に対応する位置に「newpath Xa Ya」の文字列を含むことが分かる。この時点で、「newpath Xa Ya」の文字列を含まない転置インデックスに対応する姿勢候補は、候補としての優先度(アウトライン152aに対する類似度)が下げられるか、または、候補から除外される。
【0123】
続いて、検索部172は、ビットマップb14を左シフトし、ビットマップb15を得る(ステップST5)。検索部172は、該当の転置インデックスのコマンド「moveto」に対応するビットマップb16を復元する(ステップST6)。
【0124】
検索部172は、ビットマップb15,b16のAND演算を行い、ビットマップb17を得る(ステップST7)。ビットマップb17において、オフセット「8」がフラグ「1」の場合、該当の転置インデックスに対応するPostScriptデータは、オフセット「6」~「8」に対応する位置に「newpath Xa Ya moveto」の文字列を含むことが分かる。この時点で、「newpath Xa Ya moveto」の文字列を含まない転置インデックスに対応する姿勢候補は、候補としての優先度が下げられるか、または、候補から除外される。
【0125】
以降、同様に、検索部172は、ビットマップb17を左シフトし、ビットマップb18を得る(ステップST8)。そして、検索部172は、ビットマップb18に基づいて、(姿勢候補画像に対応するPostScriptデータにおいて)後続するコマンドまたは座標を特定し、アウトライン152aのPostScriptデータのコマンドまたは座標と照合できる。例えば、検索部172は、転置インデックスを用いた照合によって、各姿勢候補画像から生成されたアウトラインのPostScriptデータのうち、アウトライン152aのPostScriptデータに含まれる一連の文字列と一致する度合い(類似度)が最も高いものを検索する。
【0126】
ところで、製造された構造物をカメラ113により撮像する際に、構造物の周囲の他の構造物(他の物体)が撮影画像に写り込んだりすることで、構造物のアウトラインを撮影画像から適切に抽出できないことがある。
【0127】
図20は、アウトラインの誤検出の例を示す図である。
撮影画像153は、対象の構造物の構造物画像153aと、他の構造物の構造物画像153bとを含む。例えば、カメラ113による撮像時、他の構造物が、対象の構造物の手前に置かれていると、撮影画像153で示されるように、構造物画像153bにより、対象の構造物の一部が隠れた構造物画像153aが取得されることがある。
【0128】
この場合、第2PDLデータ生成部171は、撮影画像153に基づいて、アウトライン画像154を生成する可能性がある。アウトライン画像154は、構造物画像153a,153bに基づいて検出されたアウトライン154aを含む。しかし、アウトライン154aは、対象の構造物以外の構造物の輪郭も含んでおり、対象の構造物のアウトラインとしては不適切である。
【0129】
そこで、表示処理部173は、こうしたアウトラインの誤検出時の修正機能を提供する。
図21は、アウトラインの誤検出時の修正例を示す図である。
【0130】
図21(A)は、アウトラインの抽出範囲の指定例を示す。例えば、表示処理部173は、アウトライン154aをディスプレイ111により表示させ、アウトライン154aが適切であるか否かのユーザの確認を促す。ユーザによりアウトライン154aが不適切であると判断される場合、表示処理部173は、撮影画像153におけるアウトラインの抽出範囲の、ユーザによる指定を受け付ける。例えば、ユーザは、入力デバイス112によりポインタK1を操作して、撮影画像153における対象の構造物のアウトラインの抽出範囲R1を指定できる。表示処理部173は、指定された抽出範囲R1の情報を第2PDLデータ生成部171に提供する。第2PDLデータは、取得した抽出範囲R1の範囲内で、再度、アウトラインの抽出を実行する。
【0131】
図21(B)は、アウトラインの補完例を示す。例えば、表示処理部173は、アウトライン154aをディスプレイ111により表示させ、アウトライン154aが適切であるか否かのユーザの確認を促す。ユーザによりアウトライン154aが不適切であると判断される場合、表示処理部173は、アウトライン154aにおいて不足している線分154bの、ユーザによる補完を受け付ける。例えば、ユーザは、入力デバイス112によりポインタK1を操作して、アウトライン画像154における追加の線分154bを入力できる。
図21(B)では、追加された線分であることが分かり易いように、線分154bの両端に丸印を付している。線分154bの両端の丸印は、線分154bの両端に相当する他、線154cの両端、線154d(図中、点線で表されている)の両端にも相当している。
【0132】
この場合、表示処理部173は、アウトライン154aの一部である線154cと、追加された線分154bとの組み合わせを、修正後のアウトラインとして選択するユーザの操作を更に受け付けてもよい。すると、第2PDLデータ生成部171は、表示処理部173により取得された情報に基づいて、アウトライン154aの一部である線154dを除去し、線分154bと線154cとを組み合わせた線を、修正後のアウトラインとして検出する。
【0133】
なお、第2PDLデータ生成部171は、撮影画像151や撮影画像153において、画素値などによる物体の境界の判別が適切に行えずにエッジを細切れに検出し、アウトラインを形成するエッジの組み合わせを抽出できないこともある。この場合にも、第2PDLデータ生成部171は、
図21(B)で例示したようにユーザによる線分の追加を受け付けることで、アウトラインを補完することができる。
【0134】
次に、情報処理装置100による処理手順を説明する。なお、各姿勢候補画像および各姿勢候補画像に対するPDLデータ(例えば、PostScriptデータ)や転置インデックスは、下記の手順が開始される前に作成され、姿勢候補データ記憶部130および転置インデックス記憶部140に予め格納される。
【0135】
図22は、アウトライン抽出の例を示すフローチャートである。
(S10)第2PDLデータ生成部171は、撮影画像記憶部150に記憶された撮影画像151を解析し、画素値に所定値以上の差がある領域の境界線を特定する。
【0136】
(S11)第2PDLデータ生成部171は、特定した境界線をエッジとして抽出する。第2PDLデータ生成部171は、抽出したエッジにより形成されるアウトラインを含むアウトライン画像を生成する。表示処理部173は、撮影画像151と、生成されたアウトライン画像とをディスプレイ111により表示させ、ユーザによる確認を促す。なお、アウトラインの抽出範囲のユーザによる指定がある場合、第2PDLデータ生成部171は、指定された範囲に含まれるエッジに基づいてアウトラインを検出し、アウトライン画像を生成する。
【0137】
(S12)第2PDLデータ生成部171は、ユーザによるアウトラインの抽出範囲の変更入力があるか否かを判定する。変更入力がある場合、ステップS13に処理が進む。変更入力がない場合、ステップS14に処理が進む。
【0138】
(S13)第2PDLデータ生成部171は、アウトラインの抽出範囲を、ユーザにより指定された範囲に変更する。そして、ステップS11に処理が進む。
(S14)第2PDLデータ生成部171は、ユーザによるアウトラインの補完入力があるか否かを判定する。補完入力がある場合、ステップS15に処理が進む。補完入力がない場合、ステップS16に処理が進む。
【0139】
(S15)第2PDLデータ生成部171は、ユーザによるアウトラインの補完の入力内容で、アウトラインを補完する。
(S16)第2PDLデータ生成部171は、抽出したアウトラインのPDLデータ(例えば、PostScriptデータ)を生成し、検索部172に提供する。そして、アウトライン抽出の処理が終了する。
【0140】
このように、第2PDLデータ生成部171は、撮影画像151を取得すると、撮影画像151に含まれる構造物の形状を表すアウトライン候補の線を表示し、撮影画像151におけるアウトライン候補の線の抽出範囲の指定、または、アウトライン候補の線を補完する線の入力を受け付ける。これにより、撮影画像151に写る構造物のアウトラインを適切に取得することができる。その結果、後段の処理における姿勢候補画像の特定精度を向上させることができる。
【0141】
図23は、姿勢候補の絞込み例を示すフローチャートである。
(S20)検索部172は、姿勢候補画像の全てのアウトラインのPDLデータと、撮影画像151から取得したアウトラインのPDLデータとを比較する。ここで、検索部172は、当該比較に転置インデックスを用いることができる。検索部172は、転置インデックスを用いることで、姿勢候補の絞込みを高速に実行できる。ただし、検索部172は、転置インデックスを用いずに、PDLデータ同士を比較してもよい。また、検索部172は、撮影画像151から取得したアウトラインのPDLデータに対しても転置インデックスを生成し、転置インデックス同士を照合してもよい。
【0142】
(S21)検索部172は、2つのPDLデータ(姿勢候補画像のアウトラインのPDLデータおよび撮影画像151から取得したアウトラインのPDLデータ)に含まれる座標情報やベクトル情報を基に、当該2つのPDLデータの類似度を算出する。例えば、検索部172は、撮影画像151から取得したアウトラインのPDLデータに含まれるコマンドや座標を表す一連の文字列に一致する度合いが高いほど、該当の姿勢候補画像のアウトラインのPDLデータの類似度を大きくする。検索部172は、例えば、座標間の距離が短いほど、座標間の一致度合いを大きくすることが考えられる。
【0143】
(S22)検索部172は、類似度が最も高い3Dモデルの姿勢候補の姿勢候補IDを、表示処理部173に提供する。表示処理部173は、姿勢候補テーブル131に基づいて、該当の姿勢候補IDに対応する姿勢候補画像P2を出力する。具体的には、表示処理部173は、撮影画像151と共に、該当の姿勢候補IDに対応する姿勢候補画像P2を、ディスプレイ111により表示させる。そして、姿勢候補の絞込みの処理が終了する。
【0144】
なお、ステップS22において、表示処理部173は、撮影画像151に代えて、または、撮影画像151と共に、撮影画像151から抽出された複数のエッジを出力してもよい。また、表示処理部173は、姿勢候補画像P2に代えて、または、姿勢候補画像P2と共に、姿勢候補画像P2から抽出された複数のエッジを出力してもよい。
【0145】
ユーザは、撮影画像151と共に表示された姿勢候補画像P2を確認して、姿勢候補画像P2に含まれるエッジと撮影画像151に含まれるエッジとを対応付ける操作を行える。
【0146】
このように、検索部172は、姿勢候補画像(第1の投影像)の特定の際、複数の候補画像それぞれの第1のアウトラインを示す情報と撮影画像151に含まれる構造物の第2のアウトラインを示す情報とを比較し、第2のアウトラインとの一致の度合いが最も高い第1のアウトラインに対応する姿勢候補画像を特定する。
【0147】
例えば、第1のアウトラインを示す情報は、第1のアウトラインの描画命令を含む第1のテキスト情報(PDLデータ)である。また、第2のアウトラインを示す情報は、第2のアウトラインの描画命令を含む第2のテキスト情報(PDLデータ)である。検索部172は、第1および第2のアウトラインを示す情報の比較では、第2のテキスト情報と記述内容が一致する度合いが最も高い第1のテキスト情報に対応する姿勢候補画像を特定する。これにより、撮影画像に対応する姿勢候補画像を効率的に特定できる。例えば、姿勢候補画像の特定精度が向上する。また、姿勢候補画像を高速に検索できる。
【0148】
また、検索部172は、第1および第2のテキスト情報の記述内容の比較では、
図19で例示したように、複数の描画命令それぞれの第1のテキスト情報における出現位置を示す転置インデックスに基づいて、第1および第2のテキスト情報それぞれに含まれる描画命令と描画命令の出現順序とを比較する。これにより、姿勢候補画像を一層高速に検索できる。
【0149】
図24は、3Dモデル重畳制御例を示すフローチャートである。
(S30)表示処理部173は、3Dモデルの姿勢候補画像P2のエッジ(稜線)と撮影画像151のエッジとを対応付ける、ユーザの操作を受け付ける。
【0150】
(S31)表示処理部173は、CADデータ記憶部120に記憶された3DモデルのCADデータに基づいて、撮影画像151のエッジに、3Dモデルのエッジを対応付けた3Dモデルの投影像を生成する。表示処理部173は、既存の技術により、撮影画像151のエッジに、3Dモデルのエッジを対応付けた3Dモデルの投影像を生成できる。
【0151】
(S32)表示処理部173は、生成した3Dモデルの投影像を、撮影画像151に重畳表示する。そして、3Dモデル重畳制御の処理が終了する。
ユーザは、撮影画像151に重畳表示された3Dモデルの投影像を、撮影画像151における構造物画像151aと見比べることで、製造された構造物の検品などの作業を容易に行うことができる。
【0152】
図25は、姿勢候補画像の初期表示例を示す図である。
図25では、
図23のステップS22の処理により、ディスプレイ111に表示される画面300の例を示す。画面300は撮影画像151および姿勢候補画像P2を含む。
【0153】
姿勢候補画像P2における3Dモデルの姿勢は、撮影画像151における構造物の姿勢に近似する。したがって、ユーザは、姿勢候補画像P2に映し出されている3Dモデルの姿勢を変更する操作を行わなくても、姿勢候補画像P2における3Dモデルのエッジと、撮影画像151における構造物のエッジとを対応付ける操作を容易に行うことができる。例えば、ユーザは、入力デバイス112によりポインタK1を操作して、撮影画像151に含まれる点Q11,Q12を結ぶエッジと、姿勢候補画像P2に含まれる点Q21,Q22を結ぶエッジとを容易に対応付けることができる。
【0154】
図26は、姿勢候補画像の初期表示の比較例を示す図である。
図26では、比較例として、撮影画像151と、予め定められた初期姿勢の姿勢候補画像P3とを含む画面400の例を示す。この場合、姿勢候補画像P3における3Dモデルの初期姿勢は、3Dモデルを仰角90°の方向から眺めたときの姿勢であり、撮影画像151における構造物の姿勢(構造物を仰角約45°の所定方向から眺めたときの姿勢)と乖離している。このため、ユーザは、姿勢候補画像P3に映し出されている3Dモデルの姿勢を変更(回転)する操作を行わなければ、撮影画像151における構造物のエッジと、姿勢候補画像P3における3Dモデルのエッジとの対応を確認することが難しい。このため、入力デバイス112によりポインタK1を操作して、姿勢候補画像P3における3Dモデルの姿勢を変更する操作を、ユーザに強いることになる。3Dモデルの姿勢を変更して、撮影画像151における構造物の姿勢に合わせる操作は、比較的経験の浅いユーザにとって難しいこともある。
【0155】
そこで、情報処理装置100は、
図25で例示したように、ユーザによる3Dモデルの姿勢変更の操作を省略可能にし、ユーザによる作業の効率化(例えば、作業時間の短縮)を図れる。
【0156】
特に、アウトラインに対応するPDLデータ(例えば、PostScriptデータ)を利用することにより、3Dモデルの姿勢候補を精度良く絞り込むことができる。
また、姿勢候補の絞込みに転置インデックスを用いることで、絞込みの処理を高速化できる。
【0157】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体114に記録できる。
【0158】
例えば、プログラムを記録した記録媒体114を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体114に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【0159】
10 情報処理装置
11 記憶部
12 処理部
20 表示装置
31,32,33 投影像
40 撮影画像
41 構造物画像
50 表示画像
51 稜線群
52 エッジ線群