(57)【要約】【課題】  被計測物の平面領域に対して滑らかな３次元座標値を算出するための技術を提供すること。【解決手段】  形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する。パターン画像が投影される被計測物を撮像する。撮像される画像におけるパターン画像のコードを復号化して、該画像における被計測物の領域を示す着目画素に、コード値を割り当てる。着目画素に割り当てられたコード値を、着目画素の周辺の画素に割り当てられたコード値に基づいて変更する。変更されたコード値に基づいて、被計測物の座標を導出する。【選択図】  図１
2014157141.tif 000002
【特許請求の範囲】
【請求項１】
形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する投影手段と、
前記パターン画像が投影される前記被計測物を撮像する撮像手段と、
前記撮像手段により撮像される画像におけるパターン画像のコードを復号化して、該画像における前記被計測物の領域を示す着目画素に、コード値を割り当てる割り当て手段と、
前記着目画素に割り当てられたコード値を、前記着目画素の周辺の画素に割り当てられたコード値に基づいて変更する変更手段と、
前記変更されたコード値に基づいて、前記被計測物の座標を導出する導出手段と
を備えることを特徴とする３次元形状計測装置。
【請求項２】
前記変更手段は、
前記コード値が割り当てられた前記着目画素の周囲の画素に割り当てられたコード値に基づいて、前記着目画素のコード値を変更する範囲を設定する設定手段を備え、
前記設定手段によって設定された範囲に基づいて、前記着目画素のコード値を変更することを特徴とする請求項１に記載の３次元形状計測装置。
【請求項３】
前記設定手段は、
前記着目画素の画素位置（ｉ，ｊ）から順に、一方の方向に各画素位置の画素値を参照し、ｋを負の整数とした場合、参照した画素位置（ｉ，ｊ＋ｋ＋１）における画素値が画素位置（ｉ，ｊ＋ｋ）における画素値よりも小さい場合には、（ｋ＋１）を一端とし、
前記着目画素の画素位置（ｉ，ｊ）から順に、前記一方の方向とは逆の方向に各画素位置の画素値を参照し、ｋを正の整数とした場合、参照した画素位置（ｉ，ｊ＋ｋ−１）における画素値が画素位置（ｉ，ｊ＋ｋ）における画素値よりも大きい場合には、（ｋ−１）を他端とし、
前記一端から前記他端までの間を前記範囲として設定することを特徴とする請求項２に記載の３次元形状計測装置。
【請求項４】
前記設定手段は、
前記着目画素の画素位置（ｉ，ｊ）から順に、一方の方向に各画素位置の画素値を参照し、ｋを負の整数とした場合、参照した画素位置（ｉ，ｊ＋ｋ＋１）における画素値から画素位置（ｉ，ｊ＋ｋ）における画素値を引いた結果が１よりも大きい場合には、（ｋ＋１）を一端とし、
前記着目画素の画素位置（ｉ，ｊ）から順に、前記一方の方向とは逆の方向に各画素位置の画素値を参照し、ｋを正の整数とした場合、参照した画素位置（ｉ，ｊ＋ｋ）における画素値から画素位置（ｉ，ｊ＋ｋ−１）における画素値を引いた結果が１よりも大きい場合には、（ｋ−１）を他端とし、
前記一端から前記他端までの間を前記範囲として設定することを特徴とする請求項２に記載の３次元形状計測装置。
【請求項５】
前記設定手段は、
前記着目画素の画素位置から一方の方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と前記方向に隣接する画素列の長さとの比が許容範囲外であるか否かを判断し、第１の画素列と該第１の画素列と前記方向に隣接する第２の画素列との間で長さの比が許容範囲外であれば、前記第１の画素列の前記方向における端部を一端とし、
前記着目画素の画素位置から前記方向とは逆方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と前記逆方向に隣接する画素列の長さとの比が許容範囲外であるか否かを判断し、第３の画素列と該第３の画素列と前記逆方向に隣接する第４の画素列との間で長さの比が許容範囲外であれば、前記第３の画素列の前記逆方向における端部を他端とし、
前記一端から前記他端までの間を前記範囲として設定することを特徴とする請求項２に記載の３次元形状計測装置。
【請求項６】
３次元形状計測装置が行う３次元形状計測方法であって、
前記３次元形状計測装置の投影手段が、形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する投影工程と、
前記３次元形状計測装置の撮像手段が、前記パターン画像が投影される前記被計測物を撮像する撮像工程と、
前記３次元形状計測装置の割り当て手段が、前記撮像手段により撮像される画像におけるパターン画像のコードを復号化して、該画像における前記被計測物の領域を示す着目画素に、コード値を割り当てる割り当て工程と、
前記３次元形状計測装置の変更手段が、前記着目画素に割り当てられたコード値を、前記着目画素の周辺の画素に割り当てられたコード値に基づいて変更する変更工程と、
前記３次元形状計測装置の導出手段が、前記変更されたコード値に基づいて、前記被計測物の座標を導出する導出工程と
を備えることを特徴とする３次元形状計測方法。
【請求項７】
コンピュータを、請求項１乃至５の何れか１項に記載の３次元形状計測装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、３次元形状計測技術に関するものである。
【背景技術】
【０００２】
従来から、2つの座標系を設定し、被計測物上の各点の2つの座標系における座標を求めることにより、三角測量の原理によってその３次元形状を計測する方法が知られている。例えば、投影器を用いて被計測物にパタン光を投影し、その投影方向とは異なる方向から撮像器を用いて被計測物を撮影して画像を取得することで、投影器座標と撮像器座標の対応付けをする方法が知られている。このような方法として、例えば、特許文献１には、一般に「空間コード化法」と呼ばれる手法が記載されている。空間コード化法では、プロジェクタなどの投影器によって、被計測物にスリット状のパタンを何種類も投影し、これをカメラなどの撮像器で撮影する。被計測物の表面上の計測点では、各投影パタンを投影した際の明・暗をビット列として並べた符号(コード)が算出できる。この符号を空間コードと呼ぶ。空間コードは投影器座標(プロジェクタ座標)を表すものである。
【０００３】
このようにして、撮影された画像中の被計測物上の各画素位置について、撮像器座標(カメラ座標)と投影器座標の対応付けを行うことができる。撮像器座標と投影器座標の2つの座標の原点移動および回転の関係は事前にキャリブレーションしておく。被計測物上の点に対して、撮像器座標・投影器座標のそれぞれでの座標が確定すれば、三角測量の原理に基づいて、その計測点の３次元座標を算出することができる。
【０００４】
また、投影パタンの境界位置をサブピクセルレベルで求め、空間コードの値を内挿によって連続値として求めることで、より精密な３次元座標を計測する方法も知られている。
【０００５】
また、空間コード値の差によって物体面が連続面であるかどうかを簡便に判定する方法が知られている。すなわち、連続面においては、空間コード値は±1ずつ変化するという特徴がある。注目する領域が連続面かどうかがわかれば、それに応じた有効な処理が可能である。たとえば、空間コードが±1だけ変化する隣接4点を連続面とみなし、その4点間での内挿処理を行う。このようにすることで、段差のある部分(非連続面)に対しては先に説明した精度向上のための内挿処理を行わず、段差をそのまま保持する効果を生むことができる。この判定処理は空間コード値が±１だけ変化するかどうかを判定するだけの単純な処理であり、高速な処理が可能である。
【０００６】
被計測物にパタンを投影して撮像器座標と投影器座標の対応付けを行う手法はほかにもある。たとえば投影方向を変化させながらスリット光を投影し、これを複数回撮影して対応付けを行う方法があり、一般に光切断法と呼ばれる。この方法では、画像中の被計測物上の各点でスリット光が現れた時の投影方向を記録することができ、それによって画像中の各点において投影器座標における座標を明らかにすることができる。
【０００７】
投影器によるパタン投影を行わない方法もある。これは、異なる位置に設置した2台の撮像器で被計測物を撮影し、２つの画像間での局所的な類似判定によるマッチング(対応点決定)を行う方法であり、一般にステレオ画像法と呼ぶ。一般的には被計測物上のすべての点において対応点を正しく決定することは難しいが、対応が求まった後の処理方法は投影器を使用する方法と同じである。
【０００８】
上記いずれの方法も、被計測物上の注目点が、あらかじめ設定した2つの座標系においてどの座標になるかという対応関係を調べるものである。対応関係が明らかになった後に、三角測量の原理によって３次元計測をするという方法である。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】公開特許公報 昭60-152903
【発明の概要】
【発明が解決しようとする課題】
【００１０】
以上述べたように、従来手法では空間コードの内挿およびパタン境界の内挿によって３次元座標値の精度を上げていた。しかし、そのような処理をしてもなお、平面状の物体を計測した際に微小な凹凸が現れるという問題がある。
【００１１】
平面を表す空間コードは、投影器座標と撮像器座標との位置関係によって定まる滑らかな関数に従って変化する必要がある。従来手法における内挿処理では、空間コードが精密に求まる投影パタン境界での値を固定し、投影パタン境界の間にある計測対象点の空間コード値は計測対象点近傍で精密に求められた空間コード値から内挿して求めている。そのために、内挿によって求まった空間コード値は折れ線的に変化する。理想的ななだらかな関数とこの折れ線的関数との差分は、投影パタン境界の前後で周期的に増減を繰り返す。空間コード値の変化率が理想的な滑らかな関数から増減すると、その増減分が３次元座標を算出した際に面の凹または凸となって現れる。これが投影パタン境界のたびに繰り返されるため、平面である対象に対して細かい凹凸のある波面のような３次元座標が算出されてしまう。
【００１２】
被計測物が主に平面で構成されているにもかかわらず、平面であるべき領域に微細な凹凸があると非常に目立ってしまうため、計測された３次元形状を3D表示すると観察者の印象に悪影響を及ぼすという問題がある。また、計測された３次元形状に対して物体認識処理を行うような場合には、平面であるべき部分の計測結果に微細な凹凸があることにより、認識結果に悪影響を及ぼす。特に、工業製品部品のような、平面部を含むことが多い種類の物体が計測対象である場合に、上記の問題の影響は大きくなる。以上のように、狭い範囲で内挿処理する方法によると、計測値の平均値としては真値に近くても、観察者に与える印象や物体の特徴を表す方法として不都合な場合がある。
【００１３】
この問題への一つの対処方法としては、空間コード値による内挿を行うのではなく、３次元座標値で補間を行う方法がある。すなわち、パタン境界線上でのみ３次元座標値を計測し、パタン境界線上にない計測点では、その近傍にある計測済み３次元座標値からの補間処理によって３次元座標値を求める、という方法がある。空間コード値の内挿処理ではなく、３次元座標の値からの補間処理を行えば、自然な３次元座標値を得ることが可能であり、平面部に凹凸が現れるようなことはない。しかし、この手法は、パタン境界線上にない計測点に対して近傍の計測済み点を探索する必要があり、その計算量が多いという問題がある。たとえば計測した３次元座標に基づいてロボットを高速に動作させるような用途の場合は、処理がリアルタイムで高速動作できることが非常に重要であり、計算量が多い処理は不利である。
【００１４】
また、計測対象物がほぼ平面から構成されるという事前知識があれば、得られた３次元座標値群の平面らしい部分に平面モデルをあてはめ、その部分は平面モデルから得られる座標値で置換する等し、理想的な平面で構成された３次元座標値を得ることができる。しかし、この場合も、モデルあてはめに必要な計算量が多いという問題や、モデルを当てはめる対象とする平面らしい領域を精度よく定められるかという問題がある。
【００１５】
本発明はこのような従来の問題に鑑みてなされたものであり、被計測物の平面領域に対して滑らかな３次元座標値を算出するための技術を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明の目的を達成するために、例えば、本発明の３次元形状計測装置は、形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する投影手段と、前記パターン画像が投影される前記被計測物を撮像する撮像手段と、前記撮像手段により撮像される画像におけるパターン画像のコードを復号化して、該画像における前記被計測物の領域を示す着目画素に、コード値を割り当てる割り当て手段と、前記着目画素に割り当てられたコード値を、前記着目画素の周辺の画素に割り当てられたコード値に基づいて変更する変更手段と、前記変更されたコード値に基づいて、前記被計測物の座標を導出する導出手段とを備えることを特徴とする。
【発明の効果】
【００１７】
本発明の構成によれば、被計測物の平面領域に対して滑らかな３次元座標値を算出することができる。またそのために必要な計算処理負荷が小さい、という効果がある。
【図面の簡単な説明】
【００１８】
【図１】３次元形状計測装置のハードウェア構成例を示すブロック図。
【図２】３次元形状計測装置が行う処理のフローチャート。
【図３】ステップＳ２０４における処理の詳細を示すフローチャート。
【図４】投影パタンの一例を示す図。
【図５】撮像画像と対応マップ１２２との関係を示す図。
【図６】ステップＳ２０５における処理の詳細を示すフローチャート。
【図７】ステップＳ６０２における処理の詳細を示すフローチャート。
【図８】撮像装置１０３及び投影装置１０４の配置、投影パタンが照射される様子を示す図。
【図９】ステップＳ６０２における処理の詳細を示すフローチャート。
【図１０】平面物が撮像器座標光軸に垂直な姿勢である様子を示す図。
【発明を実施するための形態】
【００１９】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の１つである。
【００２０】
［第１の実施形態］
本実施形態では、空間コード化法による３次元形状算出方法をベースにして、被計測物の３次元形状を計測する。しかし、他の３次元形状算出方法（例えば、上記の光切断法やステレオ画像法など）をベースとした場合でも、後述するような対応マップ生成機能を有する手法であれば、以下に説明する技術は同様に適用することができる。
【００２１】
先ず、本実施形態に係る３次元形状計測装置のハードウェア構成例について、図１のブロック図を用いて説明する。なお、図１には、本実施形態に係る説明で用いる主要な構成を示しただけであって、以下に説明する各処理を実現できるのであれば、他の構成を採用しても構わない。
【００２２】
ＣＰＵ１０１は、メモリ１０５に格納されているコンピュータプログラムやメモリ１０６に格納されているデータを用いて処理を実行する。これによりＣＰＵ１０１は、３次元形状計測装置全体の動作制御を行うと共に、３次元形状計測装置が行うものとして後述する各処理を実行する。
【００２３】
撮像装置１０３は、現実空間の静止画像を撮像可能な装置であり、後述するように、投影装置１０４によりパターン像（投影パタン）が投影された被計測物（３次元形状を計測する対象の現実物体）の画像を撮像するものである。撮像装置１０３によって撮像された画像は後述するように、メモリ１０６内に画像１２１として格納される。なお、撮像装置１０３は動画像を撮像するようにしても構わないが、いずれにせよ、メモリ１０６には、投影装置１０４によりパターン像が投影された被計測物の画像が画像１２１として格納されることになる。
【００２４】
投影装置１０４は、例えば、プロジェクタやレーザー光発生装置などの装置であり、ＣＰＵ１０１によって指定されたパターン像を、被計測物に対して投影することができる装置である。
【００２５】
メモリ１０５には、後述する各処理をＣＰＵ１０１に実行させるためのコンピュータプログラムが格納されており、メモリ１０６には、後述する各処理においてＣＰＵ１０１によって用いられるデータが格納されている。例えば、従来から知られている３次元形状算出のアルゴリズムに必要なデータ類は事前に準備され、メモリ１０６に格納されている。例えば、投影パタン１２７、三角測量の原理に基づいて３次元形状を算出するために必要なデータとしてのキャリブレーションデータ１２８（撮像装置１０３と投影装置１０４との位置姿勢関係を示すデータ）がメモリ１０６に格納されている。投影パタン１２７は周知の如く、撮像器座標と投影器座標との対応関係を明らかにするために用いられるパタン形状を有する。パタン形状の種類は複数であってもよく、空間コード化法でも複数の投影パタンが用いられる。
【００２６】
また、メモリ１０５であってもメモリ１０６であっても良いが、ＣＰＵ１０１が各処理を実行する際に用いるワークエリアや、処理過程でデータを一時的に記憶するためのエリアを有する。
【００２７】
なお、図１では、コンピュータプログラムとデータとをそれぞれ別個のメモリに格納するようにしているが、これに限るものではなく、例えば、１つのメモリにコンピュータプログラムとデータとを格納するようにしても構わない。上記の各部はいずれも、バス１０２に接続されている。
【００２８】
ここで、以下に説明する処理で用いる空間コードの一例について説明しておく。本実施形態では説明を簡単にするために、空間コードは3bitで表現されるとし、投影パタン１２７として図４（ａ）〜（ｃ）に示す３枚を用いるものとする。図４（ａ）に示す投影パタン（以下、投影パタンａと呼称する）は投影器座標（投影パタン内における座標）を上下２つの領域に分け、上半分領域を黒（暗部）、下半分領域を白（明部）としたものである。図４（ｂ）に示す投影パタン（以下、投影パタンｂと呼称する）は投影パタンａの上半分領域及び下半分領域のそれぞれを更に上下２つに分け、それぞれの上半分領域を黒、下半分領域を白としたものである。図４（ｃ）に示す投影パタン（以下、投影パタンｃと呼称する）はさらに同様に領域の分割数を増やしたものである。実際の応用においてはよりビット数の多い空間コードを使用することが普通であり、投影パタンの枚数はビット数に応じて増えることに注意されたい。
【００２９】
図４に示した３枚の投影パタンを用いると、投影器座標のＹ座標方向（縦方向）を８個(２の３乗)の領域に区分することになり、それぞれの領域に対して個別の空間コード値を付与できる。以降では、投影器座標のＹ座標値のことを、投影器Ｙ座標値と呼ぶことにする。この例では、投影器Ｙ座標値は８つの離散的な値をとりうる座標と考えることができ、空間コード値は投影器Ｙ座標値だと考えることができる。投影器座標のＹ軸は投影パタンの上辺を０とし、下に向かって増える座標とする。図４の右側に、区分される領域と空間コード(投影器Ｙ座標値に等しい)との対応を記載した。カッコ内は空間コードの２進数表示である。なお、本実施形態における空間コードの最下位ビットは、投影パタンａを投影した被計測物の撮像画像における画素値が閾値以上であったか否かをそれぞれ１，０で表したものである。最下位ビットから１ビット上位のビットは、投影パタンｂを投影した被計測物の撮像画像における画素値が閾値以上であったか否かをそれぞれ１，０で表したものである。最上位ビットは、投影パタンｃを投影した被計測物の撮像画像における画素値が閾値以上であったか否かをそれぞれ１，０で表したものである。このようにすることで、空間コードの値が投影器Ｙ座標値と等しくなるようにした。
【００３０】
投影装置１０４が投影パタンａ、投影パタンｂ、投影パタンｃをこの順で被計測物に投影し、撮像装置１０３が該投影の度に被計測物の画像を撮像すると、投影装置１０４から見て一番上（投影器Ｙ座標値＝０に対応する）の部分には、常に黒色が投影される。そのため、この部分には空間コード値０(３ビットの２進数で０００)が付与される。また、一番下（投影器Ｙ座標値＝７に対応する）の部分には、常に白色が投影されるため、この部分には空間コード値７(３ビットの２進数で１１１)が付与される。なお、投影パタンは上下方向に領域分割しているので、投影装置１０４と撮像装置１０３は上下に並べて配置する。
【００３１】
空間コード化法以外の３次元形状算出方法を用いる場合は、用いる方法に適した投影パタンを投影パタン１２７としてメモリ１０６に格納すればよい。たとえば光切断法では、パタンは１種類のスリットパタンとしておき、投影方向を変えながら複数枚撮影すれば、撮像器座標と投影器座標との対応マップを生成できる。
【００３２】
次に、本実施形態に係る３次元形状計測装置が行う処理の詳細について説明する。係る処理は、被計測物を計測した結果を距離画像１２６としてメモリ１０６に格納する処理である。距離画像とは周知の通り、距離画像中の各画素の画素値が、該画素に写っている対象物と該距離画像を撮像した撮像装置との間の距離を示すような画像である。本実施形態では、距離画像１２６は、撮像装置１０３から得られる画像１２１中の各画素位置に対して、撮像装置１０３を基準とする座標系における３次元座標（ｘ、ｙ、ｚ）のうち奥行き値(z値)を記録した画像とする。ここで、「撮像装置１０３を基準とする座標系」とは、撮像装置１０３中の１点を原点とし、該原点で互いに直交する３軸をそれぞれｘ、ｙ、ｚ軸（ただし撮像装置１０３の撮像方向をｚ軸とする）とする座標系のことである。
【００３３】
次に、本実施形態に係る３次元形状計測装置が行う処理について、同処理のフローチャートを示す図２を用いて説明する。なお、以下の説明では、メモリ１０５内にコンピュータプログラムとして格納されているものとして図２に示している各機能部を処理の主体として説明する場合がある。しかし実際には、ＣＰＵ１０１が対応する機能部（コンピュータプログラム）を実行することで、対応する処理が実行される。
【００３４】
ステップＳ２０１では、パタン投影部１１２は先ず、メモリ１０６に格納されている投影パタン１２７の中から未選択の投影パタンを所定の順番に従って１つ選択し、投影装置１０４に該選択した投影パタンを被計測物に対して投影させる。ここでは、投影パタンａ、投影パタンｂ、投影パタンｃの順に投影するものとする。
【００３５】
ステップＳ２０２では、画像取得部１１１は撮像装置１０３を制御して、投影パタンが投影されている被計測物を撮像させ、該撮像により得られる撮像画像を画像１２１としてメモリ１０６に格納する。
【００３６】
ステップＳ２０３では、パタン投影部１１２はメモリ１０６に格納されている全ての投影パタンを選択したか否かを判断する。この判断の結果、全ての投影パタンを選択した場合には、処理はステップＳ２０４に進み、未選択の投影パタンが残っている場合には、処理はステップＳ２０１に戻る。
【００３７】
然るに、処理がステップＳ２０４に進んだ時点で、被計測物にはメモリ１０６に格納されている全ての投影パタンが投影されていることになる。また、メモリ１０６には、投影された投影パタンごとに、該投影パタンが投影された被計測物の撮像画像が格納されていることになる。
【００３８】
本実施形態では、３次元形状算出方法として空間コード化法を用いて説明するので、空間コード化法に必要な枚数分の撮像画像（パタン投影画像）が、メモリ１０６に画像１２１として格納されていることになる。すなわち、投影パタンが図４で示す３枚であった場合、３枚の撮像画像が画像１２１としてメモリ１０６に格納されていることになる。
【００３９】
ステップＳ２０４では、対応マップ生成部１１３は、メモリ１０６に画像１２１として格納されているそれぞれの撮像画像を用いて、撮像器座標と投影器座標との対応関係を表した対応マップを生成し、対応マップ１２２としてメモリ１０６に格納する。ステップＳ２０４における処理の詳細については後述する。
【００４０】
次に、ステップＳ２０５では、平滑化部１１４及び平滑化範囲設定部１１５は、ステップＳ２０４で生成した対応マップに対して平滑化処理を行い、平滑化処理済みの対応マップを、平滑化対応マップ１２３としてメモリ１０６に格納する。ステップＳ２０５における処理の詳細については後述する。
【００４１】
次に、ステップＳ２０６では、３次元座標算出部１１６は、ステップＳ２０５でメモリ１０６に格納された平滑化対応マップ１２３と、メモリ１０６に格納されているキャリブレーションデータ１２８と、を用いて３次元座標を算出する。そして３次元座標算出部１１６は、この算出した３次元座標を距離画像１２６の形式でメモリ１０６に格納する。
【００４２】
平滑化対応マップ１２３は、対応マップ１２２を平滑化したものであるが、撮像器座標と投影器座標の対応関係を記述したデータであることには変わりない。撮像器座標と投影器座標の対応関係が明らかであれば、従来から知られている３次元座標算出方法と同じ方法によって、３次元座標を算出することができる。空間コード化法による３次元座標算出方法については、よく知られた方法であるため、ここでは説明を割愛する。
【００４３】
次に、上記のステップＳ２０４における処理の詳細について、図３のフローチャートを用いて説明する。本実施形態では３次元座標算出方法として空間コード化法を用いて説明するので、図３に示した処理内容は、空間コード化法における対応マップ生成方法と同じ処理内容である。
【００４４】
対応マップ１２２とは、撮像器座標と投影器座標とを対応づけるマップを意味する。より詳しくは、対応マップ１２２上の着目画素位置には、明部及び暗部によって区分される投影パタン上の各領域に固有の値のうち、撮像画像上の該着目画素位置に写っている投影パタン部分に対応する値（空間コード値）、が設定されている。
【００４５】
本実施形態では、対応マップ１２２を、撮像装置１０３が撮像する撮像画像と同サイズの画像としてメモリ１０６に格納する。そして対応マップ１２２を構成する各画素の画素値は、投影器座標を表す値とする。本実施形態では空間コード化法を使っているので、投影器座標を表す値は投影器座標の領域を示す空間コード値となる。
【００４６】
ステップＳ３０１では、対応マップ生成部１１３は、対応マップ１２２を構成する各画素の画素値を０に初期化すると共に、変数Ｎの値を１に初期化する。
【００４７】
ステップＳ３０２では、対応マップ生成部１１３は、メモリ１０６に格納されている撮像画像のうちＮ番目の撮像画像を選択する。どの撮像画像をどの順番で選択するのかについては予め定められているものとする。ここでは、投影パタンａ、投影パタンｂ、投影パタンｃの順に投影するので、投影パタンａを投影した被計測物の撮像画像、投影パタンｂを投影した被計測物の撮像画像、投影パタンｃを投影した被計測物の撮像画像、の順に得ることになる。そこで、投影パタンａを投影した被計測物の撮像画像、投影パタンｂを投影した被計測物の撮像画像、投影パタンｃを投影した被計測物の撮像画像、の順に選択することにする。
【００４８】
ステップＳ３０３では、対応マップ生成部１１３は、ステップＳ３０２で選択した撮像画像を二値化して二値画像を生成する。この二値画像における各画素の画素値は０，１の何れかである。なお、撮像画像そのものが二値画像である場合には、ステップＳ３０３における処理は省く。
【００４９】
ステップＳ３０４では、対応マップ生成部１１３は、二値画像上の画素位置（ｘ、ｙ）における画素値ｐ（０若しくは１）を、対応マップ１２２上の画素位置（ｘ、ｙ）における画素値（３ビット）のうちのＮビット目に設定する。この処理を、二値画像上の全ての画素位置について（全てのｘ、ｙについて）実行する。
【００５０】
ステップＳ３０５では、対応マップ生成部１１３は、メモリ１０６に格納されている全ての撮像画像を選択したか否かを判断する。この判断の結果、全ての撮像画像を選択した場合には、図３のフローチャートに従った処理は完了する。一方、まだ未選択の撮像画像が残っている場合には、処理はステップＳ３０６に進む。ステップＳ３０６では、対応マップ生成部１１３は、変数Ｎの値を１つインクリメントする。そして処理はステップＳ３０１に戻り、以降の処理を繰り返す。
【００５１】
以上の処理により、対応マップ１２２を構成する各画素には、３ビットの画素値が設定される。そして、対応マップ１２２において画素位置（ｘ、ｙ）における３ビットの画素値は、上記３枚の撮像画像のそれぞれから収集した「画素位置（ｘ、ｙ）における画素値（ビット）」を並べたビット列（＝空間コード値）となっている。
【００５２】
なお、対応マップ122の画素値は、そのまま投影器Y座標値を表すようにセットすることとした。すなわち、上記で説明した方法では、空間コードはそのまま投影器Y座標値になるように設定してあった。しかし、空間コードの実現方法としては他の方法も考えられる。例えば特許文献1にあるように、空間コードをグレイコードで表現する方法もある。空間コードがグレイコードで表現される場合は、図３のフローチャートに従った処理を行うと、対応マップ122にはグレイコード値がいったん格納される。ここから投影器Y座標値を表す対応マップを求めるには、図３のフローチャートに従った処理が終了した後で、対応マップ122にセットされたグレイコード値を投影器Y座標値に変換する処理を行えばよい。
【００５３】
以上のようにして、メモリ106には対応マップ122が格納される。対応マップは、画像121に格納されている画像と同じサイズの画像であり、その各画素位置における画素値は、画像121の各画素位置に対応する投影器Y座標値であるような画像だとみなすことができる。
【００５４】
対応マップ１２２を画像としたときに、撮像画像と対応マップ１２２との関係を図５に示す。図５（ａ）には撮像画像を示し、図５（ｂ）には画像として表した対応マップ１２２を示している。
【００５５】
それぞれの画像において原点は左上隅としており、この原点から水平方向にｕ軸、垂直方向にｖ軸をとっている。また、それぞれの画像の水平方向のサイズはＷ、垂直方向のサイズはＨとしている。
【００５６】
図５において、撮像画像中における画素位置（ｉ，ｊ）における輝度値をＩ（ｉ，ｊ）と表している。対応マップ１２２中の画素位置（ｉ，ｊ）には、対応マップ１２２を生成するために用いたそれぞれの撮像画像において画素位置（ｉ，ｊ）に写っている投影パタン部分の画素値（ビット値）を並べたビット列が画素値ＰＹ（ｉ，ｊ）として格納されている。このことから、撮像画像上の画素位置（撮像器座標）（ｉ，ｊ）に対応する対応マップ１２２上の画素位置（ｉ，ｊ）における画素値は投影器Y座標値ＰＹ（ｉ，ｊ）であるから、この対応マップ122によって撮像器座標と投影器座標の対応付けが可能になる。
【００５７】
なお、２つの異なる視点から得られた情報を用いて三角測量の原理で３次元計測を行う方法においては、２つの異なる視点から同時に観察できない対象物は３次元計測できないという問題がある。投影器を用いる方法の場合は以下のようにして計測不能領域を決定できる。すなわち、図４に示した空間コード用の投影パタンに加えて全点灯パタン(全面が白のパタン)と全消灯パタン(全面が黒のパタン)を準備する。この２パタンを投影し、両者の差分が閾値以下の画像領域を影であるとして計測不能領域と決めることができる。このようにして、図３のフローチャートを用いて説明した処理とは別に、計測不能領域を算出する処理をしておくことが可能である。計測不能領域を表すためには、図５で示した画像と同サイズの２値のマスク画像を用意し、計測不能領域を構成する各画素の画素値に０、その他の領域を構成する各画素の画素値に１、を設定するなどして、このマスク画像を構成すれば良い。
【００５８】
このようにして生成したマスク画像を計測不能領域１２９としてメモリ１０６に格納する。そして、後述する処理により３次元座標算出部１１６が３次元座標を算出する処理を実行する際には、計測不能領域に関しては値を算出しないようにする。
【００５９】
また、全点灯パタンを投影した際の画像を、画像１２１としてメモリ１０６に格納しておけば、この画像を平滑化範囲設定部１１５が使用することができる。後述する平滑化範囲設定部１１５に係る説明では、その方法を述べる。全点灯パタン・全消灯パタンを投影した画像（それぞれ全点灯画像、全消灯画像）は、計測不能領域の算出以外でも用いることがあり、例えばパタンの２値化判定の際の閾値を決定する際に用いられることがある。すなわち、各画素位置における全点灯画像と全消灯画像の輝度値の中間値をもって、その画素位置における２値化の閾値とすることが考えられる。したがって、対応マップ生成処理の一環として、この２つの投影パタンで撮影した画像も取得することが多い。
【００６０】
ここまでの処理は、従来から知られている空間コード化法の処理と同じものである。なお、空間コード化法以外の方法で、例えば光切断法などによって対応マップを生成してもかまわない。
【００６１】
次に、平滑化部１１４及び平滑化範囲設定部１１５の動作について説明する。上記の通り、平滑化部１１４及び平滑化範囲設定部１１５により、対応マップ１２２中の各投影器Y座標値を平滑化し、平滑化処理済みの対応マップを、平滑化対応マップ１２３としてメモリ１０６に格納する。本実施形態では、空間コードは3bitで表現されているので、投影器Y座標値は0から7までの離散的な整数値である。平滑化部１１４は整数値を連続的な実数値として平滑化するが、その前に平滑化範囲設定部１１５は適切な平滑化範囲を設定し、平滑化部１１４はその範囲内の値を用いた平滑化を行っていく。
【００６２】
対応マップ122は前述のとおり図５（ｂ）のようになっている。以下の説明では、本処理の説明では対応マップ122は画像として扱う。すなわち、対応マップ122に格納されているデータを画素と呼び、その値(投影器Y座標値)を画素値と呼ぶことにする。画像の構成は、図５に示す通り、画像幅画素数はW、画像高さ画素数はHとし、画像座標(u, v)は画像左上を原点としてu軸を右方向、v軸を下方向にとることにして説明する。
【００６３】
上記のステップＳ２０５において平滑化部１１４及び平滑化範囲設定部１１５が行う処理の詳細について、図６のフローチャートを用いて説明する。ステップＳ６０１では、平滑化部１１４は、以下の処理で用いる変数ｉ，ｊをそれぞれ０に初期化する。
【００６４】
ステップＳ６０２では、平滑化範囲設定部１１５は、対応マップ１２２上の画素位置（ｉ，ｊ）を基準とする（例えば中心とする）平滑化範囲を設定する。この設定する平滑化範囲は、画像のv軸の正方向(画像の下方向)と負方向(画像の上方向)の画素数で表現し、メモリ１０６に平滑化範囲１２４として格納する。より詳しくは、v軸に対して正方向(下方向)の範囲を正方向範囲値、負方向(上方向)の範囲を負方向範囲値として格納する。負方向範囲値は０以下、正方向範囲値は０以上の整数になる。ステップＳ６０２における処理の詳細については後述する。
【００６５】
次に、ステップＳ６０３では、平滑化部１１４は、画素位置（ｉ，ｊ）に対してステップＳ６０２で設定された平滑化範囲内の画素値を用いて、画素位置（ｉ，ｊ）における画素値に対する平滑化処理を行う。この平滑化処理は次のようにして行う。
【００６６】
先ず平滑化部１１４は、平滑化範囲に含まれる各画素の画素値の平均勾配gradを算出する。平均勾配gradは以下の式を計算することで求める。以下の式では、負方向範囲値をmin、正方向範囲値をmaxと記した。minは0または負の値になり、maxは0または正の値になることに注意されたい。
【００６７】
平均勾配値ｇｒａｄ（ｉ，ｊ）＝｛ＰＹ（ｉ，ｊ＋ｍａｘ）−ＰＹ（ｉ，ｊ＋ｍｉｎ）｝／（ｍａｘ−ｍｉｎ＋１）
次に、平滑化部１１４は、以下の式を計算することで、画素位置（ｉ，ｊ）における投影器Y座標値を平滑化した値である平滑化値PYsmooth(i,j)を算出する。画素値PY(i, j)は離散値であるが、上記平均勾配値や以下の平滑化値は実数値である。
【００６８】
平滑化値ＰＹｓｍｏｏｔｈ（ｉ，ｊ）＝ＰＹ（ｉ，ｊ＋ｍｉｎ）＋ｇｒａｄ×｜ｍｉｎ｜
このような平滑化値算出の方法によれば、画素位置（ｉ，ｊ）の上下方向の所定範囲内で値が直線近似されて平滑化されたことになる。平滑化の方法としては、上記で説明した方法によらず、他の方法を用いてもかまわない。たとえば平滑化範囲内の各画素位置における投影器Y座標値に対して、画素位置（ｉ，ｊ）からの距離の逆数を重みとした重み付き平均値を算出し、これを平滑化値としてもよい。その場合の平滑化値は以下の式を計算することで求めることができる。
【００６９】
ＰＹｓｍｏｏｔｈ（ｉ，ｊ）＝Σｋ＝ｍｉｎｍａｘ｛（ＰＹ（ｉ，ｊ＋ｋ））／（１＋｜ｋ｜）｝／｛Σｋ＝ｍｉｎｍａｘ（１／（１＋｜ｋ｜）｝
また、平滑化範囲内の投影器Y座標値に対して最小二乗法で直線または適当な多項式の方程式を求め、その方程式によって画素位置（ｉ，ｊ）における平滑化値を求めてもよい。また、上記で説明したように、v軸方向(上下方向)でのみ平滑化するのではなく、u軸方向(左右方向)の値も使って平面的に平滑化してもよい。いずれにせよ、投影器Y座標値の変化率が平滑化範囲内でなるべく増減を繰り返さない方法で平滑化することが望ましい。そのようにすれば、３次元座標算出部１１６で投影器Y座標値を３次元座標に変換した際に平面部に凹凸が目立たなくなる。
【００７０】
ここまでの処理で、離散値である対応マップの画素値は平滑化され、v軸方向に滑らかな連続値が算出される。従来行われているような、対応マップ中の画素値が１だけ変動する範囲内での内挿処理ではなく、平滑化範囲124で示される範囲で平滑化することが本技術における特徴である。
【００７１】
次に、ステップＳ６０４では、平滑化部１１４は、ステップＳ６０３で算出した平滑化値を、メモリ１０６内の平滑化対応マップ１２３における画素位置（ｉ，ｊ）の画素値として設定する。
【００７２】
ステップＳ６０５では、平滑化部１１４は、変数ｊの値を１つインクリメントする。ステップＳ６０６では、平滑化部１１４は、ｊ＜Ｈであるか否かを判断する。この判断の結果、ｊ＜Ｈであれば処理はステップＳ６０２に戻る。一方、ｊ≧Ｈであれば、ステップＳ６０７に進む。
【００７３】
ステップＳ６０７では、平滑化部１１４は、変数ｊを０に初期化し、変数ｉの値を１つインクリメントする。ステップＳ６０８では、平滑化部１１４は、ｉ＜Ｗであるか否かを判断する。この判断の結果、ｉ＜Ｗであれば処理はステップＳ６０２に戻る。一方、ｉ≧Ｗであれば、図６のフローチャートに従った処理は終了する。
【００７４】
次に、平滑化範囲設定部１１５の動作について、より詳細に説明する。先ず、平滑化範囲設定部１１５が行う処理の概要について説明する。平滑化範囲設定部１１５によって行われる処理では、画素位置（ｉ，ｊ）を開始点として、対応マップ１２２におけるｖ軸の正方向及び負方向の２方向にそれぞれ、特定の条件を満たす範囲を探索する。特定の条件とは、本実施形態では以下の通りである。
【００７５】
・  探索している画素位置が測定不能点でないこと
・  投影器Y座標値の増加方向がv軸正方向であること
・  隣接する投影器Y座標値の差分が1以内であること
・  輝度画像における隣接する輝度値変化が所定以内であること
・  探索範囲の広さが規定の上限値以内であること
次に、上記のステップＳ６０２において平滑化範囲設定部１１５が行う処理の詳細について、図７のフローチャートを用いて説明する。ステップＳ７０１では、平滑化範囲設定部１１５は、以下の処理で用いる変数ｋの値を−１に初期化する。この変数ｋは、画素位置（ｉ，ｊ）から上下方向に平滑化範囲を探索する際の画素位置（探索位置）を示すための変数である。また、ステップＳ７０１では、平滑化範囲設定部１１５は、メモリ１０６に格納されている平滑化範囲としての２つの値（正方向範囲値と負方向範囲値）を０に初期化しておく。
【００７６】
ステップＳ７０２では、平滑化範囲設定部１１５は、対応マップ１２２における画素位置（ｉ，ｊ＋ｋ）（探索画素位置）が、計測不能領域内の画素位置であるか、若しくは対応マップ１２２外の画素位置であるか、を判断する。画素位置（ｉ，ｊ＋ｋ）が計測不能領域内の画素位置であるか否かは、計測不能領域１２９を参照し、計測不能領域１２９内の画素位置（ｉ，ｊ＋ｋ）における画素値が０であるか否かを判断すればよい。計測不能領域１２９内の画素位置（ｉ，ｊ＋ｋ）における画素値が１であれば、対応マップ１２２内の画素位置（ｉ，ｊ＋ｋ）は計測不能領域外であると判断することができる。一方、計測不能領域１２９内の画素位置（ｉ，ｊ＋ｋ）における画素値が０であれば、対応マップ１２２内の画素位置（ｉ，ｊ＋ｋ）は計測不能領域内であると判断することができる。
【００７７】
ステップＳ７０２における判断の結果、探索画素位置が計測不能領域内の画素位置であるか、若しくは対応マップ１２２外の画素位置であれば、処理はステップＳ７０７に進む。ステップＳ７０７では、平滑化範囲設定部１１５は、負方向範囲値をｋ＋１とする。これは、計測不能領域のデータを用いて平滑化をしないことを意図している。
【００７８】
一方、探索画素位置が計測不能領域外の画素位置であり且つ対応マップ１２２内の画素位置であれば、処理はステップＳ７０３に進む。ステップＳ７０３では、平滑化範囲設定部１１５は、ＰＹ（ｉ，ｊ＋ｋ＋１）＜ＰＹ（ｉ，ｊ＋ｋ）であるか否かを判断する。
【００７９】
ここで、対応マップ１２２は、連続面であれば、投影器Y座標値は下方向(v軸正方向)に向かって単調に増加するという性質がある。ＰＹ（ｉ，ｊ＋ｋ＋１）＜ＰＹ（ｉ，ｊ＋ｋ）であれば、（ｉ，ｊ＋ｋ＋１）と（ｉ，ｊ＋ｋ）は連続した面上にないということになる。
【００８０】
然るにこの判断の結果、ＰＹ（ｉ，ｊ＋ｋ＋１）＜ＰＹ（ｉ，ｊ＋ｋ）であれば、処理はステップＳ７０７に進み、上記の通り、負方向範囲値をｋ＋１とする。一方、ＰＹ（ｉ，ｊ＋ｋ＋１）≧ＰＹ（ｉ，ｊ＋ｋ）であれば、処理はステップＳ７０４に進む。
【００８１】
ステップＳ７０４では、平滑化範囲設定部１１５は、ＰＹ（ｉ，ｊ＋ｋ＋１）−ＰＹ（ｉ，ｊ＋ｋ）＞１であるか否かを判断する。対応マップ１２２は、連続面であれば隣り合う投影器Y座標値は最大で１しか変動しないという性質がある。ＰＹ（ｉ，ｊ＋ｋ＋１）−ＰＹ（ｉ，ｊ＋ｋ）＞１であれば、（ｉ，ｊ＋ｋ＋１）と（ｉ，ｊ＋ｋ）は連続した面上にないことになる。
【００８２】
然るにこの判断の結果、ＰＹ（ｉ，ｊ＋ｋ＋１）−ＰＹ（ｉ，ｊ＋ｋ）＞１であれば、処理はステップＳ７０７に進み、上記の通り、負方向範囲値をｋ＋１とする。一方、ＰＹ（ｉ，ｊ＋ｋ＋１）−ＰＹ（ｉ，ｊ＋ｋ）≦１であれば、処理はステップＳ７０５に進む。
【００８３】
ステップＳ７０５では、平滑化範囲設定部１１５は、画像１２１としてメモリ１０６に格納した全点灯画像中の画素値を用いて、輝度値の勾配が規定の範囲以内かどうかを判定する。ここで、全点灯画像内の画素位置（ｉ，ｊ）における輝度値をＩａｌｌ（ｉ，ｊ）と表す。ここでは、Ｉａｌｌ（ｉ，ｊ＋ｋ＋１）とＩａｌｌ（ｉ，ｊ＋ｋ）の比を算出し、別途あらかじめ定めてある輝度変動許容範囲１３０と比較することで判定することにする。これらの輝度値比は以下の式を計算することで求めることができる。
【００８４】
輝度値比＝Ｉａｌｌ（ｉ，ｊ＋ｋ）／Ｉａｌｌ（ｉ，ｊ＋ｋ＋１）
例えば、連続面での輝度変動は10%以内までである、とするのであれば、範囲の下限値0.9と上限値1.1を輝度変動許容範囲１３０としてメモリ１０６に格納しておく、などすれば良い。この処理の意図は、輝度画像において輝度勾配が大きく変動する点は２つの連続でない面の境界とみなす、ということである。この処理の効果は被計測物の表面の性質に左右される。被計測物の表面に模様がなく、連続面であれば輝度画像上で輝度値が一様であると期待されるのであれば、本ステップの処理の効果が期待できる。そのような被計測物とは、例えば工業製品の部品などである。本ステップでは、２点の輝度比が規定の範囲外であれば連続面でないと判定し、処理はステップＳ７０７に進む。なお、輝度値を使って連続面の判定をする方法は、上記以外の方法であってもよい。たとえば、事前に全点灯画像にソーベルやタプラシアンなどのエッジ抽出フィルタ処理をかけ、得られたエッジ位置を非連続面の境界として記録しておいてもよい。また、輝度変動許容範囲１３０が非常に大きくなるように設定しておけば、本ステップの処理を事実上キャンセルすることができる。その場合は他ステップでの条件を満たす限り平滑化範囲を広げるように設定することができる。
【００８５】
一方、上記の輝度比が規定の範囲内であれば、処理はステップＳ７０６に進む。ステップＳ７０６では、平滑化範囲設定部１１５は、｜ｋ｜＞平滑化範囲上限１２５であるか否かを判断する。この判断の結果、｜ｋ｜＞平滑化範囲上限１２５であれば、処理はステップＳ７０７に進み、｜ｋ｜≦平滑化範囲上限１２５であれば、処理はステップＳ７０８に進む。
【００８６】
ステップＳ７０８では平滑化範囲設定部１１５は、変数ｋの値を１つデクリメントし、処理はステップＳ７０２に進む。そしてこの変更した変数ｋを用いて以降の処理を行う。平滑化範囲は大きすぎると被計測物の湾曲面で誤差が大きくなる。滑らかな湾曲面は連続面ではあるが平面ではないので、そのような面を含む計測対象については適当な上限で平滑化範囲を打ち切らないといけない。しかし、前述のとおり、上限値は大きくして平滑化範囲を大きくした方が、平面的な部分に対する計測結果の凹凸を減らすことができる。対象物にどの程度の湾曲面があるのかによって適切な上限値をセットしておく。上限値に非常に大きな値をセットしておけば、このステップでの処理を事実上キャンセルすることができ、他ステップの条件を満たす限り平滑化範囲を広げるように設定することができる。
【００８７】
ここまでの処理で、画素位置（ｉ，ｊ）から上方向(v軸の負方向)への平滑化範囲探索が決まったので、以下では下方向(v軸の正方向)へ平滑化範囲を探索する。探索方向が異なるだけで、それぞれのステップでの処理の意図はここまでに説明したものと同様である。
【００８８】
ステップＳ７０９では、平滑化範囲設定部１１５は、変数ｋの値を１に初期化する。ステップＳ７１０では、平滑化範囲設定部１１５は、対応マップ１２２における画素位置（ｉ，ｊ＋ｋ）が、計測不能領域内の画素位置であるか、若しくは対応マップ１２２外の画素位置であるか、を判断する。この判断の結果、探索画素位置が計測不能領域内の画素位置であるか、若しくは対応マップ１２２外の画素位置であれば、処理はステップＳ７１５に進む。ステップＳ７１５では、平滑化範囲設定部１１５は、正方向範囲値をｋ−１とする。
【００８９】
一方、探索画素位置が計測不能領域外の画素位置であり且つ対応マップ１２２内の画素位置であれば、処理はステップＳ７１１に進む。ステップＳ７１１では、平滑化範囲設定部１１５は、ＰＹ（ｉ，ｊ＋ｋ−１）＞ＰＹ（ｉ，ｊ＋ｋ）であるか否かを判断する。この判断の結果、ＰＹ（ｉ，ｊ＋ｋ−１）＞ＰＹ（ｉ，ｊ＋ｋ）であれば、処理はステップＳ７１５に進み、ＰＹ（ｉ，ｊ＋ｋ−１）≦ＰＹ（ｉ，ｊ＋ｋ）であれば、処理はステップＳ７１２に進む。
【００９０】
ステップＳ７１２では、平滑化範囲設定部１１５は、ＰＹ（ｉ，ｊ＋ｋ）−ＰＹ（ｉ，ｊ＋ｋ−１）＞１であるか否かを判断する。この判断の結果、ＰＹ（ｉ，ｊ＋ｋ）−ＰＹ（ｉ，ｊ＋ｋ−１）＞１であれば、処理はステップＳ７１５に進み、ＰＹ（ｉ，ｊ＋ｋ）−ＰＹ（ｉ，ｊ＋ｋ−１）≦１であれば、処理はステップＳ７１３に進む。
【００９１】
ステップＳ７１３では、平滑化範囲設定部１１５は、画像１２１としてメモリ１０６に格納した全点灯画像中の画素値を用いて、輝度値の勾配が規定の範囲以内かどうかを、ステップＳ７０５と同様にして判定する。２点の輝度比が規定の範囲外であれば連続面でないと判定し、処理はステップＳ７１５に進む。一方、輝度比が規定の範囲内であれば、処理はステップＳ７１４に進む。
【００９２】
ステップＳ７１４では、平滑化範囲設定部１１５は、｜ｋ｜＞平滑化範囲上限１２５であるか否かを判断する。この判断の結果、｜ｋ｜＞平滑化範囲上限１２５であれば、処理はステップＳ７１５に進み、｜ｋ｜≦平滑化範囲上限１２５であれば、処理はステップＳ７１６に進む。
【００９３】
ステップＳ７１６では平滑化範囲設定部１１５は、変数ｋの値を１つインクリメントし、処理はステップＳ７１２に進む。そしてこの変更した変数ｋを用いて以降の処理を行う。
【００９４】
本実施形態に係る平滑化範囲設定部１１５の説明では、対応マップ122の値に応じて画素位置（ｉ，ｊ）に対する平滑化範囲を設定する方法として、複数の判断基準を説明した。しかし、これら複数の判断基準をすべて備えている必要はない。たとえば輝度値による判断を行うステップＳ７０５，Ｓ７１３における処理や、範囲上限により判断するステップＳ７０６，Ｓ７１４における処理は行わないような構成にすることも可能である。
【００９５】
このように、本実施形態によれば、投影パタン境界を越えた広い範囲の連続面に対して、投影器Y座標値を平滑化することが可能になる。連続だが平面ではないような面が被計測物にある場合は、平滑化範囲上限値を調整することで対応できる。結果として、平面物体を計測した際に得られる３次元形状に微小な凹凸状のノイズが現れにくい、という効果がある。対象物が連続面においてほぼ平面で構成されているとわかっている場合には、本実施形態で説明したような方法で効果が期待できる。また、上記で説明した処理は画像メモリの単純な1次元探索処理であり、高速な処理が可能である。
【００９６】
なお、本実施形態ではいくつかの構成例を説明したが、いずれの構成も、以下の基本構成の一例に過ぎない。基本構成では、撮像器座標と投影器座標との対応関係を表す対応マップ画像を取得する。取得もとは特定の取得元に限らない。ここで、該対応マップ画像上の着目画素位置には、投影器Y座標値を示すコード値が設定されている。そして、この対応マップ画像を用いて被計測物の３次元形状を計測する。
【００９７】
基本構成ではこのような構成を前提とし、以下の構成を特徴とする。即ち、対応マップ画像中の各画素位置に対して、該画素位置の周囲の画素の画素値に基づいて決定した範囲を設定し、設定した範囲内で画素値の平滑化を行う。そして、平滑化後の対応マップ画像を用いて、被計測物の３次元形状を計測する。
【００９８】
範囲の設定においては、対応マップ画像における着目画素位置（ｉ，ｊ）から順に、該対応マップ画像の一辺に沿って一方の方向に各画素位置の画素値を参照する。そして、ｋを負の整数とした場合に、参照した画素位置（ｉ，ｊ＋ｋ＋１）における画素値が画素位置（ｉ，ｊ＋ｋ）における画素値よりも小さい場合には、（ｋ＋１）を一端とする。
【００９９】
一方、対応マップ画像における着目画素位置（ｉ，ｊ）から順に前記方向とは逆の方向に各画素位置の画素値を参照する。そして、ｋを正の整数とした場合に、参照した画素位置（ｉ，ｊ＋ｋ−１）における画素値が画素位置（ｉ，ｊ＋ｋ）における画素値よりも大きい場合には（ｋ−１）を他端とする。そして、一端から他端までの間を前記範囲として設定する。
【０１００】
また、範囲の設定においては、対応マップ画像における着目画素位置（ｉ，ｊ）から順に、該対応マップ画像の一辺に沿って一方の方向に各画素位置の画素値を参照する。そして、ｋを負の整数とした場合に、参照した画素位置（ｉ，ｊ＋ｋ＋１）における画素値から画素位置（ｉ，ｊ＋ｋ）における画素値を引いた結果が１よりも大きい場合には、（ｋ＋１）を一端とする。
【０１０１】
一方、対応マップ画像における着目画素位置（ｉ，ｊ）から順に、前記方向とは逆の方向に各画素位置の画素値を参照する。そして、ｋを正の整数とした場合に、参照した画素位置（ｉ，ｊ＋ｋ）における画素値から画素位置（ｉ，ｊ＋ｋ−１）における画素値を引いた結果が１よりも大きい場合には、（ｋ−１）を他端とする。そして、一端から他端までの間を前記範囲として設定する。
【０１０２】
すなわち、形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影し、パターン画像が投影される被計測物を撮像する。そして、撮像される画像におけるパターン画像のコードを復号化して、該画像における被計測物の領域を示す着目画素に、コード値を割り当て、着目画素に割り当てられたコード値を、着目画素の周辺の画素に割り当てられたコード値に基づいて変更する。そして、変更されたコード値に基づいて、被計測物の座標を導出する。
【０１０３】
［第２の実施形態］
本実施形態では、第１の実施形態とは異なる平滑化範囲設定部１１５の動作について説明する。なお、本実施形態と第１の実施形態との相違点は、平滑化範囲設定部１１５の動作にあり、そのほかの点については第１の実施形態と同様である。しかるに、以下で特に説明しない限りは、第１の実施形態と同様であるものとする。
【０１０４】
本実施形態では、平滑化範囲設定部１１５は、平面ではない連続面に対応するための平滑化範囲設定を行う。平面物体に対して算出された対応マップ122においては、v軸の正方向に沿って、投影器Y座標値がほぼ一定の増分で増えていくことを利用し、対象物が連続面であるかどうかだけでなく、平面らしいかどうかを判定する。
【０１０５】
撮像装置１０３及び投影装置１０４の配置、及び投影装置１０４から投影される投影パタン（空間コード）が平面物体に照射される様子を図８に示す。図８においてＣＣ８０１は撮像器座標中心、ＰＣ８０２は投影器座標中心、ＢＬ８０３はＣＣ８０１とＰＣ８０２との間の距離(ベースライン長)、α８０４は撮像器光軸８０５と投影器光軸８０６がなす角、を示す。また、θ８０７は、一つの投影器Y座標値(空間コード)が占める投影方向の広がり角度を示す。なお、８つの空間コードそれぞれが占める投影方向の広がり角度θはどれも等しい。
【０１０６】
ここで、平面物体８０８に対して対応マップを生成すると、平面物体８０８上には８つの空間コードが与えられる。図８に示すように、撮像器座標の投影面ＣＰＰ８０９上で同一の投影器Y座標値である領域の幅をＰＷｉと表す。ｉは投影器Y座標(空間コード)にあたり、本実施形態では第１の実施形態と同じくｉ＝０〜７となる。以降ではＰＷｉを「同一投影器座標幅」と呼ぶことにする。また、隣り合うＰＷｉの比（ＰＷｉ＋１／ＰＷｉ）を、以降では「隣接同一投影器座標幅比」と呼ぶことにする。
【０１０７】
現実的な設定では、詳細な形状を計測するために空間コードのビット数は３よりも多く設定し、そのためθの値は小さくなる場合が多い。また、撮像器光軸と投影器光軸のなす角αがあまり大きいと測定不能領域が増えるため、角度αも小さいことが多い。そのような設定においては、平面物体に対しての隣接同一投影器座標幅比の値はほぼ１になることが期待できる。
【０１０８】
本実施形態では、平滑化範囲設定部１１５は、上記で説明した隣接同一投影器座標幅比が許容範囲内であればその領域を平面とみなし、その領域を平滑化範囲に含める。許容範囲は、メモリ１０６内に同一投影器座標幅比許容範囲１３１として予め登録しておく。同一投影器座標幅比許容範囲１３１は下限値と上限値の２つの値によって定義され、下限値は1.0以下の値、上限値は1.0以上の値とする。すなわち、下限値は隣接する投影器Y座標で同一投影器座標幅が減少する場合、上限は同一投影器座標幅が増加する場合の許容値を表す。
【０１０９】
本実施形態に係るステップＳ６０２における処理について、図９のフローチャートを用いて説明する。図９のフローチャートに従った処理は、第１の実施形態と同様に、画素位置（ｉ，ｊ）に対し、平滑化範囲として適切な範囲をv軸上下方向にそれぞれ探索する処理である。
【０１１０】
ステップＳ９０１では、平滑化範囲設定部１１５は、対応マップ１２２内の画素位置（ｉ，ｊ）における投影器Y座標値の同一投影器座標幅を算出する。これをPW(i, j)と表記する。この処理では、画素位置（ｉ，ｊ）から始めてv軸の負方向と正方向に注目点を移動させながら、投影器Y座標値が異なる値に変化するまでの画素数を同一投影器座標幅としてカウントすればよい。なお、注目点を移動中に測定不能点や画像外点に達した場合には、そこまでの画素数を同一投影器座標幅としてカウントすればよい。このカウント結果、即ち、同一投影器座標幅を変数pw_oldにセットする。
【０１１１】
ステップＳ９０２では、平滑化範囲設定部１１５は、以下の処理で用いる変数ｐｗ＿ｎｅｗ、変数ｋ、変数ｋ＿ｏｌｄ、をそれぞれ、１，−１，０に初期化する。変数ｐｗ＿ｎｅｗは探索中の領域の同一投影器座標幅を示す変数で、ｋは探索する注目点位置を示す変数である。ｋ＿ｏｌｄは探索中の変数ｋの値を保持する変数である。ステップＳ９０３以降では、対応マップ１２２内の画素位置（ｉ，ｊ）からv軸の負方向、すなわち上方向に探索していく。
【０１１２】
ステップＳ９０３では、平滑化範囲設定部１１５は、ＰＹ（ｉ，ｊ＋ｋ）＝ＰＹ（ｉ，ｊ＋ｋ＋１）であるか否かを判断する。この判断の結果、ＰＹ（ｉ，ｊ＋ｋ）＝ＰＹ（ｉ，ｊ＋ｋ＋１）であれば、処理はステップＳ９０４に進み、ＰＹ（ｉ，ｊ＋ｋ）≠ＰＹ（ｉ，ｊ＋ｋ＋１）であれば、処理はステップＳ９０７に進む。ステップＳ９０４では、平滑化範囲設定部１１５は、同一投影器座標幅を示す変数ｐｗ＿ｎｅｗの値を１つインクリメントする。
【０１１３】
ステップＳ９０７では平滑化範囲設定部１１５は、ＰＹ（ｉ，ｊ＋ｋ＋１）＝ＰＹ（ｉ，ｊ）であるか否かを判断する。ステップＳ９０７でＰＹ（ｉ，ｊ＋ｋ＋１）＝ＰＹ（ｉ，ｊ）と判定された場合、画素位置（ｉ，ｊ）と同一の投影器Y座標値である領域を初めて超えた場合にあたるので、ここでは同一投影器座標幅に関する平滑化範囲の判断はせず、ステップＳ９１０に進む。一方、ステップＳ９０７における判断でＰＹ（ｉ，ｊ＋ｋ＋１）≠ＰＹ（ｉ，ｊ）であれば、処理はステップＳ９０８に進む。
【０１１４】
ステップＳ９０８では、平滑化範囲設定部１１５は、現在の同一投影器座標幅pw_newが前回の同一投影器座標幅pw_oldに対して同一投影器座標幅比許容範囲131の上限・下限で示される許容値以内であるかどうかを判定する。この判定の結果、許容値以内にある場合には、処理はステップＳ９０９に進み、許容値以内にない場合には、処理はステップＳ９１１に進む。ステップＳ９１１では、平滑化範囲設定部１１５は、変数ｋに変数ｋ＿ｏｌｄの値を設定する。一方、ステップＳ９０９では、平滑化範囲設定部１１５は、変数ｐｗ＿ｏｌｄに変数ｐｗ＿ｎｅｗの値を設定する。
【０１１５】
ステップＳ９１０では、平滑化範囲設定部１１５は、変数ｐｗ＿ｎｅｗの値を１に初期化し、変数ｋの値を変数ｋ＿ｏｌｄに設定する。
【０１１６】
ステップＳ９０５では、平滑化範囲設定部１１５は、第１の実施形態で説明したように、注目点が画素位置（ｉ，ｊ）と連続面上にあるかどうかという基準によって平滑化範囲にあるかどうかの判定を行う。図９のステップＳ９０５は、第１の実施形態で行っていた判定条件を一つの条件ブロックにまとめて表記してある。即ち、次の複数の条件のＯＲ条件を満たせばよい（少なくとも１つの条件を満たせばよい）。
【０１１７】
・  計測不能点または画像外の条件（Ｓ７０２，Ｓ７１０）
・  投影器Ｙ座標値増加方向の条件（Ｓ７０３，Ｓ７１１）
・  投影器Ｙ座標値増分の条件（Ｓ７０４，Ｓ７１２）
・  輝度値の条件（Ｓ７０５，Ｓ７１３）
・  範囲上限の条件（Ｓ７０６，Ｓ７１４）
この複数の条件のうちどれか一つの条件でも満たしていれば（ＹＥＳ）、処理はステップＳ９１２に進む。ステップＳ９１２では、平滑化範囲設定部１１５は、負方向範囲値をｋ＋１とする。全ての条件が満たされなかった場合（Ｎｏ）には、処理はステップＳ９０６に進む。ステップＳ９０６では、平滑化範囲設定部１１５は、変数ｋの値を１つデクリメントし、処理はステップＳ９０３に進む。
【０１１８】
ステップＳ９１３以降の各ステップにおける処理は、ステップＳ９０１〜Ｓ９１２までの処理と、探索方向が正負逆になるだけで実質的には同様の処理を行っているため、説明は省略する。
【０１１９】
以上説明した処理は、ようは、次のようなものである。先ず、対応マップ画像における着目画素位置から該対応マップ画像の一辺に沿って一方の方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と上記方向に隣接する画素列の長さとの比が許容範囲外であるか否かを判断する。そして、第１の画素列と該第１の画素列と上記方向に隣接する第２の画素列との間で長さの比が許容範囲外であれば、第１の画素列の上記方向における端部を一端とする。
【０１２０】
一方、対応マップ画像の着目画素位置から該対応マップ画像の一辺に沿って上記方向とは逆方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と上記逆方向に隣接する画素列の長さとの比が許容範囲外であるかを判断する。そして、第３の画素列と該第３の画素列と上記逆方向に隣接する第４の画素列との間で長さの比が許容範囲外であれば、第３の画素列の上記逆方向における端部を他端とする。そして、上記一端から上記他端までの間を、平滑化範囲として設定する。
【０１２１】
なお、同一投影器座標幅比許容範囲１３１については事前に適当な値を設定しておくとしたが、その方法は任意である。実際に平面物体に対して対応マップを生成し、その隣接同一投影器座標幅比を実際に計測することによって同一投影器座標幅比許容範囲を決めてもよい。また、対象物の位置姿勢の範囲が想定できるのであれば、隣接同一投影器座標幅比がどの程度であるか事前に算出しておくことも可能である。
【０１２２】
簡単な場合を例にとると、図１０に示すような、平面物が撮像器座標光軸に垂直な姿勢であり、その距離がＷＤであるならば、平面物体上での同一投影器座標幅は以下の式で表すことができ、これをPPWiと記す。
【０１２３】
ＰＰＷｉ＝ＷＤ｛ｔａｎ（α−４θ＋（ｉ＋１）θ）−ｔａｎ（α−４θ＋ｉθ）｝
ＰＰＷ０はｉ＝０に対応するものである。αは投影装置１０４と撮像装置１０３との位置関係で決まり、θは投影装置１０４による投影画角と空間コードのビット数とから定まる。距離ＷＤは隣接同一投影器座標幅の比には影響しない。
【０１２４】
なお、第１，２の実施形態で説明した平滑化範囲設定部１１５で用いるパラメタには、平滑化範囲上限１２５や輝度変動許容範囲１３０や同一投影器座標幅比許容範囲１３１といった様々なものがあった。以下ではこれらのパラメタ値を最適に求めるために、CGを用いたシミュレーションを行う方法の例について記載する。
【０１２５】
先ず、被計測物の形状を表す3Dモデルを準備する。形状がわかっている被計測物の位置姿勢を計測するために３次元座標算出を行う、ということは一般的に行われており、事前に被計測物の形状がわかっていることは珍しくない。図８に示す設定で投影パタンを投影して被計測物を撮影した場合に得られるであろう画像を、3Dモデルに対するCGシミュレーションによって生成する。その際の3Dモデルの位置姿勢は任意とする。
【０１２６】
平滑化範囲設定部１１５の動作を決定するための上記パラメタの値の候補をそれぞれのパラメタごとに設定し、各パラメタ値の候補の全組み合わせからなるパラメタ組候補を複数種類用意しておく。そして、CGシミュレーションで得られた画像に対し、複数種類用意しておいたパラメタ組候補のそれぞれをもちいて平滑化範囲設定部１１５が行った動作を実施し、パラメタ組候補ごとに平滑化範囲を得る。
【０１２７】
得られた複数の平滑化範囲のそれぞれが、3Dモデル上の平面部にどの程度一致しているかどうかの一致度を評価する。3Dモデル上の平面領域は、モデル表面の法線方向が同一であるような領域を平面領域と定めればよい。
【０１２８】
上記のシミュレーションを、3Dモデルの位置姿勢を変えて複数回行ない、平滑化範囲と平面領域が最も安定的に一致するパラメタ組候補を最適パラメタとして選択する。以上の手順でパラメタ値を決定することができる。
【０１２９】
なお、ここで説明したパラメタ選択の計算は、３次元座標算出時ではなく事前に１度行っておけばよい計算なので、計算時間がかかる複雑な処理であっても、被計測物の３次元座標を算出する処理時間には影響しない。
【０１３０】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2014157141.tif 000003
【図２】
2014157141.tif 000004
【図３】
2014157141.tif 000005
【図４】
2014157141.tif 000006
【図５】
2014157141.tif 000007
【図６】
2014157141.tif 000008
【図７】
2014157141.tif 000009
【図８】
2014157141.tif 000010
【図９】
2014157141.tif 000011
【図１０】
2014157141.tif 000012