JP2014157141A - 3次元形状計測装置、3次元形状計測方法 - Google Patents
3次元形状計測装置、3次元形状計測方法 Download PDFInfo
- Publication number
- JP2014157141A JP2014157141A JP2013029435A JP2013029435A JP2014157141A JP 2014157141 A JP2014157141 A JP 2014157141A JP 2013029435 A JP2013029435 A JP 2013029435A JP 2013029435 A JP2013029435 A JP 2013029435A JP 2014157141 A JP2014157141 A JP 2014157141A
- Authority
- JP
- Japan
- Prior art keywords
- pixel
- value
- image
- range
- pixel position
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Length Measuring Devices By Optical Means (AREA)
Abstract
【課題】 被計測物の平面領域に対して滑らかな3次元座標値を算出するための技術を提供すること。
【解決手段】 形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する。パターン画像が投影される被計測物を撮像する。撮像される画像におけるパターン画像のコードを復号化して、該画像における被計測物の領域を示す着目画素に、コード値を割り当てる。着目画素に割り当てられたコード値を、着目画素の周辺の画素に割り当てられたコード値に基づいて変更する。変更されたコード値に基づいて、被計測物の座標を導出する。
【選択図】 図1
【解決手段】 形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する。パターン画像が投影される被計測物を撮像する。撮像される画像におけるパターン画像のコードを復号化して、該画像における被計測物の領域を示す着目画素に、コード値を割り当てる。着目画素に割り当てられたコード値を、着目画素の周辺の画素に割り当てられたコード値に基づいて変更する。変更されたコード値に基づいて、被計測物の座標を導出する。
【選択図】 図1
Description
本発明は、3次元形状計測技術に関するものである。
従来から、2つの座標系を設定し、被計測物上の各点の2つの座標系における座標を求めることにより、三角測量の原理によってその3次元形状を計測する方法が知られている。例えば、投影器を用いて被計測物にパタン光を投影し、その投影方向とは異なる方向から撮像器を用いて被計測物を撮影して画像を取得することで、投影器座標と撮像器座標の対応付けをする方法が知られている。このような方法として、例えば、特許文献1には、一般に「空間コード化法」と呼ばれる手法が記載されている。空間コード化法では、プロジェクタなどの投影器によって、被計測物にスリット状のパタンを何種類も投影し、これをカメラなどの撮像器で撮影する。被計測物の表面上の計測点では、各投影パタンを投影した際の明・暗をビット列として並べた符号(コード)が算出できる。この符号を空間コードと呼ぶ。空間コードは投影器座標(プロジェクタ座標)を表すものである。
このようにして、撮影された画像中の被計測物上の各画素位置について、撮像器座標(カメラ座標)と投影器座標の対応付けを行うことができる。撮像器座標と投影器座標の2つの座標の原点移動および回転の関係は事前にキャリブレーションしておく。被計測物上の点に対して、撮像器座標・投影器座標のそれぞれでの座標が確定すれば、三角測量の原理に基づいて、その計測点の3次元座標を算出することができる。
また、投影パタンの境界位置をサブピクセルレベルで求め、空間コードの値を内挿によって連続値として求めることで、より精密な3次元座標を計測する方法も知られている。
また、空間コード値の差によって物体面が連続面であるかどうかを簡便に判定する方法が知られている。すなわち、連続面においては、空間コード値は±1ずつ変化するという特徴がある。注目する領域が連続面かどうかがわかれば、それに応じた有効な処理が可能である。たとえば、空間コードが±1だけ変化する隣接4点を連続面とみなし、その4点間での内挿処理を行う。このようにすることで、段差のある部分(非連続面)に対しては先に説明した精度向上のための内挿処理を行わず、段差をそのまま保持する効果を生むことができる。この判定処理は空間コード値が±1だけ変化するかどうかを判定するだけの単純な処理であり、高速な処理が可能である。
被計測物にパタンを投影して撮像器座標と投影器座標の対応付けを行う手法はほかにもある。たとえば投影方向を変化させながらスリット光を投影し、これを複数回撮影して対応付けを行う方法があり、一般に光切断法と呼ばれる。この方法では、画像中の被計測物上の各点でスリット光が現れた時の投影方向を記録することができ、それによって画像中の各点において投影器座標における座標を明らかにすることができる。
投影器によるパタン投影を行わない方法もある。これは、異なる位置に設置した2台の撮像器で被計測物を撮影し、2つの画像間での局所的な類似判定によるマッチング(対応点決定)を行う方法であり、一般にステレオ画像法と呼ぶ。一般的には被計測物上のすべての点において対応点を正しく決定することは難しいが、対応が求まった後の処理方法は投影器を使用する方法と同じである。
上記いずれの方法も、被計測物上の注目点が、あらかじめ設定した2つの座標系においてどの座標になるかという対応関係を調べるものである。対応関係が明らかになった後に、三角測量の原理によって3次元計測をするという方法である。
以上述べたように、従来手法では空間コードの内挿およびパタン境界の内挿によって3次元座標値の精度を上げていた。しかし、そのような処理をしてもなお、平面状の物体を計測した際に微小な凹凸が現れるという問題がある。
平面を表す空間コードは、投影器座標と撮像器座標との位置関係によって定まる滑らかな関数に従って変化する必要がある。従来手法における内挿処理では、空間コードが精密に求まる投影パタン境界での値を固定し、投影パタン境界の間にある計測対象点の空間コード値は計測対象点近傍で精密に求められた空間コード値から内挿して求めている。そのために、内挿によって求まった空間コード値は折れ線的に変化する。理想的ななだらかな関数とこの折れ線的関数との差分は、投影パタン境界の前後で周期的に増減を繰り返す。空間コード値の変化率が理想的な滑らかな関数から増減すると、その増減分が3次元座標を算出した際に面の凹または凸となって現れる。これが投影パタン境界のたびに繰り返されるため、平面である対象に対して細かい凹凸のある波面のような3次元座標が算出されてしまう。
被計測物が主に平面で構成されているにもかかわらず、平面であるべき領域に微細な凹凸があると非常に目立ってしまうため、計測された3次元形状を3D表示すると観察者の印象に悪影響を及ぼすという問題がある。また、計測された3次元形状に対して物体認識処理を行うような場合には、平面であるべき部分の計測結果に微細な凹凸があることにより、認識結果に悪影響を及ぼす。特に、工業製品部品のような、平面部を含むことが多い種類の物体が計測対象である場合に、上記の問題の影響は大きくなる。以上のように、狭い範囲で内挿処理する方法によると、計測値の平均値としては真値に近くても、観察者に与える印象や物体の特徴を表す方法として不都合な場合がある。
この問題への一つの対処方法としては、空間コード値による内挿を行うのではなく、3次元座標値で補間を行う方法がある。すなわち、パタン境界線上でのみ3次元座標値を計測し、パタン境界線上にない計測点では、その近傍にある計測済み3次元座標値からの補間処理によって3次元座標値を求める、という方法がある。空間コード値の内挿処理ではなく、3次元座標の値からの補間処理を行えば、自然な3次元座標値を得ることが可能であり、平面部に凹凸が現れるようなことはない。しかし、この手法は、パタン境界線上にない計測点に対して近傍の計測済み点を探索する必要があり、その計算量が多いという問題がある。たとえば計測した3次元座標に基づいてロボットを高速に動作させるような用途の場合は、処理がリアルタイムで高速動作できることが非常に重要であり、計算量が多い処理は不利である。
また、計測対象物がほぼ平面から構成されるという事前知識があれば、得られた3次元座標値群の平面らしい部分に平面モデルをあてはめ、その部分は平面モデルから得られる座標値で置換する等し、理想的な平面で構成された3次元座標値を得ることができる。しかし、この場合も、モデルあてはめに必要な計算量が多いという問題や、モデルを当てはめる対象とする平面らしい領域を精度よく定められるかという問題がある。
本発明はこのような従来の問題に鑑みてなされたものであり、被計測物の平面領域に対して滑らかな3次元座標値を算出するための技術を提供することを目的とする。
本発明の目的を達成するために、例えば、本発明の3次元形状計測装置は、形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する投影手段と、前記パターン画像が投影される前記被計測物を撮像する撮像手段と、前記撮像手段により撮像される画像におけるパターン画像のコードを復号化して、該画像における前記被計測物の領域を示す着目画素に、コード値を割り当てる割り当て手段と、前記着目画素に割り当てられたコード値を、前記着目画素の周辺の画素に割り当てられたコード値に基づいて変更する変更手段と、前記変更されたコード値に基づいて、前記被計測物の座標を導出する導出手段とを備えることを特徴とする。
本発明の構成によれば、被計測物の平面領域に対して滑らかな3次元座標値を算出することができる。またそのために必要な計算処理負荷が小さい、という効果がある。
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載の構成の具体的な実施例の1つである。
[第1の実施形態]
本実施形態では、空間コード化法による3次元形状算出方法をベースにして、被計測物の3次元形状を計測する。しかし、他の3次元形状算出方法(例えば、上記の光切断法やステレオ画像法など)をベースとした場合でも、後述するような対応マップ生成機能を有する手法であれば、以下に説明する技術は同様に適用することができる。
本実施形態では、空間コード化法による3次元形状算出方法をベースにして、被計測物の3次元形状を計測する。しかし、他の3次元形状算出方法(例えば、上記の光切断法やステレオ画像法など)をベースとした場合でも、後述するような対応マップ生成機能を有する手法であれば、以下に説明する技術は同様に適用することができる。
先ず、本実施形態に係る3次元形状計測装置のハードウェア構成例について、図1のブロック図を用いて説明する。なお、図1には、本実施形態に係る説明で用いる主要な構成を示しただけであって、以下に説明する各処理を実現できるのであれば、他の構成を採用しても構わない。
CPU101は、メモリ105に格納されているコンピュータプログラムやメモリ106に格納されているデータを用いて処理を実行する。これによりCPU101は、3次元形状計測装置全体の動作制御を行うと共に、3次元形状計測装置が行うものとして後述する各処理を実行する。
撮像装置103は、現実空間の静止画像を撮像可能な装置であり、後述するように、投影装置104によりパターン像(投影パタン)が投影された被計測物(3次元形状を計測する対象の現実物体)の画像を撮像するものである。撮像装置103によって撮像された画像は後述するように、メモリ106内に画像121として格納される。なお、撮像装置103は動画像を撮像するようにしても構わないが、いずれにせよ、メモリ106には、投影装置104によりパターン像が投影された被計測物の画像が画像121として格納されることになる。
投影装置104は、例えば、プロジェクタやレーザー光発生装置などの装置であり、CPU101によって指定されたパターン像を、被計測物に対して投影することができる装置である。
メモリ105には、後述する各処理をCPU101に実行させるためのコンピュータプログラムが格納されており、メモリ106には、後述する各処理においてCPU101によって用いられるデータが格納されている。例えば、従来から知られている3次元形状算出のアルゴリズムに必要なデータ類は事前に準備され、メモリ106に格納されている。例えば、投影パタン127、三角測量の原理に基づいて3次元形状を算出するために必要なデータとしてのキャリブレーションデータ128(撮像装置103と投影装置104との位置姿勢関係を示すデータ)がメモリ106に格納されている。投影パタン127は周知の如く、撮像器座標と投影器座標との対応関係を明らかにするために用いられるパタン形状を有する。パタン形状の種類は複数であってもよく、空間コード化法でも複数の投影パタンが用いられる。
また、メモリ105であってもメモリ106であっても良いが、CPU101が各処理を実行する際に用いるワークエリアや、処理過程でデータを一時的に記憶するためのエリアを有する。
なお、図1では、コンピュータプログラムとデータとをそれぞれ別個のメモリに格納するようにしているが、これに限るものではなく、例えば、1つのメモリにコンピュータプログラムとデータとを格納するようにしても構わない。上記の各部はいずれも、バス102に接続されている。
ここで、以下に説明する処理で用いる空間コードの一例について説明しておく。本実施形態では説明を簡単にするために、空間コードは3bitで表現されるとし、投影パタン127として図4(a)〜(c)に示す3枚を用いるものとする。図4(a)に示す投影パタン(以下、投影パタンaと呼称する)は投影器座標(投影パタン内における座標)を上下2つの領域に分け、上半分領域を黒(暗部)、下半分領域を白(明部)としたものである。図4(b)に示す投影パタン(以下、投影パタンbと呼称する)は投影パタンaの上半分領域及び下半分領域のそれぞれを更に上下2つに分け、それぞれの上半分領域を黒、下半分領域を白としたものである。図4(c)に示す投影パタン(以下、投影パタンcと呼称する)はさらに同様に領域の分割数を増やしたものである。実際の応用においてはよりビット数の多い空間コードを使用することが普通であり、投影パタンの枚数はビット数に応じて増えることに注意されたい。
図4に示した3枚の投影パタンを用いると、投影器座標のY座標方向(縦方向)を8個(2の3乗)の領域に区分することになり、それぞれの領域に対して個別の空間コード値を付与できる。以降では、投影器座標のY座標値のことを、投影器Y座標値と呼ぶことにする。この例では、投影器Y座標値は8つの離散的な値をとりうる座標と考えることができ、空間コード値は投影器Y座標値だと考えることができる。投影器座標のY軸は投影パタンの上辺を0とし、下に向かって増える座標とする。図4の右側に、区分される領域と空間コード(投影器Y座標値に等しい)との対応を記載した。カッコ内は空間コードの2進数表示である。なお、本実施形態における空間コードの最下位ビットは、投影パタンaを投影した被計測物の撮像画像における画素値が閾値以上であったか否かをそれぞれ1,0で表したものである。最下位ビットから1ビット上位のビットは、投影パタンbを投影した被計測物の撮像画像における画素値が閾値以上であったか否かをそれぞれ1,0で表したものである。最上位ビットは、投影パタンcを投影した被計測物の撮像画像における画素値が閾値以上であったか否かをそれぞれ1,0で表したものである。このようにすることで、空間コードの値が投影器Y座標値と等しくなるようにした。
投影装置104が投影パタンa、投影パタンb、投影パタンcをこの順で被計測物に投影し、撮像装置103が該投影の度に被計測物の画像を撮像すると、投影装置104から見て一番上(投影器Y座標値=0に対応する)の部分には、常に黒色が投影される。そのため、この部分には空間コード値0(3ビットの2進数で000)が付与される。また、一番下(投影器Y座標値=7に対応する)の部分には、常に白色が投影されるため、この部分には空間コード値7(3ビットの2進数で111)が付与される。なお、投影パタンは上下方向に領域分割しているので、投影装置104と撮像装置103は上下に並べて配置する。
空間コード化法以外の3次元形状算出方法を用いる場合は、用いる方法に適した投影パタンを投影パタン127としてメモリ106に格納すればよい。たとえば光切断法では、パタンは1種類のスリットパタンとしておき、投影方向を変えながら複数枚撮影すれば、撮像器座標と投影器座標との対応マップを生成できる。
次に、本実施形態に係る3次元形状計測装置が行う処理の詳細について説明する。係る処理は、被計測物を計測した結果を距離画像126としてメモリ106に格納する処理である。距離画像とは周知の通り、距離画像中の各画素の画素値が、該画素に写っている対象物と該距離画像を撮像した撮像装置との間の距離を示すような画像である。本実施形態では、距離画像126は、撮像装置103から得られる画像121中の各画素位置に対して、撮像装置103を基準とする座標系における3次元座標(x、y、z)のうち奥行き値(z値)を記録した画像とする。ここで、「撮像装置103を基準とする座標系」とは、撮像装置103中の1点を原点とし、該原点で互いに直交する3軸をそれぞれx、y、z軸(ただし撮像装置103の撮像方向をz軸とする)とする座標系のことである。
次に、本実施形態に係る3次元形状計測装置が行う処理について、同処理のフローチャートを示す図2を用いて説明する。なお、以下の説明では、メモリ105内にコンピュータプログラムとして格納されているものとして図2に示している各機能部を処理の主体として説明する場合がある。しかし実際には、CPU101が対応する機能部(コンピュータプログラム)を実行することで、対応する処理が実行される。
ステップS201では、パタン投影部112は先ず、メモリ106に格納されている投影パタン127の中から未選択の投影パタンを所定の順番に従って1つ選択し、投影装置104に該選択した投影パタンを被計測物に対して投影させる。ここでは、投影パタンa、投影パタンb、投影パタンcの順に投影するものとする。
ステップS202では、画像取得部111は撮像装置103を制御して、投影パタンが投影されている被計測物を撮像させ、該撮像により得られる撮像画像を画像121としてメモリ106に格納する。
ステップS203では、パタン投影部112はメモリ106に格納されている全ての投影パタンを選択したか否かを判断する。この判断の結果、全ての投影パタンを選択した場合には、処理はステップS204に進み、未選択の投影パタンが残っている場合には、処理はステップS201に戻る。
然るに、処理がステップS204に進んだ時点で、被計測物にはメモリ106に格納されている全ての投影パタンが投影されていることになる。また、メモリ106には、投影された投影パタンごとに、該投影パタンが投影された被計測物の撮像画像が格納されていることになる。
本実施形態では、3次元形状算出方法として空間コード化法を用いて説明するので、空間コード化法に必要な枚数分の撮像画像(パタン投影画像)が、メモリ106に画像121として格納されていることになる。すなわち、投影パタンが図4で示す3枚であった場合、3枚の撮像画像が画像121としてメモリ106に格納されていることになる。
ステップS204では、対応マップ生成部113は、メモリ106に画像121として格納されているそれぞれの撮像画像を用いて、撮像器座標と投影器座標との対応関係を表した対応マップを生成し、対応マップ122としてメモリ106に格納する。ステップS204における処理の詳細については後述する。
次に、ステップS205では、平滑化部114及び平滑化範囲設定部115は、ステップS204で生成した対応マップに対して平滑化処理を行い、平滑化処理済みの対応マップを、平滑化対応マップ123としてメモリ106に格納する。ステップS205における処理の詳細については後述する。
次に、ステップS206では、3次元座標算出部116は、ステップS205でメモリ106に格納された平滑化対応マップ123と、メモリ106に格納されているキャリブレーションデータ128と、を用いて3次元座標を算出する。そして3次元座標算出部116は、この算出した3次元座標を距離画像126の形式でメモリ106に格納する。
平滑化対応マップ123は、対応マップ122を平滑化したものであるが、撮像器座標と投影器座標の対応関係を記述したデータであることには変わりない。撮像器座標と投影器座標の対応関係が明らかであれば、従来から知られている3次元座標算出方法と同じ方法によって、3次元座標を算出することができる。空間コード化法による3次元座標算出方法については、よく知られた方法であるため、ここでは説明を割愛する。
次に、上記のステップS204における処理の詳細について、図3のフローチャートを用いて説明する。本実施形態では3次元座標算出方法として空間コード化法を用いて説明するので、図3に示した処理内容は、空間コード化法における対応マップ生成方法と同じ処理内容である。
対応マップ122とは、撮像器座標と投影器座標とを対応づけるマップを意味する。より詳しくは、対応マップ122上の着目画素位置には、明部及び暗部によって区分される投影パタン上の各領域に固有の値のうち、撮像画像上の該着目画素位置に写っている投影パタン部分に対応する値(空間コード値)、が設定されている。
本実施形態では、対応マップ122を、撮像装置103が撮像する撮像画像と同サイズの画像としてメモリ106に格納する。そして対応マップ122を構成する各画素の画素値は、投影器座標を表す値とする。本実施形態では空間コード化法を使っているので、投影器座標を表す値は投影器座標の領域を示す空間コード値となる。
ステップS301では、対応マップ生成部113は、対応マップ122を構成する各画素の画素値を0に初期化すると共に、変数Nの値を1に初期化する。
ステップS302では、対応マップ生成部113は、メモリ106に格納されている撮像画像のうちN番目の撮像画像を選択する。どの撮像画像をどの順番で選択するのかについては予め定められているものとする。ここでは、投影パタンa、投影パタンb、投影パタンcの順に投影するので、投影パタンaを投影した被計測物の撮像画像、投影パタンbを投影した被計測物の撮像画像、投影パタンcを投影した被計測物の撮像画像、の順に得ることになる。そこで、投影パタンaを投影した被計測物の撮像画像、投影パタンbを投影した被計測物の撮像画像、投影パタンcを投影した被計測物の撮像画像、の順に選択することにする。
ステップS303では、対応マップ生成部113は、ステップS302で選択した撮像画像を二値化して二値画像を生成する。この二値画像における各画素の画素値は0,1の何れかである。なお、撮像画像そのものが二値画像である場合には、ステップS303における処理は省く。
ステップS304では、対応マップ生成部113は、二値画像上の画素位置(x、y)における画素値p(0若しくは1)を、対応マップ122上の画素位置(x、y)における画素値(3ビット)のうちのNビット目に設定する。この処理を、二値画像上の全ての画素位置について(全てのx、yについて)実行する。
ステップS305では、対応マップ生成部113は、メモリ106に格納されている全ての撮像画像を選択したか否かを判断する。この判断の結果、全ての撮像画像を選択した場合には、図3のフローチャートに従った処理は完了する。一方、まだ未選択の撮像画像が残っている場合には、処理はステップS306に進む。ステップS306では、対応マップ生成部113は、変数Nの値を1つインクリメントする。そして処理はステップS301に戻り、以降の処理を繰り返す。
以上の処理により、対応マップ122を構成する各画素には、3ビットの画素値が設定される。そして、対応マップ122において画素位置(x、y)における3ビットの画素値は、上記3枚の撮像画像のそれぞれから収集した「画素位置(x、y)における画素値(ビット)」を並べたビット列(=空間コード値)となっている。
なお、対応マップ122の画素値は、そのまま投影器Y座標値を表すようにセットすることとした。すなわち、上記で説明した方法では、空間コードはそのまま投影器Y座標値になるように設定してあった。しかし、空間コードの実現方法としては他の方法も考えられる。例えば特許文献1にあるように、空間コードをグレイコードで表現する方法もある。空間コードがグレイコードで表現される場合は、図3のフローチャートに従った処理を行うと、対応マップ122にはグレイコード値がいったん格納される。ここから投影器Y座標値を表す対応マップを求めるには、図3のフローチャートに従った処理が終了した後で、対応マップ122にセットされたグレイコード値を投影器Y座標値に変換する処理を行えばよい。
以上のようにして、メモリ106には対応マップ122が格納される。対応マップは、画像121に格納されている画像と同じサイズの画像であり、その各画素位置における画素値は、画像121の各画素位置に対応する投影器Y座標値であるような画像だとみなすことができる。
対応マップ122を画像としたときに、撮像画像と対応マップ122との関係を図5に示す。図5(a)には撮像画像を示し、図5(b)には画像として表した対応マップ122を示している。
それぞれの画像において原点は左上隅としており、この原点から水平方向にu軸、垂直方向にv軸をとっている。また、それぞれの画像の水平方向のサイズはW、垂直方向のサイズはHとしている。
図5において、撮像画像中における画素位置(i,j)における輝度値をI(i,j)と表している。対応マップ122中の画素位置(i,j)には、対応マップ122を生成するために用いたそれぞれの撮像画像において画素位置(i,j)に写っている投影パタン部分の画素値(ビット値)を並べたビット列が画素値PY(i,j)として格納されている。このことから、撮像画像上の画素位置(撮像器座標)(i,j)に対応する対応マップ122上の画素位置(i,j)における画素値は投影器Y座標値PY(i,j)であるから、この対応マップ122によって撮像器座標と投影器座標の対応付けが可能になる。
なお、2つの異なる視点から得られた情報を用いて三角測量の原理で3次元計測を行う方法においては、2つの異なる視点から同時に観察できない対象物は3次元計測できないという問題がある。投影器を用いる方法の場合は以下のようにして計測不能領域を決定できる。すなわち、図4に示した空間コード用の投影パタンに加えて全点灯パタン(全面が白のパタン)と全消灯パタン(全面が黒のパタン)を準備する。この2パタンを投影し、両者の差分が閾値以下の画像領域を影であるとして計測不能領域と決めることができる。このようにして、図3のフローチャートを用いて説明した処理とは別に、計測不能領域を算出する処理をしておくことが可能である。計測不能領域を表すためには、図5で示した画像と同サイズの2値のマスク画像を用意し、計測不能領域を構成する各画素の画素値に0、その他の領域を構成する各画素の画素値に1、を設定するなどして、このマスク画像を構成すれば良い。
このようにして生成したマスク画像を計測不能領域129としてメモリ106に格納する。そして、後述する処理により3次元座標算出部116が3次元座標を算出する処理を実行する際には、計測不能領域に関しては値を算出しないようにする。
また、全点灯パタンを投影した際の画像を、画像121としてメモリ106に格納しておけば、この画像を平滑化範囲設定部115が使用することができる。後述する平滑化範囲設定部115に係る説明では、その方法を述べる。全点灯パタン・全消灯パタンを投影した画像(それぞれ全点灯画像、全消灯画像)は、計測不能領域の算出以外でも用いることがあり、例えばパタンの2値化判定の際の閾値を決定する際に用いられることがある。すなわち、各画素位置における全点灯画像と全消灯画像の輝度値の中間値をもって、その画素位置における2値化の閾値とすることが考えられる。したがって、対応マップ生成処理の一環として、この2つの投影パタンで撮影した画像も取得することが多い。
ここまでの処理は、従来から知られている空間コード化法の処理と同じものである。なお、空間コード化法以外の方法で、例えば光切断法などによって対応マップを生成してもかまわない。
次に、平滑化部114及び平滑化範囲設定部115の動作について説明する。上記の通り、平滑化部114及び平滑化範囲設定部115により、対応マップ122中の各投影器Y座標値を平滑化し、平滑化処理済みの対応マップを、平滑化対応マップ123としてメモリ106に格納する。本実施形態では、空間コードは3bitで表現されているので、投影器Y座標値は0から7までの離散的な整数値である。平滑化部114は整数値を連続的な実数値として平滑化するが、その前に平滑化範囲設定部115は適切な平滑化範囲を設定し、平滑化部114はその範囲内の値を用いた平滑化を行っていく。
対応マップ122は前述のとおり図5(b)のようになっている。以下の説明では、本処理の説明では対応マップ122は画像として扱う。すなわち、対応マップ122に格納されているデータを画素と呼び、その値(投影器Y座標値)を画素値と呼ぶことにする。画像の構成は、図5に示す通り、画像幅画素数はW、画像高さ画素数はHとし、画像座標(u, v)は画像左上を原点としてu軸を右方向、v軸を下方向にとることにして説明する。
上記のステップS205において平滑化部114及び平滑化範囲設定部115が行う処理の詳細について、図6のフローチャートを用いて説明する。ステップS601では、平滑化部114は、以下の処理で用いる変数i,jをそれぞれ0に初期化する。
ステップS602では、平滑化範囲設定部115は、対応マップ122上の画素位置(i,j)を基準とする(例えば中心とする)平滑化範囲を設定する。この設定する平滑化範囲は、画像のv軸の正方向(画像の下方向)と負方向(画像の上方向)の画素数で表現し、メモリ106に平滑化範囲124として格納する。より詳しくは、v軸に対して正方向(下方向)の範囲を正方向範囲値、負方向(上方向)の範囲を負方向範囲値として格納する。負方向範囲値は0以下、正方向範囲値は0以上の整数になる。ステップS602における処理の詳細については後述する。
次に、ステップS603では、平滑化部114は、画素位置(i,j)に対してステップS602で設定された平滑化範囲内の画素値を用いて、画素位置(i,j)における画素値に対する平滑化処理を行う。この平滑化処理は次のようにして行う。
先ず平滑化部114は、平滑化範囲に含まれる各画素の画素値の平均勾配gradを算出する。平均勾配gradは以下の式を計算することで求める。以下の式では、負方向範囲値をmin、正方向範囲値をmaxと記した。minは0または負の値になり、maxは0または正の値になることに注意されたい。
平均勾配値grad(i,j)={PY(i,j+max)−PY(i,j+min)}/(max−min+1)
次に、平滑化部114は、以下の式を計算することで、画素位置(i,j)における投影器Y座標値を平滑化した値である平滑化値PYsmooth(i,j)を算出する。画素値PY(i, j)は離散値であるが、上記平均勾配値や以下の平滑化値は実数値である。
次に、平滑化部114は、以下の式を計算することで、画素位置(i,j)における投影器Y座標値を平滑化した値である平滑化値PYsmooth(i,j)を算出する。画素値PY(i, j)は離散値であるが、上記平均勾配値や以下の平滑化値は実数値である。
平滑化値PYsmooth(i,j)=PY(i,j+min)+grad×|min|
このような平滑化値算出の方法によれば、画素位置(i,j)の上下方向の所定範囲内で値が直線近似されて平滑化されたことになる。平滑化の方法としては、上記で説明した方法によらず、他の方法を用いてもかまわない。たとえば平滑化範囲内の各画素位置における投影器Y座標値に対して、画素位置(i,j)からの距離の逆数を重みとした重み付き平均値を算出し、これを平滑化値としてもよい。その場合の平滑化値は以下の式を計算することで求めることができる。
このような平滑化値算出の方法によれば、画素位置(i,j)の上下方向の所定範囲内で値が直線近似されて平滑化されたことになる。平滑化の方法としては、上記で説明した方法によらず、他の方法を用いてもかまわない。たとえば平滑化範囲内の各画素位置における投影器Y座標値に対して、画素位置(i,j)からの距離の逆数を重みとした重み付き平均値を算出し、これを平滑化値としてもよい。その場合の平滑化値は以下の式を計算することで求めることができる。
PYsmooth(i,j)=Σk=min max{(PY(i,j+k))/(1+|k|)}/{Σk=min max(1/(1+|k|)}
また、平滑化範囲内の投影器Y座標値に対して最小二乗法で直線または適当な多項式の方程式を求め、その方程式によって画素位置(i,j)における平滑化値を求めてもよい。また、上記で説明したように、v軸方向(上下方向)でのみ平滑化するのではなく、u軸方向(左右方向)の値も使って平面的に平滑化してもよい。いずれにせよ、投影器Y座標値の変化率が平滑化範囲内でなるべく増減を繰り返さない方法で平滑化することが望ましい。そのようにすれば、3次元座標算出部116で投影器Y座標値を3次元座標に変換した際に平面部に凹凸が目立たなくなる。
また、平滑化範囲内の投影器Y座標値に対して最小二乗法で直線または適当な多項式の方程式を求め、その方程式によって画素位置(i,j)における平滑化値を求めてもよい。また、上記で説明したように、v軸方向(上下方向)でのみ平滑化するのではなく、u軸方向(左右方向)の値も使って平面的に平滑化してもよい。いずれにせよ、投影器Y座標値の変化率が平滑化範囲内でなるべく増減を繰り返さない方法で平滑化することが望ましい。そのようにすれば、3次元座標算出部116で投影器Y座標値を3次元座標に変換した際に平面部に凹凸が目立たなくなる。
ここまでの処理で、離散値である対応マップの画素値は平滑化され、v軸方向に滑らかな連続値が算出される。従来行われているような、対応マップ中の画素値が1だけ変動する範囲内での内挿処理ではなく、平滑化範囲124で示される範囲で平滑化することが本技術における特徴である。
次に、ステップS604では、平滑化部114は、ステップS603で算出した平滑化値を、メモリ106内の平滑化対応マップ123における画素位置(i,j)の画素値として設定する。
ステップS605では、平滑化部114は、変数jの値を1つインクリメントする。ステップS606では、平滑化部114は、j<Hであるか否かを判断する。この判断の結果、j<Hであれば処理はステップS602に戻る。一方、j≧Hであれば、ステップS607に進む。
ステップS607では、平滑化部114は、変数jを0に初期化し、変数iの値を1つインクリメントする。ステップS608では、平滑化部114は、i<Wであるか否かを判断する。この判断の結果、i<Wであれば処理はステップS602に戻る。一方、i≧Wであれば、図6のフローチャートに従った処理は終了する。
次に、平滑化範囲設定部115の動作について、より詳細に説明する。先ず、平滑化範囲設定部115が行う処理の概要について説明する。平滑化範囲設定部115によって行われる処理では、画素位置(i,j)を開始点として、対応マップ122におけるv軸の正方向及び負方向の2方向にそれぞれ、特定の条件を満たす範囲を探索する。特定の条件とは、本実施形態では以下の通りである。
・ 探索している画素位置が測定不能点でないこと
・ 投影器Y座標値の増加方向がv軸正方向であること
・ 隣接する投影器Y座標値の差分が1以内であること
・ 輝度画像における隣接する輝度値変化が所定以内であること
・ 探索範囲の広さが規定の上限値以内であること
次に、上記のステップS602において平滑化範囲設定部115が行う処理の詳細について、図7のフローチャートを用いて説明する。ステップS701では、平滑化範囲設定部115は、以下の処理で用いる変数kの値を−1に初期化する。この変数kは、画素位置(i,j)から上下方向に平滑化範囲を探索する際の画素位置(探索位置)を示すための変数である。また、ステップS701では、平滑化範囲設定部115は、メモリ106に格納されている平滑化範囲としての2つの値(正方向範囲値と負方向範囲値)を0に初期化しておく。
・ 投影器Y座標値の増加方向がv軸正方向であること
・ 隣接する投影器Y座標値の差分が1以内であること
・ 輝度画像における隣接する輝度値変化が所定以内であること
・ 探索範囲の広さが規定の上限値以内であること
次に、上記のステップS602において平滑化範囲設定部115が行う処理の詳細について、図7のフローチャートを用いて説明する。ステップS701では、平滑化範囲設定部115は、以下の処理で用いる変数kの値を−1に初期化する。この変数kは、画素位置(i,j)から上下方向に平滑化範囲を探索する際の画素位置(探索位置)を示すための変数である。また、ステップS701では、平滑化範囲設定部115は、メモリ106に格納されている平滑化範囲としての2つの値(正方向範囲値と負方向範囲値)を0に初期化しておく。
ステップS702では、平滑化範囲設定部115は、対応マップ122における画素位置(i,j+k)(探索画素位置)が、計測不能領域内の画素位置であるか、若しくは対応マップ122外の画素位置であるか、を判断する。画素位置(i,j+k)が計測不能領域内の画素位置であるか否かは、計測不能領域129を参照し、計測不能領域129内の画素位置(i,j+k)における画素値が0であるか否かを判断すればよい。計測不能領域129内の画素位置(i,j+k)における画素値が1であれば、対応マップ122内の画素位置(i,j+k)は計測不能領域外であると判断することができる。一方、計測不能領域129内の画素位置(i,j+k)における画素値が0であれば、対応マップ122内の画素位置(i,j+k)は計測不能領域内であると判断することができる。
ステップS702における判断の結果、探索画素位置が計測不能領域内の画素位置であるか、若しくは対応マップ122外の画素位置であれば、処理はステップS707に進む。ステップS707では、平滑化範囲設定部115は、負方向範囲値をk+1とする。これは、計測不能領域のデータを用いて平滑化をしないことを意図している。
一方、探索画素位置が計測不能領域外の画素位置であり且つ対応マップ122内の画素位置であれば、処理はステップS703に進む。ステップS703では、平滑化範囲設定部115は、PY(i,j+k+1)<PY(i,j+k)であるか否かを判断する。
ここで、対応マップ122は、連続面であれば、投影器Y座標値は下方向(v軸正方向)に向かって単調に増加するという性質がある。PY(i,j+k+1)<PY(i,j+k)であれば、(i,j+k+1)と(i,j+k)は連続した面上にないということになる。
然るにこの判断の結果、PY(i,j+k+1)<PY(i,j+k)であれば、処理はステップS707に進み、上記の通り、負方向範囲値をk+1とする。一方、PY(i,j+k+1)≧PY(i,j+k)であれば、処理はステップS704に進む。
ステップS704では、平滑化範囲設定部115は、PY(i,j+k+1)−PY(i,j+k)>1であるか否かを判断する。対応マップ122は、連続面であれば隣り合う投影器Y座標値は最大で1しか変動しないという性質がある。PY(i,j+k+1)−PY(i,j+k)>1であれば、(i,j+k+1)と(i,j+k)は連続した面上にないことになる。
然るにこの判断の結果、PY(i,j+k+1)−PY(i,j+k)>1であれば、処理はステップS707に進み、上記の通り、負方向範囲値をk+1とする。一方、PY(i,j+k+1)−PY(i,j+k)≦1であれば、処理はステップS705に進む。
ステップS705では、平滑化範囲設定部115は、画像121としてメモリ106に格納した全点灯画像中の画素値を用いて、輝度値の勾配が規定の範囲以内かどうかを判定する。ここで、全点灯画像内の画素位置(i,j)における輝度値をIall(i,j)と表す。ここでは、Iall(i,j+k+1)とIall(i,j+k)の比を算出し、別途あらかじめ定めてある輝度変動許容範囲130と比較することで判定することにする。これらの輝度値比は以下の式を計算することで求めることができる。
輝度値比=Iall(i,j+k)/Iall(i,j+k+1)
例えば、連続面での輝度変動は10%以内までである、とするのであれば、範囲の下限値0.9と上限値1.1を輝度変動許容範囲130としてメモリ106に格納しておく、などすれば良い。この処理の意図は、輝度画像において輝度勾配が大きく変動する点は2つの連続でない面の境界とみなす、ということである。この処理の効果は被計測物の表面の性質に左右される。被計測物の表面に模様がなく、連続面であれば輝度画像上で輝度値が一様であると期待されるのであれば、本ステップの処理の効果が期待できる。そのような被計測物とは、例えば工業製品の部品などである。本ステップでは、2点の輝度比が規定の範囲外であれば連続面でないと判定し、処理はステップS707に進む。なお、輝度値を使って連続面の判定をする方法は、上記以外の方法であってもよい。たとえば、事前に全点灯画像にソーベルやタプラシアンなどのエッジ抽出フィルタ処理をかけ、得られたエッジ位置を非連続面の境界として記録しておいてもよい。また、輝度変動許容範囲130が非常に大きくなるように設定しておけば、本ステップの処理を事実上キャンセルすることができる。その場合は他ステップでの条件を満たす限り平滑化範囲を広げるように設定することができる。
例えば、連続面での輝度変動は10%以内までである、とするのであれば、範囲の下限値0.9と上限値1.1を輝度変動許容範囲130としてメモリ106に格納しておく、などすれば良い。この処理の意図は、輝度画像において輝度勾配が大きく変動する点は2つの連続でない面の境界とみなす、ということである。この処理の効果は被計測物の表面の性質に左右される。被計測物の表面に模様がなく、連続面であれば輝度画像上で輝度値が一様であると期待されるのであれば、本ステップの処理の効果が期待できる。そのような被計測物とは、例えば工業製品の部品などである。本ステップでは、2点の輝度比が規定の範囲外であれば連続面でないと判定し、処理はステップS707に進む。なお、輝度値を使って連続面の判定をする方法は、上記以外の方法であってもよい。たとえば、事前に全点灯画像にソーベルやタプラシアンなどのエッジ抽出フィルタ処理をかけ、得られたエッジ位置を非連続面の境界として記録しておいてもよい。また、輝度変動許容範囲130が非常に大きくなるように設定しておけば、本ステップの処理を事実上キャンセルすることができる。その場合は他ステップでの条件を満たす限り平滑化範囲を広げるように設定することができる。
一方、上記の輝度比が規定の範囲内であれば、処理はステップS706に進む。ステップS706では、平滑化範囲設定部115は、|k|>平滑化範囲上限125であるか否かを判断する。この判断の結果、|k|>平滑化範囲上限125であれば、処理はステップS707に進み、|k|≦平滑化範囲上限125であれば、処理はステップS708に進む。
ステップS708では平滑化範囲設定部115は、変数kの値を1つデクリメントし、処理はステップS702に進む。そしてこの変更した変数kを用いて以降の処理を行う。平滑化範囲は大きすぎると被計測物の湾曲面で誤差が大きくなる。滑らかな湾曲面は連続面ではあるが平面ではないので、そのような面を含む計測対象については適当な上限で平滑化範囲を打ち切らないといけない。しかし、前述のとおり、上限値は大きくして平滑化範囲を大きくした方が、平面的な部分に対する計測結果の凹凸を減らすことができる。対象物にどの程度の湾曲面があるのかによって適切な上限値をセットしておく。上限値に非常に大きな値をセットしておけば、このステップでの処理を事実上キャンセルすることができ、他ステップの条件を満たす限り平滑化範囲を広げるように設定することができる。
ここまでの処理で、画素位置(i,j)から上方向(v軸の負方向)への平滑化範囲探索が決まったので、以下では下方向(v軸の正方向)へ平滑化範囲を探索する。探索方向が異なるだけで、それぞれのステップでの処理の意図はここまでに説明したものと同様である。
ステップS709では、平滑化範囲設定部115は、変数kの値を1に初期化する。ステップS710では、平滑化範囲設定部115は、対応マップ122における画素位置(i,j+k)が、計測不能領域内の画素位置であるか、若しくは対応マップ122外の画素位置であるか、を判断する。この判断の結果、探索画素位置が計測不能領域内の画素位置であるか、若しくは対応マップ122外の画素位置であれば、処理はステップS715に進む。ステップS715では、平滑化範囲設定部115は、正方向範囲値をk−1とする。
一方、探索画素位置が計測不能領域外の画素位置であり且つ対応マップ122内の画素位置であれば、処理はステップS711に進む。ステップS711では、平滑化範囲設定部115は、PY(i,j+k−1)>PY(i,j+k)であるか否かを判断する。この判断の結果、PY(i,j+k−1)>PY(i,j+k)であれば、処理はステップS715に進み、PY(i,j+k−1)≦PY(i,j+k)であれば、処理はステップS712に進む。
ステップS712では、平滑化範囲設定部115は、PY(i,j+k)−PY(i,j+k−1)>1であるか否かを判断する。この判断の結果、PY(i,j+k)−PY(i,j+k−1)>1であれば、処理はステップS715に進み、PY(i,j+k)−PY(i,j+k−1)≦1であれば、処理はステップS713に進む。
ステップS713では、平滑化範囲設定部115は、画像121としてメモリ106に格納した全点灯画像中の画素値を用いて、輝度値の勾配が規定の範囲以内かどうかを、ステップS705と同様にして判定する。2点の輝度比が規定の範囲外であれば連続面でないと判定し、処理はステップS715に進む。一方、輝度比が規定の範囲内であれば、処理はステップS714に進む。
ステップS714では、平滑化範囲設定部115は、|k|>平滑化範囲上限125であるか否かを判断する。この判断の結果、|k|>平滑化範囲上限125であれば、処理はステップS715に進み、|k|≦平滑化範囲上限125であれば、処理はステップS716に進む。
ステップS716では平滑化範囲設定部115は、変数kの値を1つインクリメントし、処理はステップS712に進む。そしてこの変更した変数kを用いて以降の処理を行う。
本実施形態に係る平滑化範囲設定部115の説明では、対応マップ122の値に応じて画素位置(i,j)に対する平滑化範囲を設定する方法として、複数の判断基準を説明した。しかし、これら複数の判断基準をすべて備えている必要はない。たとえば輝度値による判断を行うステップS705,S713における処理や、範囲上限により判断するステップS706,S714における処理は行わないような構成にすることも可能である。
このように、本実施形態によれば、投影パタン境界を越えた広い範囲の連続面に対して、投影器Y座標値を平滑化することが可能になる。連続だが平面ではないような面が被計測物にある場合は、平滑化範囲上限値を調整することで対応できる。結果として、平面物体を計測した際に得られる3次元形状に微小な凹凸状のノイズが現れにくい、という効果がある。対象物が連続面においてほぼ平面で構成されているとわかっている場合には、本実施形態で説明したような方法で効果が期待できる。また、上記で説明した処理は画像メモリの単純な1次元探索処理であり、高速な処理が可能である。
なお、本実施形態ではいくつかの構成例を説明したが、いずれの構成も、以下の基本構成の一例に過ぎない。基本構成では、撮像器座標と投影器座標との対応関係を表す対応マップ画像を取得する。取得もとは特定の取得元に限らない。ここで、該対応マップ画像上の着目画素位置には、投影器Y座標値を示すコード値が設定されている。そして、この対応マップ画像を用いて被計測物の3次元形状を計測する。
基本構成ではこのような構成を前提とし、以下の構成を特徴とする。即ち、対応マップ画像中の各画素位置に対して、該画素位置の周囲の画素の画素値に基づいて決定した範囲を設定し、設定した範囲内で画素値の平滑化を行う。そして、平滑化後の対応マップ画像を用いて、被計測物の3次元形状を計測する。
範囲の設定においては、対応マップ画像における着目画素位置(i,j)から順に、該対応マップ画像の一辺に沿って一方の方向に各画素位置の画素値を参照する。そして、kを負の整数とした場合に、参照した画素位置(i,j+k+1)における画素値が画素位置(i,j+k)における画素値よりも小さい場合には、(k+1)を一端とする。
一方、対応マップ画像における着目画素位置(i,j)から順に前記方向とは逆の方向に各画素位置の画素値を参照する。そして、kを正の整数とした場合に、参照した画素位置(i,j+k−1)における画素値が画素位置(i,j+k)における画素値よりも大きい場合には(k−1)を他端とする。そして、一端から他端までの間を前記範囲として設定する。
また、範囲の設定においては、対応マップ画像における着目画素位置(i,j)から順に、該対応マップ画像の一辺に沿って一方の方向に各画素位置の画素値を参照する。そして、kを負の整数とした場合に、参照した画素位置(i,j+k+1)における画素値から画素位置(i,j+k)における画素値を引いた結果が1よりも大きい場合には、(k+1)を一端とする。
一方、対応マップ画像における着目画素位置(i,j)から順に、前記方向とは逆の方向に各画素位置の画素値を参照する。そして、kを正の整数とした場合に、参照した画素位置(i,j+k)における画素値から画素位置(i,j+k−1)における画素値を引いた結果が1よりも大きい場合には、(k−1)を他端とする。そして、一端から他端までの間を前記範囲として設定する。
すなわち、形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影し、パターン画像が投影される被計測物を撮像する。そして、撮像される画像におけるパターン画像のコードを復号化して、該画像における被計測物の領域を示す着目画素に、コード値を割り当て、着目画素に割り当てられたコード値を、着目画素の周辺の画素に割り当てられたコード値に基づいて変更する。そして、変更されたコード値に基づいて、被計測物の座標を導出する。
[第2の実施形態]
本実施形態では、第1の実施形態とは異なる平滑化範囲設定部115の動作について説明する。なお、本実施形態と第1の実施形態との相違点は、平滑化範囲設定部115の動作にあり、そのほかの点については第1の実施形態と同様である。しかるに、以下で特に説明しない限りは、第1の実施形態と同様であるものとする。
本実施形態では、第1の実施形態とは異なる平滑化範囲設定部115の動作について説明する。なお、本実施形態と第1の実施形態との相違点は、平滑化範囲設定部115の動作にあり、そのほかの点については第1の実施形態と同様である。しかるに、以下で特に説明しない限りは、第1の実施形態と同様であるものとする。
本実施形態では、平滑化範囲設定部115は、平面ではない連続面に対応するための平滑化範囲設定を行う。平面物体に対して算出された対応マップ122においては、v軸の正方向に沿って、投影器Y座標値がほぼ一定の増分で増えていくことを利用し、対象物が連続面であるかどうかだけでなく、平面らしいかどうかを判定する。
撮像装置103及び投影装置104の配置、及び投影装置104から投影される投影パタン(空間コード)が平面物体に照射される様子を図8に示す。図8においてCC801は撮像器座標中心、PC802は投影器座標中心、BL803はCC801とPC802との間の距離(ベースライン長)、α804は撮像器光軸805と投影器光軸806がなす角、を示す。また、θ807は、一つの投影器Y座標値(空間コード)が占める投影方向の広がり角度を示す。なお、8つの空間コードそれぞれが占める投影方向の広がり角度θはどれも等しい。
ここで、平面物体808に対して対応マップを生成すると、平面物体808上には8つの空間コードが与えられる。図8に示すように、撮像器座標の投影面CPP809上で同一の投影器Y座標値である領域の幅をPWiと表す。iは投影器Y座標(空間コード)にあたり、本実施形態では第1の実施形態と同じくi=0〜7となる。以降ではPWiを「同一投影器座標幅」と呼ぶことにする。また、隣り合うPWiの比(PWi+1/PWi)を、以降では「隣接同一投影器座標幅比」と呼ぶことにする。
現実的な設定では、詳細な形状を計測するために空間コードのビット数は3よりも多く設定し、そのためθの値は小さくなる場合が多い。また、撮像器光軸と投影器光軸のなす角αがあまり大きいと測定不能領域が増えるため、角度αも小さいことが多い。そのような設定においては、平面物体に対しての隣接同一投影器座標幅比の値はほぼ1になることが期待できる。
本実施形態では、平滑化範囲設定部115は、上記で説明した隣接同一投影器座標幅比が許容範囲内であればその領域を平面とみなし、その領域を平滑化範囲に含める。許容範囲は、メモリ106内に同一投影器座標幅比許容範囲131として予め登録しておく。同一投影器座標幅比許容範囲131は下限値と上限値の2つの値によって定義され、下限値は1.0以下の値、上限値は1.0以上の値とする。すなわち、下限値は隣接する投影器Y座標で同一投影器座標幅が減少する場合、上限は同一投影器座標幅が増加する場合の許容値を表す。
本実施形態に係るステップS602における処理について、図9のフローチャートを用いて説明する。図9のフローチャートに従った処理は、第1の実施形態と同様に、画素位置(i,j)に対し、平滑化範囲として適切な範囲をv軸上下方向にそれぞれ探索する処理である。
ステップS901では、平滑化範囲設定部115は、対応マップ122内の画素位置(i,j)における投影器Y座標値の同一投影器座標幅を算出する。これをPW(i, j)と表記する。この処理では、画素位置(i,j)から始めてv軸の負方向と正方向に注目点を移動させながら、投影器Y座標値が異なる値に変化するまでの画素数を同一投影器座標幅としてカウントすればよい。なお、注目点を移動中に測定不能点や画像外点に達した場合には、そこまでの画素数を同一投影器座標幅としてカウントすればよい。このカウント結果、即ち、同一投影器座標幅を変数pw_oldにセットする。
ステップS902では、平滑化範囲設定部115は、以下の処理で用いる変数pw_new、変数k、変数k_old、をそれぞれ、1,−1,0に初期化する。変数pw_newは探索中の領域の同一投影器座標幅を示す変数で、kは探索する注目点位置を示す変数である。k_oldは探索中の変数kの値を保持する変数である。ステップS903以降では、対応マップ122内の画素位置(i,j)からv軸の負方向、すなわち上方向に探索していく。
ステップS903では、平滑化範囲設定部115は、PY(i,j+k)=PY(i,j+k+1)であるか否かを判断する。この判断の結果、PY(i,j+k)=PY(i,j+k+1)であれば、処理はステップS904に進み、PY(i,j+k)≠PY(i,j+k+1)であれば、処理はステップS907に進む。ステップS904では、平滑化範囲設定部115は、同一投影器座標幅を示す変数pw_newの値を1つインクリメントする。
ステップS907では平滑化範囲設定部115は、PY(i,j+k+1)=PY(i,j)であるか否かを判断する。ステップS907でPY(i,j+k+1)=PY(i,j)と判定された場合、画素位置(i,j)と同一の投影器Y座標値である領域を初めて超えた場合にあたるので、ここでは同一投影器座標幅に関する平滑化範囲の判断はせず、ステップS910に進む。一方、ステップS907における判断でPY(i,j+k+1)≠PY(i,j)であれば、処理はステップS908に進む。
ステップS908では、平滑化範囲設定部115は、現在の同一投影器座標幅pw_newが前回の同一投影器座標幅pw_oldに対して同一投影器座標幅比許容範囲131の上限・下限で示される許容値以内であるかどうかを判定する。この判定の結果、許容値以内にある場合には、処理はステップS909に進み、許容値以内にない場合には、処理はステップS911に進む。ステップS911では、平滑化範囲設定部115は、変数kに変数k_oldの値を設定する。一方、ステップS909では、平滑化範囲設定部115は、変数pw_oldに変数pw_newの値を設定する。
ステップS910では、平滑化範囲設定部115は、変数pw_newの値を1に初期化し、変数kの値を変数k_oldに設定する。
ステップS905では、平滑化範囲設定部115は、第1の実施形態で説明したように、注目点が画素位置(i,j)と連続面上にあるかどうかという基準によって平滑化範囲にあるかどうかの判定を行う。図9のステップS905は、第1の実施形態で行っていた判定条件を一つの条件ブロックにまとめて表記してある。即ち、次の複数の条件のOR条件を満たせばよい(少なくとも1つの条件を満たせばよい)。
・ 計測不能点または画像外の条件(S702,S710)
・ 投影器Y座標値増加方向の条件(S703,S711)
・ 投影器Y座標値増分の条件(S704,S712)
・ 輝度値の条件(S705,S713)
・ 範囲上限の条件(S706,S714)
この複数の条件のうちどれか一つの条件でも満たしていれば(YES)、処理はステップS912に進む。ステップS912では、平滑化範囲設定部115は、負方向範囲値をk+1とする。全ての条件が満たされなかった場合(No)には、処理はステップS906に進む。ステップS906では、平滑化範囲設定部115は、変数kの値を1つデクリメントし、処理はステップS903に進む。
・ 投影器Y座標値増加方向の条件(S703,S711)
・ 投影器Y座標値増分の条件(S704,S712)
・ 輝度値の条件(S705,S713)
・ 範囲上限の条件(S706,S714)
この複数の条件のうちどれか一つの条件でも満たしていれば(YES)、処理はステップS912に進む。ステップS912では、平滑化範囲設定部115は、負方向範囲値をk+1とする。全ての条件が満たされなかった場合(No)には、処理はステップS906に進む。ステップS906では、平滑化範囲設定部115は、変数kの値を1つデクリメントし、処理はステップS903に進む。
ステップS913以降の各ステップにおける処理は、ステップS901〜S912までの処理と、探索方向が正負逆になるだけで実質的には同様の処理を行っているため、説明は省略する。
以上説明した処理は、ようは、次のようなものである。先ず、対応マップ画像における着目画素位置から該対応マップ画像の一辺に沿って一方の方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と上記方向に隣接する画素列の長さとの比が許容範囲外であるか否かを判断する。そして、第1の画素列と該第1の画素列と上記方向に隣接する第2の画素列との間で長さの比が許容範囲外であれば、第1の画素列の上記方向における端部を一端とする。
一方、対応マップ画像の着目画素位置から該対応マップ画像の一辺に沿って上記方向とは逆方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と上記逆方向に隣接する画素列の長さとの比が許容範囲外であるかを判断する。そして、第3の画素列と該第3の画素列と上記逆方向に隣接する第4の画素列との間で長さの比が許容範囲外であれば、第3の画素列の上記逆方向における端部を他端とする。そして、上記一端から上記他端までの間を、平滑化範囲として設定する。
なお、同一投影器座標幅比許容範囲131については事前に適当な値を設定しておくとしたが、その方法は任意である。実際に平面物体に対して対応マップを生成し、その隣接同一投影器座標幅比を実際に計測することによって同一投影器座標幅比許容範囲を決めてもよい。また、対象物の位置姿勢の範囲が想定できるのであれば、隣接同一投影器座標幅比がどの程度であるか事前に算出しておくことも可能である。
簡単な場合を例にとると、図10に示すような、平面物が撮像器座標光軸に垂直な姿勢であり、その距離がWDであるならば、平面物体上での同一投影器座標幅は以下の式で表すことができ、これをPPWiと記す。
PPWi=WD{tan(α−4θ+(i+1)θ)−tan(α−4θ+iθ)}
PPW0はi=0に対応するものである。αは投影装置104と撮像装置103との位置関係で決まり、θは投影装置104による投影画角と空間コードのビット数とから定まる。距離WDは隣接同一投影器座標幅の比には影響しない。
PPW0はi=0に対応するものである。αは投影装置104と撮像装置103との位置関係で決まり、θは投影装置104による投影画角と空間コードのビット数とから定まる。距離WDは隣接同一投影器座標幅の比には影響しない。
なお、第1,2の実施形態で説明した平滑化範囲設定部115で用いるパラメタには、平滑化範囲上限125や輝度変動許容範囲130や同一投影器座標幅比許容範囲131といった様々なものがあった。以下ではこれらのパラメタ値を最適に求めるために、CGを用いたシミュレーションを行う方法の例について記載する。
先ず、被計測物の形状を表す3Dモデルを準備する。形状がわかっている被計測物の位置姿勢を計測するために3次元座標算出を行う、ということは一般的に行われており、事前に被計測物の形状がわかっていることは珍しくない。図8に示す設定で投影パタンを投影して被計測物を撮影した場合に得られるであろう画像を、3Dモデルに対するCGシミュレーションによって生成する。その際の3Dモデルの位置姿勢は任意とする。
平滑化範囲設定部115の動作を決定するための上記パラメタの値の候補をそれぞれのパラメタごとに設定し、各パラメタ値の候補の全組み合わせからなるパラメタ組候補を複数種類用意しておく。そして、CGシミュレーションで得られた画像に対し、複数種類用意しておいたパラメタ組候補のそれぞれをもちいて平滑化範囲設定部115が行った動作を実施し、パラメタ組候補ごとに平滑化範囲を得る。
得られた複数の平滑化範囲のそれぞれが、3Dモデル上の平面部にどの程度一致しているかどうかの一致度を評価する。3Dモデル上の平面領域は、モデル表面の法線方向が同一であるような領域を平面領域と定めればよい。
上記のシミュレーションを、3Dモデルの位置姿勢を変えて複数回行ない、平滑化範囲と平面領域が最も安定的に一致するパラメタ組候補を最適パラメタとして選択する。以上の手順でパラメタ値を決定することができる。
なお、ここで説明したパラメタ選択の計算は、3次元座標算出時ではなく事前に1度行っておけばよい計算なので、計算時間がかかる複雑な処理であっても、被計測物の3次元座標を算出する処理時間には影響しない。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
Claims (7)
- 形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する投影手段と、
前記パターン画像が投影される前記被計測物を撮像する撮像手段と、
前記撮像手段により撮像される画像におけるパターン画像のコードを復号化して、該画像における前記被計測物の領域を示す着目画素に、コード値を割り当てる割り当て手段と、
前記着目画素に割り当てられたコード値を、前記着目画素の周辺の画素に割り当てられたコード値に基づいて変更する変更手段と、
前記変更されたコード値に基づいて、前記被計測物の座標を導出する導出手段と
を備えることを特徴とする3次元形状計測装置。 - 前記変更手段は、
前記コード値が割り当てられた前記着目画素の周囲の画素に割り当てられたコード値に基づいて、前記着目画素のコード値を変更する範囲を設定する設定手段を備え、
前記設定手段によって設定された範囲に基づいて、前記着目画素のコード値を変更することを特徴とする請求項1に記載の3次元形状計測装置。 - 前記設定手段は、
前記着目画素の画素位置(i,j)から順に、一方の方向に各画素位置の画素値を参照し、kを負の整数とした場合、参照した画素位置(i,j+k+1)における画素値が画素位置(i,j+k)における画素値よりも小さい場合には、(k+1)を一端とし、
前記着目画素の画素位置(i,j)から順に、前記一方の方向とは逆の方向に各画素位置の画素値を参照し、kを正の整数とした場合、参照した画素位置(i,j+k−1)における画素値が画素位置(i,j+k)における画素値よりも大きい場合には、(k−1)を他端とし、
前記一端から前記他端までの間を前記範囲として設定することを特徴とする請求項2に記載の3次元形状計測装置。 - 前記設定手段は、
前記着目画素の画素位置(i,j)から順に、一方の方向に各画素位置の画素値を参照し、kを負の整数とした場合、参照した画素位置(i,j+k+1)における画素値から画素位置(i,j+k)における画素値を引いた結果が1よりも大きい場合には、(k+1)を一端とし、
前記着目画素の画素位置(i,j)から順に、前記一方の方向とは逆の方向に各画素位置の画素値を参照し、kを正の整数とした場合、参照した画素位置(i,j+k)における画素値から画素位置(i,j+k−1)における画素値を引いた結果が1よりも大きい場合には、(k−1)を他端とし、
前記一端から前記他端までの間を前記範囲として設定することを特徴とする請求項2に記載の3次元形状計測装置。 - 前記設定手段は、
前記着目画素の画素位置から一方の方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と前記方向に隣接する画素列の長さとの比が許容範囲外であるか否かを判断し、第1の画素列と該第1の画素列と前記方向に隣接する第2の画素列との間で長さの比が許容範囲外であれば、前記第1の画素列の前記方向における端部を一端とし、
前記着目画素の画素位置から前記方向とは逆方向に対し、同じ画素値を有する画素からなる画素列ごとに、該画素列の長さと該画素列と前記逆方向に隣接する画素列の長さとの比が許容範囲外であるか否かを判断し、第3の画素列と該第3の画素列と前記逆方向に隣接する第4の画素列との間で長さの比が許容範囲外であれば、前記第3の画素列の前記逆方向における端部を他端とし、
前記一端から前記他端までの間を前記範囲として設定することを特徴とする請求項2に記載の3次元形状計測装置。 - 3次元形状計測装置が行う3次元形状計測方法であって、
前記3次元形状計測装置の投影手段が、形状を計測するためのコード値が符号化されたパターン画像を、被計測物に投影する投影工程と、
前記3次元形状計測装置の撮像手段が、前記パターン画像が投影される前記被計測物を撮像する撮像工程と、
前記3次元形状計測装置の割り当て手段が、前記撮像手段により撮像される画像におけるパターン画像のコードを復号化して、該画像における前記被計測物の領域を示す着目画素に、コード値を割り当てる割り当て工程と、
前記3次元形状計測装置の変更手段が、前記着目画素に割り当てられたコード値を、前記着目画素の周辺の画素に割り当てられたコード値に基づいて変更する変更工程と、
前記3次元形状計測装置の導出手段が、前記変更されたコード値に基づいて、前記被計測物の座標を導出する導出工程と
を備えることを特徴とする3次元形状計測方法。 - コンピュータを、請求項1乃至5の何れか1項に記載の3次元形状計測装置の各手段として機能させるためのコンピュータプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013029435A JP2014157141A (ja) | 2013-02-18 | 2013-02-18 | 3次元形状計測装置、3次元形状計測方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013029435A JP2014157141A (ja) | 2013-02-18 | 2013-02-18 | 3次元形状計測装置、3次元形状計測方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014157141A true JP2014157141A (ja) | 2014-08-28 |
Family
ID=51578075
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013029435A Pending JP2014157141A (ja) | 2013-02-18 | 2013-02-18 | 3次元形状計測装置、3次元形状計測方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2014157141A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017146298A (ja) * | 2016-02-18 | 2017-08-24 | 株式会社ミツトヨ | 形状測定システム、形状測定装置及び形状測定方法 |
-
2013
- 2013-02-18 JP JP2013029435A patent/JP2014157141A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017146298A (ja) * | 2016-02-18 | 2017-08-24 | 株式会社ミツトヨ | 形状測定システム、形状測定装置及び形状測定方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102113909B1 (ko) | 3차원 모델링 방법 및 장치 | |
CN107705333B (zh) | 基于双目相机的空间定位方法及装置 | |
JP5132832B1 (ja) | 計測装置および情報処理装置 | |
JP5249221B2 (ja) | 画像から奥行きマップを決定する方法、奥行きマップを決定する装置 | |
JP4216824B2 (ja) | 3次元モデル生成装置、3次元モデル生成方法および3次元モデル生成プログラム | |
TWI520078B (zh) | Optical flow tracking method and device | |
RU2721175C2 (ru) | Способ и устройство для определения карты глубины для изображения | |
WO2012096747A1 (en) | Forming range maps using periodic illumination patterns | |
CN107845073B (zh) | 一种基于深度图的局部自适应三维点云去噪方法 | |
CN107592449B (zh) | 三维模型建立方法、装置和移动终端 | |
JP2012103239A (ja) | 三次元計測装置、三次元計測方法及びプログラム | |
CN109903377B (zh) | 一种无需相位展开的三维人脸建模方法及系统 | |
CN110567441B (zh) | 基于粒子滤波的定位方法、定位装置、建图及定位的方法 | |
CN111105452B (zh) | 基于双目视觉的高低分辨率融合立体匹配方法 | |
JP6817742B2 (ja) | 情報処理装置およびその制御方法 | |
JP5822463B2 (ja) | 三次元計測装置、三次元計測方法、およびプログラム | |
JP2015121985A (ja) | 対象線検出装置、方法、及びプログラム | |
CN110738730A (zh) | 点云匹配方法、装置、计算机设备和存储介质 | |
JP2014157141A (ja) | 3次元形状計測装置、3次元形状計測方法 | |
JP5656018B2 (ja) | 球体の検出方法 | |
CN111462331A (zh) | 扩展对极几何并实时计算三维点云的若干方法 | |
EP3906530A1 (en) | Method for 3d reconstruction of an object | |
CN107622522B (zh) | 生成游戏素材的方法及装置 | |
CN113538483B (zh) | 高精度近景摄影测量标志的编解码方法和测量方法 | |
JP6061631B2 (ja) | 計測装置、情報処理装置、計測方法、情報処理方法、および、プログラム |