(57)【特許請求の範囲】
【請求項１】
検出光を照射して物体を光学的に走査するための投光手段と、
複数の受光領域からなる撮像面を有し、前記物体で反射した前記検出光を受光する撮像手段と、
前記物体に対する前記検出光の照射方向を変化させる走査手段と、
前記各受光領域に入射する前記検出光の光量情報を出力するように前記撮像手段を駆動する撮像制御手段と、
予め決められた所定期間内の前記撮像手段の出力（ｘ）とそれぞれの出力（ｘ）が得られたタイミング（ｉ）とに基づいて重心演算を行うことにより、前記検出光が前記各受光領域を通過した通過タイミングを求める演算手段と、
前記物体上の前記各受光領域に対応した部位の位置を、前記通過タイミングと当該各受光領域の位置とに基づいて決定する決定手段と、
を有したことを特徴とする３次元計測システム。
【請求項２】
前記演算手段は、
前記所定期間内における前記出力（ｘ）と前記タイミング（ｉ）との積（ｘ・ｉ）の総計Σ（ｘ・ｉ）を算出する第１加算部及び前記出力（ｘ）の総計Σ（ｘ）を算出する第２加算部と、
前記第１加算部及び第２加算部からの出力に基づいて、時間重心Ｎｐｅａｋ＝Σ（ｘ・ｉ）／Σ（ｘ）を算出する除算部とを含む、
請求項１記載の３次元計測システム。
【請求項３】
前記所定期間として、前記物体の計測可能距離範囲に対応する有効受光領域を前記検出光が通過する期間が用いられている、
請求項１又は請求項２記載の３次元計測システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、物体にスリット光又はスポット光を照射して物体形状を非接触で計測する３次元計測システムに関する。
【０００２】
【従来の技術】
レンジファインダと呼称される非接触型の３次元計測システムは、接触型に比べて高速の計測が可能であることから、ＣＧシステムやＣＡＤシステムへのデータ入力、身体計測、ロボットの視覚認識などに利用されている。
【０００３】
レンジファインダに好適な計測方法としてスリット光投影法（光切断法ともいう）が知られている。この方法は、物体を光学的に走査して３次元画像（距離画像）を得る方法であり、特定の検出光を照射して物体を撮影する能動的計測方法の一種である。３次元画像は、物体上の複数の部位の３次元位置を示す画素の集合である。スリット光投影法では、検出光として断面が直線状のスリット光が用いられる。
【０００４】
図２５はスリット光投影法の概要を示す図、図２６はスリット光投影法による計測の原理を説明するための図である。
計測対象の物体Ｑに断面が細い帯状のスリット光Ｕを照射し、その反射光を例えば２次元イメージセンサの撮像面Ｓ２に入射させる〔図２５（ａ）〕。物体Ｑの照射部分が平坦であれば、撮影像（スリット画像）は直線になる〔図２５（ｂ）〕。照射部分に凹凸があれば、直線が曲がったり階段状になったりする〔図２５（ｃ）〕。つまり、計測装置と物体Ｑとの距離の大小が撮像面Ｓ２における反射光の入射位置に反映する〔図２５（ｄ）〕。スリット光Ｕをその幅方向に偏向することにより、受光側から見える範囲の物体表面を走査して３次元位置をサンプリングすることができる。サンプリング点数はイメージセンサの画素数に依存する。
【０００５】
図２６において、投光の起点Ａと受光系のレンズの主点Ｏとを結ぶ基線ＡＯが受光軸と垂直になるように、投光系と受光系とが配置されている。受光軸は撮像面Ｓ２に対して垂直である。なお、レンズの主点とは、有限遠の被写体の像が撮像面Ｓ２に結像したときの、いわゆる像距離（image distance）ｂだけ撮像面Ｓ２から離れた受光軸上の点である。像距離ｂは、受光系の焦点距離ｆとピント調整のためのレンズ繰出し量との和である。
【０００６】
主点Ｏを３次元直交座標系の原点とする。受光軸がＺ軸、基線ＡＯがＹ軸、スリット光の長さ方向がＸ軸である。スリット光Ｕが物体上の点Ｐ（Ｘ，Ｙ，Ｚ）を照射したときの投光軸と投光基準面（受光軸と平行な投光面）との角度（投光角）をθａ、受光角をθｐとすると、点Ｐの座標Ｚは（１）式で表される。
【０００７】
基線長Ｌ＝Ｌ１＋Ｌ２＝Ｚｔａｎθａ＋Ｚｔａｎθｐ
∴    Ｚ＝Ｌ／（ｔａｎθａ＋ｔａｎθｐ）    …（１）
なお、受光角θｐとは、点Ｐと主点Ｏとを結ぶ直線と、受光軸を含む平面（受光軸平面）とのなす角度である。
【０００８】
撮像倍率β＝ｂ／Ｚ  であるので、撮像面Ｓ２の中心と受光画素とのＸ方向の距離をｘｐ、Ｙ方向の距離をｙｐとすると〔図２６（ａ）参照〕、点Ｐの座標Ｘ，Ｙは、（２），（３）式で表される。
【０００９】
Ｘ＝ｘｐ／β      …（２）
Ｙ＝ｙｐ／β      …（３）
投光角θａはスリット光Ｕの偏向の角速度によって一義的に決まる。受光角θｐはｔａｎθｐ＝ｙｐ／ｂの関係から算出できる。つまり、撮像面Ｓ２上での位置（ｘｐ，ｙｐ）を測定することにより、そのときの投光角θａに基づいて点Ｐの３次元位置を求めることができる。
【００１０】
図２６（ｃ）のように受光系にズームレンズ群を設けた場合には、主点Ｏは後側主点Ｈ’となる。後側主点Ｈ’と前側主点Ｈとの距離をＭとすると、点Ｐの座標Ｚは（１Ｂ）式で表される。
【００１１】
Ｌ＝Ｌ１＋Ｌ２＝Ｚｔａｎθａ＋（Ｚ−Ｍ）ｔａｎθｐ
∴  Ｚ＝（Ｌ＋Ｍｔａｎθｐ）／（ｔａｎθａ＋ｔａｎθｐ）  …（１Ｂ）
以上の原理のスリット光投影法による計測において、例えばＣＣＤセンサのように撮像面Ｓ２が有限個の画素からなる撮像手段を用いた場合には、計測の分解能は撮像手段の画素ピッチに依存する。つまり、撮像面Ｓ２上での位置（ｘｐ，ｙｐ）はいずれかの画素の位置となり、画素ピッチに応じて分解能が決まってしまう。
【００１２】
【発明が解決しようとする課題】
そこで、画素ピッチに依存することなく、高分解能で高精度の計測を可能とする計測装置を、本出願人は特願平７ー２９９９２１号として先に提案した。この先願の計測装置では、スリット光Ｕの幅を拡げて撮像面Ｓ２上で５画素程度分とし、５画素の各光量の中のピーク値とその前後の画素の光量とを用い、それらの補間演算を行って光量が最大となるタイミング（ピーク位置）を求める。これによって、各画素のサンプリング周期の数分の１以下の細かなタイミングが得られる。なお、このタイミングは、上述したスリット光Ｕの投光角θａに対応するものである。
【００１３】
ところが、レンズの歪み、ピンぼけ、その他の光学系の特性などに起因して、撮像手段からの出力にはノイズ成分が含まれることがある。ノイズ成分が含まれると、スリット光Ｕの幅内における光量分布が正規分布から外れ、ピーク位置が変動したり複数のピークが生じたりし、また分布が平坦になったりする。例えば、上述の先願の装置によってピーク位置を検出した場合には、ノイズによるピーク位置の変動が直接的に誤差となって表れる。特に、ピーク位置の近辺の光量変化が平坦に近い場合、例えば、受光光学系を長焦点側にズーミングすることによって撮像素子上での検出光の幅が拡大されている場合、又は投光光学系の構成に起因して検出光の分布が正規分布とならずピーク部分が平坦である場合などでは、ノイズによってピーク位置が容易に変動してしまう。
【００１４】
このような問題を解決するには、光量のピーク値が得られたタイミングの前後の十分に長い期間の光量に基づいて補間演算を行えばよいが、回路構成が複雑になるという欠点がある。
【００１５】
本発明は、高分解能で高精度の計測が可能であり、構成が簡単でノイズの影響を受け難い画像処理装置を提供することを目的とする。
【００１６】
【課題を解決するための手段】
請求項１の発明のシステムは、検出光を照射して物体を光学的に走査するための投光手段と、複数の受光領域からなる撮像面を有し、前記物体で反射した前記検出光を受光する撮像手段と、前記物体に対する前記検出光の照射方向を変化させる走査手段と、前記各受光領域に入射する前記検出光の光量情報を出力するように前記撮像手段を駆動する撮像制御手段と、予め決められた所定期間内の前記撮像手段の出力（x）とそれぞれの出力（x）が得られたタイミング（i）とに基づいて重心演算を行うことにより、前記検出光が前記各受光領域を通過した通過タイミングを求める演算手段と、 前記物体上の前記各受光領域に対応した部位の位置を、前記通過タイミングと当該各受光領域の位置とに基づいて決定する決定手段と、を有する。
【００１７】
請求項２の発明のシステムでは、前記演算手段は、前記所定期間内における前記出力（x）と前記タイミング（i）との積（ｘ・i）の総計Σ（ｘ・i）を算出する第１加算部及び前記出力（ｘ）の総計Σ（ｘ）を算出する第２加算部と、 前記第１加算部及び第２加算部からの出力に基づいて、時間重心Npeak＝Σ（ｘ・i）／Σ（ｘ）を算出する除算部とを含む。
【００１８】
請求項３の発明のシステムでは、前記所定期間として、前記物体の計測可能距離範囲に対応する有効受光領域を前記検出光が通過する期間が用いられる。
【００２１】
投光角θａは、スリット光Ｕの偏向角に基づいて求められる。偏向角の変化量は、角速度と経過時間とに基づいて求められる。したがって、スリット光Ｕの任意の時点における偏向角は、偏向を開始した時点における偏向角（原点位置）、角速度、及び偏向を開始してからの経過時間（計測のタイミング）に基づいて求められる。これらの物理量は、走査手段の駆動信号若しくは位置信号、制御のためのクロック信号、計測のためのサンプリング信号、又は内部時計などから得ることができる。
【００２２】
受光角θｐは、撮像面上の受光位置（ｙｐ）に基づいて求められる。ＣＣＤセンサのように撮像面が有限個の画素からなる撮像手段を用いた場合に、撮像面上の受光位置は、原始的にはいずれかの画素の位置となり、画素ピッチによって精度が決まってしまう。
【００２３】
本発明では、精度を上げるために補間を行う。補間のために重心演算を行う。本明細書では、補間の方法として、つまり重心演算の方法として、時間重心演算の方法が提案される。
【００２４】
時間重心演算の方法では、スリット光Ｕの偏向にともなって撮像面上の受光位置（ｙｐ）が移動するが、撮像面の各画素の出力（ｘ）について、所定期間内における重心（時間重心）Ｎｐｅａｋを演算する。ある画素について得られた時間重心Ｎｐｅａｋは、その画素の出力（ｘ）が最大となるときのタイミング（ｉ）であるから、時間重心Ｎｐｅａｋに基づいて投光角θａが求められる。画素の位置は既知であり、それが正確な受光位置（ｘｐ，ｙｐ）である。受光位置（ｙｐ）から受光角θｐが正確に求められる。これら受光角θｐ及び投光角θａから物体上の点Ｐの座標Ｚが正確に求められる。したがって、時間重心Ｎｐｅａｋ及び受光位置（ｘｐ，ｙｐ）に基づいて、物体上の点Ｐの３次元位置（Ｘ，Ｙ，Ｚ）が正確に求められる。
【００２５】
時間重心Ｎｐｅａｋを演算するに当たっては、各画素毎に、所定期間内における撮像手段からの出力（ｘ）を一定の周期でサンプリングし、サンプリング値である出力（ｘ）とサンプリングのタイミング（ｉ）との積（ｘ・ｉ）の総計Σ（ｘ・ｉ）、及び出力（ｘ）の総計Σ（ｘ）を算出する。これらから、時間重心Ｎｐｅａｋ＝Σ（ｘ・ｉ）／Σ（ｘ）を算出する。
【００２９】
重心演算及び３次元位置の演算などに当たって、必ずしも物理量の単位に換算した値を用いる必要はなく、物理量などに対応したデータであればよい。また、演算の方法又はアルゴリズムは、適宜選定することができる。
【００３０】
重心演算及び３次元位置の演算などは、マイクロプロセッサなどによりプログラムを実行することによって、つまりソフトウエアによって行うことができる。また、重心演算又は３次元位置の演算の全部又は一部を行わせるための専用の論理回路を用いて、つまりハードウエアによって行うこともできる。また、ソフトウエアとハードウエアとを組み合わせた回路によって演算することもできる。
【００３１】
３次元計測システムは、光学的な計測を行う光学装置、及び演算を行うコンピュータなどにより構成することができる。光学装置とコンピュータとを別体としてもよく、又は一体としてもよい。光学装置とコンピュータとを別体とした場合に、光学装置に演算回路の一部を設けてもよい。
【００３２】
【発明の実施の形態】
図１は本発明に係る計測システム１の構成図である。
計測システム１は、スリット光投影法によって立体計測を行う３次元カメラ（レンジファインダ）２と、３次元カメラ２の出力データを処理するホスト３とから構成されている。
【００３３】
３次元カメラ２は、物体Ｑ上の複数のサンプリング点の３次元位置を特定する計測データとともに、物体Ｑのカラー情報を示す２次元画像及びキャリブレーションに必要なデータを出力する。三角測量法を用いてサンプリング点の座標を求める演算処理はホスト３が担う。
【００３４】
ホスト３は、ＣＰＵ３ａ、ディスプレイ３ｂ、キーボード３ｃ、及びマウス３ｄなどから構成されたコンピュータシステムである。ＣＰＵ３ａには計測データ処理のためのソフトウエアが組み込まれている。ホスト３と３次元カメラ２との間では、オンライン及び可搬型の記録メディア４によるオフラインの両方の形態のデータ受渡しが可能である。記録メディア４としては、光磁気ディスク（ＭＯ）、ミニディスク（ＭＤ）、メモリカードなどがある。
【００３５】
図２は３次元カメラ２の外観を示す図である。
ハウジング２０の前面に投光窓２０ａ及び受光窓２０ｂが設けられている。投光窓２０ａは受光窓２０ｂに対して上側に位置する。内部の光学ユニットＯＵが射出するスリット光（所定幅ｗの帯状のレーザビーム）Ｕは、投光窓２０ａを通って計測対象の物体（被写体）に向かう。スリット光Ｕの長さ方向Ｍ１の放射角度φは固定である。物体の表面で反射したスリット光Ｕの一部が受光窓２０ｂを通って光学ユニットＯＵに入射する。なお、光学ユニットＯＵは、投光軸と受光軸との相対関係を適正化するための２軸調整機構を備えている。
【００３６】
ハウジング２０の上面には、ズーミングボタン２５ａ，２５ｂ、手動フォーカシングボタン２６ａ，２６ｂ、及びシャッタボタン２７が設けられている。図２（ｂ）のように、ハウジング２０の背面には、液晶ディスプレイ２１、カーソルボタン２２、セレクトボタン２３、キャンセルボタン２４、アナログ出力端子３２、デジタル出力端子３３、及び記録メディア４の着脱口３０ａが設けられている。
【００３７】
液晶ディスプレイ（ＬＣＤ）２１は、操作画面の表示手段及び電子ファインダとして用いられる。撮影者は背面の各ボタン２２〜２４によって撮影モードの設定を行うことができる。アナログ出力端子３２からは、２次元画像信号が例えばＮＴＳＣ形式で出力される。デジタル出力端子３３は例えばＳＣＳＩ端子である。
【００３８】
図３は３次元カメラ２の機能構成を示すブロック図である。図中の実線矢印は電気信号の流れを示し、破線矢印は光の流れを示している。
３次元カメラ２は、上述の光学ユニットＯＵを構成する投光側及び受光側の２つの光学系４０，５０を有している。光学系４０において、半導体レーザ（ＬＤ）４１が射出する波長６７０ｎｍのレーザビームは、投光レンズ系４２を通過することによってスリット光Ｕとなり、ガルバノミラー（走査手段）４３によって偏向される。半導体レーザ４１のドライバ４４、投光レンズ系４２の駆動系４５、及びガルバノミラー４３の駆動系４６は、システムコントローラ６１によって制御される。
【００３９】
光学系５０において、ズームユニット５１によって集光された光はビームスプリッタ５２によって分光される。半導体レーザ４１の発振波長帯域の光は、計測用のセンサ５３に入射する。可視帯域の光は、モニタ用のカラーセンサ５４に入射する。センサ５３及びカラーセンサ５４は、どちらもＣＣＤエリアセンサである。ズームユニット５１は内焦型であり、入射光の一部がオートフォーカシング（ＡＦ）に利用される。ＡＦ機能は、ＡＦセンサ５７とレンズコントローラ５８とフォーカシング駆動系５９によって実現される。ズーミング駆動系６０は電動ズーミングのために設けられている。
【００４０】
センサ５３による撮像情報は、ドライバ５５からのクロックに同期してメモリ６３に格納される。カラーセンサ５４による撮像情報は、ドライバ５６からのクロックに同期してカラー処理回路６７へ転送される。カラー処理を受けた撮像情報は、ＮＴＳＣ変換回路７０及びアナログ出力端子３２を経てオンライン出力され、又はディジタル画像生成部６８で量子化されてカラー画像メモリ６９に格納される。その後、カラー画像データがカラー画像メモリ６９からＳＣＳＩコントローラ６６へ転送され、ディジタル出力端子３３からオンライン出力され、又は計測データと対応づけて記録メディア４に格納される。なお、カラー画像は、センサ５３による距離画像と同一の画角の像であり、ホスト３側におけるアプリケーション処理に際して参考情報として利用される。カラー情報を利用する処理としては、例えばカメラ視点の異なる複数組の計測データを組み合わせて３次元形状モデルを生成する処理、３次元形状モデルの不要の頂点を間引く処理などがある。システムコントローラ６１は、図示しないキャラクタジェネレータに対して、ＬＣＤ２１の画面上に適切な文字や記号を表示するための指示を与える。
【００４１】
出力処理回路６２は、センサ５３の出力する各画素ｇの光電変換信号を増幅する増幅器、及び光電変換信号を８ビットの受光データに変換するＡＤ変換部を有している。メモリ６３は、２００×３２×３３Ｂｙｔｅの記憶容量を持つ読み書き可能なメモリであり、出力処理回路６２から出力される受光データを記憶する。メモリ制御回路６３Ａは、メモリ６３への書込み及び読出しのアドレス指定を行う。
【００４２】
重心演算回路７３は、メモリ６３に記憶された受光データに基づいて、計測対象の物体の形状に対応した濃淡画像を生成して表示用メモリ７４に出力し、また、３次元位置を算出するための基となるデータを算出し出力用メモリ６４に出力する。ＬＣＤ２１の画面には、表示用メモリ７４に記憶された濃淡画像、カラー画像メモリ６９に記憶されたカラー画像などを表示する。重心演算回路７３の構成及び動作については後で詳述する。
【００４３】
図４は投光レンズ系４２の構成を示す模式図である。図４（ａ）は正面図であり、図４（ｂ）は側面図である。
投光レンズ系４２は、コリメータレンズ４２１、バリエータレンズ４２２、及びエキスパンダレンズ４２３の３つのレンズから構成されている。半導体レーザ４１が射出したレーザビームに対して、次の順序で適切なスリット光Ｕを得るための光学的処理が行われる。まず、コリメータレンズ４２１によってビームが平行化される。次にバリエータレンズ４２２によってレーザビームのビーム径が調整される。最後にエキスパンダレンズ４２３によってビームがスリット長さ方向Ｍ１に拡げられる。
【００４４】
バリエータレンズ４２２は、撮影距離及び撮影の画角に係わらず、センサ５３に３以上の複数画素分の幅のスリット光Ｕを入射させるために設けられている。駆動系４５は、システムコントローラ６１の指示に従って、センサ５３上でのスリット光Ｕの幅ｗを一定に保つようにバリエータレンズ４２２を移動させる。バリエータレンズ４２２と受光側のズームユニット５１とは連動する。
【００４５】
ガルバノミラー４３による偏向の以前にスリット長を拡げることにより、偏向の後で行う場合に比べてスリット光Ｕの歪みを低減することができる。エキスパンダレンズ４２３を投光レンズ系４２の最終段に配置することにより、すなわちガルバノミラー４３に近づけることにより、ガルバノミラー４３を小型化することができる。
【００４６】
図５は計測システム１における３次元位置の算出の原理図である。同図では理解を容易にするため、受光量のサンプリングについて５回分のみが示されている。また、図２５及び図２６に示す要素に対応する部分には同一の符号が付されている。
【００４７】
センサ５３の撮像面Ｓ２上で複数画素分となる比較的に幅の広いスリット光Ｕを物体Ｑに照射する。具体的にはスリット光Ｕの幅を５画素分とする。スリット光Ｕは、サンプリング周期毎に撮像面Ｓ２上で１画素ピッチｐｖだけ移動するように、図５の上から下に向かって偏向され、それによって物体Ｑが走査される。サンプリング周期毎にセンサ５３から１フレーム分の受光データ（光電変換情報）が出力される。なお、この偏向は実際には等角速度で行われる。
【００４８】
撮像面Ｓ２の１つの画素ｇに注目すると、本実施形態においては、走査中に行う３２回のサンプリングによって３２回分の受光データが得られる。これら３２回分の受光データに対する重心演算によって、注目画素ｇがにらむ範囲の物体表面ａｇをスリット光Ｕの光軸が通過するタイミング（時間重心Ｎｐｅａｋ又は重心ｉｐ）を求める。
【００４９】
物体Ｑの表面が平面であって光学系の特性によるノイズがない場合には、注目画素ｇの受光量は、図５（ｂ）に示すように、スリット光Ｕが通過するタイミングにおいて多くなり、通常、正規分布に近くなる。同図のようにｎ回目とその１つ前の（ｎ−１）回目の間のタイミングで受光量が最大であった場合には、そのタイミングが時間重心Ｎｐｅａｋとほぼ一致する。
【００５０】
求めた時間重心Ｎｐｅａｋにおけるスリット光の照射方向と、注目画素に対するスリット光の入射方向との関係に基づいて、物体Ｑの位置（座標）を算出する。これにより、撮像面の画素ピッチｐｖで規定される分解能より高い分解能の計測が可能となる。
【００５１】
なお、注目画素ｇの受光量は物体Ｑの反射率に依存する。しかし、サンプリングの各受光量の相対比は受光の絶対量に係わらず一定である。つまり、物体色の濃淡は計測精度に影響しない。
【００５２】
図６はセンサ５３の読出し範囲を示す図である。
図６に示すように、センサ５３における１フレームの読出しは、撮像面Ｓ２の全体ではなく、高速化を図るために撮像面Ｓ２の一部である有効受光領域（帯状画像）Ａｅのみを対象に行われる。有効受光領域Ａｅは、スリット光Ｕのある照射タイミングにおける物体Ｑの計測可能距離範囲ｄ’（図１６参照）に対応する撮像面Ｓ２上の領域であり、スリット光Ｕの偏向に伴ってフレーム毎に１画素分ずつシフトする。本実施形態では、有効受光領域Ａｅのシフト方向の画素数は３２に固定されている。ＣＣＤエリアセンサの撮影像の一部のみを読み出す手法は、特開平７−１７４５３６号公報に開示されている。
【００５３】
図７はセンサ５３の撮像面Ｓ２におけるラインとフレームとの関係を示す図、図８〜１０はメモリ６３における各フレームの受光データの記憶状態を示す図である。
【００５４】
図７に示すように、撮像面Ｓ２の最初のフレームであるフレーム１には、ライン１からライン３２までの３２（ライン）×２００画素分の受光データが含まれる。フレーム２はライン２からライン３３まで、フレーム３はライン３からライン３４までというように、フレーム毎に１ライン分だけシフトされる。フレーム３２はライン３２からライン６３までである。なお、上述したように１ラインを２００画素としている。
【００５５】
これらフレーム１からフレーム３２までの受光データが、出力処理回路６２を介してメモリ６３に順次転送され、図８に示す状態でメモリ６３に記憶される。つまり、メモリ６３には、フレーム１、２、３…の順に受光データが記憶される。各フレームに含まれるライン３２のデータは、フレーム１については３２ライン目、フレーム２については３１ライン目というように、フレーム毎に１ラインづつ上方にシフトされている。フレーム１からフレーム３２までの受光データがメモリ６３に記憶されると、ライン３２の各画素について、時間重心Ｎｐｅａｋの算出が行われる。
【００５６】
ライン３２についての演算が行われている間に、フレーム３３の受光データがメモリ６３に転送されて記憶される。図９に示すように、フレーム３３の受光データは、メモリ６３のフレーム３２の次の領域に記憶される。フレーム３３のデータがメモリ６３に記憶されると、これらフレーム２からフレーム３３までに含まれるライン３３の各画素について、時間重心Ｎｐｅａｋの算出が行われる。
【００５７】
ライン３３についての演算が行われている間に、フレーム３４の受光データがメモリ６３に転送されて記憶される。図１０に示すように、フレーム３４の受光データは、フレーム１の記憶されていた領域に上書きされる。この時点ではフレーム１のデータは処理済であるため、上書きにより消去しても差し支えないからである。フレーム３４のデータがメモリ６３に記憶されると、ライン３４の各画素について、時間重心Ｎｐｅａｋの算出が行われる。フレーム３４の受光データについての処理が終わると、フレーム３５の受光データがフレーム２の記憶されていた領域に上書きされる。
【００５８】
このようにして、最終のラインであるライン２３１まで、合計２００ライン分についての時間重心Ｎｐｅａｋの算出が行われる。
上述のように、メモリ６３に記憶された受光データのうち、順次不要になったデータの記憶された領域に新規の受光データを上書きして記憶するので、メモリ６３の容量が低減される。
【００５９】
次に、重心演算回路７３の構成及び重心演算回路７３による時間重心Ｎｐｅａｋの算出処理について説明する。
図１１は重心演算回路７３の構成を示すブロック図、図１２はデータの転送のタイミングの概念を示す図、図１３は時間重心Ｎｐｅａｋの概念を示す図である。
【００６０】
図１３に示すように、時間重心Ｎｐｅａｋは、３２回のサンプリングによって得られた３２個の受光データについての重心である。各画素についての３２個の受光データに、１〜３２のサンプリング番号を付す。ｉ番目の受光データはｘｉで表される。ｉは１〜３２の整数である。このとき、ｉは、１つの画素について、その画素が有効受光領域Ａｅに入ってからのフレーム数を示している。
【００６１】
１〜３２番の受光データｘ１〜ｘ３２についての重心ｉｐは、３２個の受光データについて、ｉ・ｘｉの総和Σｉ・ｘｉをｘｉの総和Σｘｉで除すことにより求められる。すなわち、
【００６２】
【数１】
0003873401.tif 000002
【００６３】
となる。
重心演算回路７３は、メモリ６３から読み出したデータに基づいて、各画素についての重心ｉｐ（すなわち時間重心Ｎｐｅａｋ）を算出する。但し、メモリ６３から読み出したデータをそのまま用いるのではなく、各データから定常光データｋｓを減算した値（その値が負になるときは０）を用いる。つまり、センサ５３から出力される受光データに対して、定常光データｋｓの分だけ差し引いてオフセットを与えるのである。
【００６４】
定常光データｋｓは、スリット光Ｕが入射していないときの画素の受光データに基づいて算出されるデータである。定常光データｋｓは、予め定めた固定値を用いてもよく、又はセンサ５３から出力されるデータを用いてリアルタイムで求めてもよい。固定値とする場合には、センサ５３の出力が８ビット（２５６階調）である場合に、例えば「５」「６」又は「１０」などとする。リアルタイムで求める場合には、１つの注目画素についての３２個の受光データの前後各２画素分の受光データのそれぞれの平均値を求め、平均値の小さい方を定常光データｋｓとすればよい。その理由は、有効受光領域Ａｅの前後のいずれかにおいてはスリット光Ｕが入射していないから、これによってスリット光Ｕが入射していないときの受光データをリアルタイムで確実に求めることができるからである。また、前後各２画素分の受光データの平均値の大きい方を定常光データｋｓとしてもよい。３２個の受光データの前の２画素分の受光データの平均値、又は３２個の受光データの後の２画素分の受光データの平均値を用いてもよい。１画素分の受光データを用いてもよい。さらに、物体Ｑの形状又は受光データに含まれるノイズの状態によっては、それらの値にさらに所定値（例えば「５」）を加算した値を定常光データｋｓとして用い、これによりオフセットを大きくし、不要なノイズ成分を一層確実にカットするようにしてもよい。なお、それらの場合に、１フレームの大きさは、３６ライン又は３４ライン又は３３ラインとなるが、重心ｉｐの算出には３２ライン分の３２個のデータを用いればよい。
【００６５】
さて、図１１において、重心演算回路７３は、定常光データ記憶部７３１、減算部７３２、第１加算部７３３、第２加算部７３４、及び除算部７３５からなる。これらはソフトウエアを用いることによって実現されるが、これらの全部又は一部をハードウエア回路により構成することも可能である。
【００６６】
定常光データ記憶部７３１は、定常光データｋｓを記憶する。減算部７３２は、入力された受光データから定常光データｋｓを減算する。ここで、減算部７３２から出力されるデータをあらためて受光データｘｉとする。第１加算部７３３は、ｉ・ｘｉをｉ＝１〜３２について加算し、その合計値を出力する。第２加算部７３４は、ｘｉをｉ＝１〜３２について加算し、その合計値を出力する。除算部７３５は、第１加算部７３３の出力値を第２加算部７３４の出力値で除し、重心ｉｐを出力する。除算部７３５から出力された重心ｉｐは、表示用メモリ７４に記憶される。また、第１加算部７３３の出力値及び第２加算部７３４の出力値は、それぞれ出力用メモリ６４ａ，ｂに記憶される。出力用メモリ６４ａ，ｂに記憶されたデータは、ＳＣＳＩコントローラ６６を介してディジタル出力端子３３からホスト３に出力され、又は記録メディア４に格納される。ホスト３において、これらのデータに基づいて３次元位置演算処理が行われ、またこれらのデータの信頼性が判定される。
【００６７】
図１２を参照して、メモリ制御回路６３Ａは、１つの画素について、重心演算回路７３による上述の処理が行われるように、メモリ６３のアドレスを画素毎に順次指定する。例えば、最初のライン３２については、図８に示すフレーム１に含まれるライン３２の１画素目のデータ、フレーム２に含まれるライン３２の１画素目のデータというように、ライン３２の１画素目のデータについてフレーム１から３２までの合計３２個のデータを順にアドレス指定する。アドレス指定されることによって、メモリ６３からデータが読み出されて重心演算回路７３に送り込まれる。ライン３２についての演算が行われている間に、次のフレーム３３の受光データがメモリ６３に転送される。以降においても、メモリ６３からの読み出しと書き込みが並行して行われ、これによって回路が効率よく動作する。
【００６８】
重心演算回路７３では、３２個のデータが入力された時点で、除算部７３５が重心ｉｐを出力する。続いて、２画素目のデータ、３画素目のデータというように、２００画素目のデータまで順に処理を行い、ライン３２についての重心ｉｐの算出を終了する。ライン３２についての重心ｉｐの算出を終えると、続いて、ライン３３、ライン３４、ライン３５というように、ライン２３１まで、２００ラインの全部について重心ｉｐの算出を行う。
【００６９】
なお、ＣＣＤエリアセンサであるセンサ５３は、積分領域及び蓄積領域を有し、積分領域での積分動作が完了すると電荷を蓄積領域へ一括転送し、蓄積領域から外部に順次出力する。
【００７０】
表示用メモリ７４に記憶された重心ｉｐは、ＬＣＤ２１の画面に表示される。重心ｉｐは、計測対象の物体Ｑの表面の位置に関連し、物体Ｑの表面の位置が３次元カメラ２に近い場合に重心ｉｐの値が大きくなり、遠い場合に重心ｉｐの値が小さくなる。したがって、重心ｉｐを濃度データとして濃淡画像を表示させることにより距離分布を表現することができる。
【００７１】
次に、３次元カメラ２及びホスト３の動作を計測の手順と合わせて説明する。上述したように、計測のサンプリング点数を２００×２６２とする。すなわち、撮像面Ｓ２におけるスリットＵの幅方向の画素数は２６２であり、実質的なフレーム数Ｎは２３１である。
【００７２】
ユーザー（撮影者）は、ＬＣＤ２１が表示するカラーモニタ像を見ながら、カメラ位置と向きとを決め、画角を設定する。その際、必要に応じてズーミング操作を行う。３次元カメラ２ではカラーセンサ５４に対する絞り調整は行われず、電子シャッタ機能により露出制御されたカラーモニタ像が表示される。これは、絞りを開放状態とすることによってセンサ５３の入射光量をできるだけ多くするためである。
【００７３】
図１４は３次元カメラ２におけるデータの流れを示す図、図１５はホスト３における３次元位置演算の処理手順を示すフローチャート、図１６は光学系の各点と物体Ｑとの関係を示す図である。
【００７４】
ユーザーによる画角選択操作（ズーミング）に応じて、ズームユニット５１のバリエータ部５１４の移動が行われる。また、フォーカシング部５１２の移動による手動又は自動のフォーカシングが行われる。フォーカシングの過程でおおよその対物間距離ｄ0 が測定される。
【００７５】
このような受光系のレンズ駆動に呼応して、投光側のバリエータレンズ４２２の移動量が図示しない演算回路によって算出され、算出結果に基づいてバリエータレンズ４２２の移動制御が行われる。
【００７６】
システムコントローラ６１は、レンズコントローラ５８を介して、フォーカシングエンコーダ５９Ａの出力（繰り出し量Ｅｄ）及びズーミングエンコーダ６０Ａの出力（ズーム刻み値ｆｐ）を読み込む。システムコントローラ６１の内部において、歪曲収差テーブルＴ１、主点位置テーブルＴ２、及び像距離テーブルＴ３が参照され、繰り出し量Ｅｄ及びズーム刻み値ｆｐに対応した撮影条件データがホスト２へ出力される。ここでの撮影条件データは、歪曲収差パラメータ（レンズ歪み補正係数ｄ１，ｄ２）、前側主点位置ＦＨ、及び像距離ｂである。前側主点位置ＦＨは、ズームユニット５１の前側端点Ｆと前側主点Ｈとの距離で表される。前側端点Ｆは固定であるので、前側主点位置ＦＨにより前側主点Ｈを特定することができる。
【００７７】
システムコントローラ６１は、半導体レーザ４１の出力（レーザ強度）及びスリット光Ｕの偏向条件（走査開始角、走査終了角、偏向角速度）を算定する。
この算定方法を詳しく説明する。まず、おおよその対物間距離ｄ0 に平面物体が存在するものとして、センサ５３の中央で反射光を受光するように投射角設定を行う。以下で説明するレーザ強度の算定のためのパルス点灯は、この設定された投射角で行う。
【００７８】
次にレーザ強度を算定する。レーザ強度の算定に際しては、人体を計測する場合があるので、安全性に対する配慮が不可欠である。まず、最小強度ＬＤｍｉｎでパルス点灯し、センサ５３の出力を取り込む。取り込んだ信号〔Ｓｏｎ（ＬＤｍｉｎ）〕と適正レベルＳｔｙｐとの比を算出し、仮のレーザ強度ＬＤ１を設定する。
【００７９】
ＬＤ１＝ＬＤｍｉｎ×Ｓｔｙｐ／ＭＡＸ〔Ｓｏｎ（ＬＤｍｉｎ）〕
続いてレーザ強度ＬＤ１で再びパルス点灯し、センサ５３の出力を取り込む。取り込んだ信号〔Ｓｏｎ（ＬＤ１）〕が適正レベルＳｔｙｐ又はそれに近い値であれば、ＬＤ１をレーザ強度ＬＤｓと決める。他の場合には、レーザ強度ＬＤ１とＭＡＸ〔Ｓｏｎ（ＬＤ１）〕とを用いて仮のレーザ強度ＬＤ１を設定し、センサ５３の出力と適正レベルＳｔｙｐとを比較する。センサ５３の出力が許容範囲内の値となるまで、レーザ強度の仮設定と適否の確認とを繰り返す。なお、センサ５３の出力の取り込みは、撮像面Ｓ２の全面を対象に行う。これは、ＡＦによる受動的な距離算出では、スリット光Ｕの受光位置を高精度に推定することが難しいためである。センサ５３におけるＣＣＤの積分時間は１フィールド時間（例えば１／６０秒）であり、実際の計測時における積分時間より長い。このため、パルス点灯を行うことにより、計測時と等価なセンサ出力を得る。
【００８０】
次に、投射角と、レーザ強度が決定したときのスリット光Ｕの受光位置から、三角測量により対物間距離ｄを決定する。
最後に、決定された対物間距離ｄに基づいて、偏向条件を算出する。偏向条件の算定に際しては、対物間距離ｄの測距基準点である受光系の前側主点Ｈと投光の起点ＡとのＺ方向のオフセットｄｏｆｆを考慮する。また、走査方向の端部においても中央部と同様の計測可能距離範囲ｄ’を確保するため、所定量（例えば８画素分）のオーバースキャンを行うようにする。走査開始角ｔｈ１、走査終了角ｔｈ２、偏向角速度ωは、次式で表される。
【００８１】
0003873401.tif 000003
このようにして算出された条件で次に本発光に移り、物体Ｑの走査（スリット投影）が行われ、上述の出力処理回路５２、メモリ６３、及び重心演算回路７３を経て出力用メモリ６４に記憶されたデータＤ６２がホスト２へ送られる。同時に、偏向条件（偏向制御データ）及びセンサ５３の仕様などを示す装置情報Ｄ１０も、ホスト３へ送られる。表１は３次元カメラ２がホスト３へ送る主なデータをまとめたものである。
【００８２】
【表１】
0003873401.tif 000004
【００８３】
図１５のように、ホスト３においては、３次元位置演算処理が実行され、これによって２００×２００個のサンプリング点（画素）の３次元位置（座標Ｘ，Ｙ，Ｚ）が算定される。サンプリング点はカメラ視線（サンプリング点と前側主点Ｈとを結ぶ直線）とスリット面（サンプリング点を照射するスリット光Ｕの光軸面）との交点である。
【００８４】
図１５において、まず３次元カメラ２から送られてきたｘｉの総和Σｘｉが所定値を上回っているかどうかを判定する（＃１１）。ｘｉが小さい場合、つまりスリット光成分の総和Σｘｉが所定の基準に満たない場合には誤差を多く含んでいるので、その画素については３次元位置の算出を実行しない。そして、その画素については「エラー」を示すデータを設定して記憶する（＃１７）。Σｘｉが所定値を上回っている場合には十分な精度が得られるので、３次元位置の算出を実行する。
【００８５】
３次元位置の算出に先立って、スリット光Ｕの通過タイミングｎｏｐを算出する（＃１２）。通過タイミングｎｏｐは、ｉ＝１〜３２について（Σｉ・ｘｉ）／（Σｘｉ）を計算して重心ｉｐ（時間重心Ｎｐｅａｋ）を求め、これにライン番号を加算することによって算出される。
【００８６】
すなわち、算出された重心ｉｐは、その画素の出力が得られている３２フレーム内のタイミングであるので、ライン番号を加えることによって走査開始からの通過タイミングｎｏｐに変換する。具体的には、ライン番号は、最初に算出されるライン３２の画素については「３２」、次のライン３３については「３３」となる。注目画素ｇのラインが１つ進む毎にライン番号は１つ増大する。しかし、これらの値は他の適当な値とすることが可能である。その理由は、３次元位置を算出する際に、係数である後述の（６）式におけるＸ軸周りの回転角（ｔｈｅ１）及びＸ軸周りの角速度（ｔｈｅ４）などをキャリブレーションにより適切に設定することができるからである。
【００８７】
そして３次元位置算出を行う（＃１３）。算出された３次元位置は、その画素に対応するメモリ領域に記憶し（＃１４）、次の画素について同様の処理を行う（＃１６）。総ての画素についての処理が終わると終了する（＃１５でイエス）。
【００８８】
次に、３次元位置の算出方法について説明する。
カメラ視線方程式は次の（４）式及び（５）式である。
（ｕ−ｕ０）＝（ｘｐ）＝（ｂ／ｐｕ）×〔Ｘ／（Ｚ−ＦＨ）〕  …（４）
（ｖ−ｖ０）＝（ｙｐ）＝（ｂ／ｐｖ）×〔Ｙ／（Ｚ−ＦＨ）〕  …（５）
ｂ：像距離
ＦＨ：前側主点位置
ｐｕ：撮像面における水平方向の画素ピッチ
ｐｖ：撮像面における垂直方向の画素ピッチ
ｕ：撮像面における水平方向の画素位置
ｕ０：撮像面における水平方向の中心画素位置
ｖ：撮像面における垂直方向の画素位置
ｖ０：撮像面における垂直方向の中心画素位置
スリット面方程式は（６）式である。
【００８９】
【数２】
0003873401.tif 000005
【００９０】
幾何収差は画角に依存する。歪はほぼ中心画素を中心として対称に生じる。したがって、歪み量は中心画素からの距離の関数で表される。ここでは、距離の３次関数で近似する。２次の補正係数をｄ１、３次の補正係数をｄ２とする。補正後の画素位置ｕ’，ｖ’は（７）式及び（８）式で与えられる。
【００９１】
0003873401.tif 000006
上述の（４）式及び（５）式において、ｕに代えてｕ’を代入し、ｖに代えてｖ’を代入することにより、歪曲収差を考慮した３次元位置を求めることができる。なお、キャリブレーションについては、電子情報通信学会研究会資料ＰＲＵ91-113［カメラの位置決めのいらない画像の幾何学的補正］小野寺・金谷、電子情報通信学会論文誌Ｄ-II vol. J74-D-II No.9 pp.1227-1235,'91/9 ［光学系の３次元モデルに基づくレンジファインダの高精度キャリブレーション法］植芝・吉見・大島、などに詳しい開示がある。
【００９２】
次に、本発明に係る他の実施形態の３次元カメラ２Ｂについて、図１７乃至図２４を参照して説明する。図１７乃至図２４において、図３及び図１１の要素と同一の機能を有する要素には同一の符号を付す。
【００９３】
図１７は他の実施形態の３次元カメラ２Ｂの機能構成を示すブロック図である。図１７に示す３次元カメラ２Ｂでは、その重心演算回路７３Ｂの構成及び動作が上に述べた図３の３次元カメラ２Ｂと相違しているが、その他の構成は図３の３次元カメラ２Ｂと同一である。したがって、ここでは重心演算回路７３Ｂのみについて説明する。
【００９４】
図３に示す重心演算回路７３は、メモリ６３から読み出された受光データに対しソフトウエアによって重心演算を行うものであったが、図１７に示す距離演算回路７３Ｂは、ハードウエアによって重心演算を行うものである。したがって、重心演算回路７３Ｂによると処理が高速に行われる。
【００９５】
重心演算回路７３Ｂとして、重心演算の方法に応じて種々の回路が考えられる。重心演算の方法には次の２つがある。その１つは、スリット光Ｕがセンサ５３上の特定の画素における複数のサンプリング時刻でのデータ列に基づいて演算を行う方法である。他の１つは、あるサンプリング時刻に得られたスリット光Ｕのセンサ５３上の空間的なデータ列に基づいて演算を行う方法である。本明細書において、前者を「時間重心演算」、後者を「空間重心演算」と言う。図１１において説明した重心演算は時間重心演算である。ここでは、時間重心演算及び空間重心演算の両方について、具体的な回路を説明する。
【００９６】
先に、時間重心演算の方法を実現する具体的な回路として、図１８及び図２１に示す２つの例を説明する。
図１８の重心演算回路７３Ｂ１は、時系列に入力される受光データをＦＩＦＯ（first in first out) メモリに保持しておき、必要なデータが蓄えられてから重心演算を実施するように構成されている。また、図２１の重心演算回路７３Ｂ２は、時系列に入力される受光データを、逐次演算し、デュアルポートメモリであるＶＲＡＭにより構成されるメモリ部に、分子データ及び分母データとして累積加算して蓄積し、その結果を除算器を通して出力するように構成される。
【００９７】
まず、ＦＩＦＯメモリを使った重心演算回路７３Ｂ１について説明する。
図１８はＦＩＦＯメモリを使った重心演算回路７３Ｂ１の例を示す図、図１９はメモリ６３Ｂ１の詳細な構成の例を示す図、図２０はメモリ６３Ｂ１の動作を模式的に説明するための図である。
【００９８】
図１８において、出力処理回路６２から時系列に入力される受光データは、減算器７３２Ｂにおいて定常光成分ｋｓが取り除かれた後、ＦＩＦＯメモリであるメモリ６３Ｂ１に順次保持される。メモリ６３Ｂ１は、メモリ制御回路６３Ａ１によって書込み及び読出しの制御が行われる。
【００９９】
図１９の上列に記載されたＦＩＦＯメモリ６３３ａ１〜６３３ａ３１において、ＦＩＦＯメモリ６３３ａ１は２００×３１段、ＦＩＦＯメモリ６３３ａ２は２００×３０段、ＦＩＦＯメモリ６３３ａ３は２００×２９段…、ＦＩＦＯメモリ６３３ａ３１は２００×１段というように、ｉ番目のＦＩＦＯメモリ６３３ａｉは、２００×（３２−ｉ）段のＦＩＦＯメモリとなっている。また、下列に記載されたＦＩＦＯメモリ６３３ｂ１〜６３３ｂ３２は、それぞれ、２００×１段のＦＩＦＯメモリである。
【０１００】
（ｉ−１）番目のＦＩＦＯメモリ６３３ａ（ｉ−１）から出力されるデータのうち、その最初の２００画素分のデータはｉ番目のＦＩＦＯメモリ６３３ｂｉへ送られ、それ以降のデータはＦＩＦＯメモリ６３３ａｉへ送られる。
【０１０１】
ＦＩＦＯメモリ６３３ｂｉへのデータが全て送られると、つまりＦＩＦＯメモリ６３３ｂｉに２００画素分のデータが送られると、ＦＩＦＯメモリ６３３ｂ１の１画素目（ｎ，１，１）、ＦＩＦＯメモリ６３３ｂ２の１画素目（ｎ−１，２，１）、ＦＩＦＯメモリ６３３ｂ３の１画素目（ｎ−２，３，１）…、ＦＩＦＯメモリ６３３ｂ３２の１画素目（ｎ−３１，３２，１）というように、全てのＦＩＦＯメモリ６３３ｂｉ（ｉ＝１〜３２）について、その１画素目（ｎ−ｉ＋１，ｉ，１）を順次読み出す。そして、次は全てのＦＩＦＯメモリ６３３ｂｉ（ｉ＝１〜３２）の２画素目（ｎ−ｉ＋１，ｉ，２）を順次読み出し、さらに次は全てのＦＩＦＯメモリ６３３ｂｉ（ｉ＝１〜３２）の３画素目（ｎ−ｉ＋１，ｉ，３）を順次読み出すというように、ＦＩＦＯメモリ６３３ｂｉから各画素のデータを点順次に読み出す。これによって、センサ５３の特定の画素についての時系列データが取り出される。
【０１０２】
なお、図に示されたＳ（ｎ，ｉ，ｈ）は、ｎ番目のフレーム（ｎフレーム目）においてｉライン目に読み出された受光データ列の水平座標ｈのデータを意味する。
【０１０３】
こうして読み出された３２個の時系列データ、Ｓ（ｎ，１，ｈ），Ｓ（ｎ−１，２，ｈ）…、Ｓ（ｎ−ｉ＋１，ｉ，ｈ）…、Ｓ（ｎ−３１，３２，ｈ）を、順次演算することによって、時間重心Ｎｐｅａｋを求める。
【０１０４】
上に述べた３２個の時系列データＳ（ｎ，ｉ，ｈ）は、センサ５３の同一画素におけるサンプリング時刻の異なる受光データであるから、１〜３２のサンプリング番号を付し、ｉ番目の受光データを「ｘｉ」で表すと、図１３に示すように時間重心Ｎｐｅａｋは３２回のサンプリングによって得られた３２個の受光データｘ１〜ｘ３２についての重心ｉｐと一致する。
【０１０５】
図１８において、メモリ６３Ｂ１で得られた受光データＳ（ｎ，ｉ，ｈ）、すなわちｘｉは、乗算器７３６、加算器７３７及び分子データを保持するレジスタ７３３Ｂからなる分子演算部、加算器７３８及び分母データを保持するレジスタ７３４Ｂからなる分母演算部、並びに分母分子データを除算する除算器７３５Ｂから構成される演算部により演算され、これによって重心ｉｐ（時間重心Ｎｐｅａｋ）が求められる。これらはハードウエアで構成されているが、これらの全部又は一部をソフトウエアで実現することも可能である。
【０１０６】
なお、分子データを保持するレジスタ７３３Ｂ及び分母データを保持するレジスタ７３４Ｂのデータは、除算器７３５Ｂへ出力されて重心演算される他、それぞれ出力用メモリ６４ｂ，６４ａへも出力されて記憶される。
【０１０７】
次に、デュアルポートメモリであるＶＲＡＭを使った重心演算回路７３Ｂ２について説明する。
図２１はデュアルポートメモリであるＶＲＡＭ６３１，６３２を使った重心演算回路７３Ｂ２を示す図、図２２はＶＲＡＭ６３１，６３２の各アドレスｐｙに格納されるデータのライン番号を示す図である。
【０１０８】
図２１において、出力処理回路６２から時系列に入力される受光データは、減算器７３２Ｂにおいて定常光成分ｋｓが取り除かれる。定常光成分ｋｓが取り除かれたデータについて、ｎ番目のフレームのｉライン目に読み出される水平座標ｈの受光データをＳ（ｎ，ｉ，ｈ）で表す。
【０１０９】
ＶＲＡＭ６３１，６３２は、それぞれ、２００×３２Ｂｙｔｅの記憶容量を持つ読み書き可能なデュアルポートメモリであり、任意のアドレスにランダムアクセスが可能なランダムアクセスポートと、アドレス指定されたラインについて１ライン分のデータを連続的に読み出すことの可能なシリアルアクセスポートとを備えている。図中のレジスタ「ＳＡＭ」はシリアルアクセスポートとして機能するものであり、ＶＲＡＭ６３１，６３２中のアドレス指定された１つのラインのデータがレジスタ「ＳＡＭ」に転送され、レジスタ「ＳＡＭ」から１ライン分のデータが読み出される。
【０１１０】
ＶＲＡＭ６３１，６３２にアクセスする際のアドレス（ｐｘ，ｐｙ）は、次のように指定される。つまり、受光データＳ（ｎ，ｉ，ｈ）をアクセスする場合のアドレス（ｐｘ，ｐｙ）は次のようになる。
【０１１１】
ｐｘ＝ｈ
ｐｙ＝（ｎ＋ｉ−１）−３２×ＩＮＴ（（ｎ＋ｉ−１）／３２）
書き込みの場合にはアドレス（ｐｘ，ｐｙ）が指定され、読み出しの場合にはアドレスｐｙが指定される。なお、本実施形態において、アドレスｐｙは０〜３１であり、これはライン番号１〜３２に対応する。
【０１１２】
さて、一方のＶＲＡＭ６３１には除算の分子データが格納され、他方のＶＲＡＭ６３２には除算の分母データが格納される。例えば、センサ５３の（ｎ＋ｉ−１）番目のラインに対応する分子データは、ＶＲＡＭ６３１の上述の式から求められるアドレスｐｙによって指定されるラインに累積される。
【０１１３】
ＶＲＡＭ６３１，６３２への書込みに先立って、つまりセンサ５３の各ラインの読出しに先立って、ＶＲＡＭ６３１，６３２の中のアドレスｐｙで指定されるラインのデータは、シリアルアクセスポートにセットされる。シリアルアクセスポートから読み出されたデータは、加算器７３７，７３８に入力され、センサ５３の注目画素に対応するデータと加算される。加算されたデータ、つまり加算器７３７，７３８から出力されたデータは、ＶＲＡＭ６３１，６３２の指定されたアドレス（ｐｘ，ｐｙ）に、ランダムアクセスポートから書き込まれる。このよな処理が１ライン分の２００画素について行われ、ＶＲＡＭ６３１，６３２の１つのラインのデータが更新される。このようにして、センサ５３における注目画素に対応するデータが３２フレーム分にわたって累積される。
【０１１４】
ＶＲＡＭ６３１，６３２の各ラインにセンサ５３の３２フレーム分のデータが累積されると、次のフレームのデータつまり次のラインのデータが書き込まれる前に、３２ライン分の累積値がシリアルアクセスポートから除算器７３５Ｂへ出力される。
【０１１５】
除算器７３５Ｂにおいて、３２ライン分の累積値である分子データ及び分母データによる除算を行うことによって重心ｉｐ（時間重心Ｎｐｅａｋ）が求められ、表示用メモリ７４へ出力される。また、ＶＲＡＭ６３１，６３２から出力される分子データ及び分母データは、出力用メモリ６４ｂ，６４ａへも出力され記憶される。
【０１１６】
上に述べたＶＲＡＭ６３１，６３２の動作は、メモリ制御回路６３Ａ２によって制御される。なお、乗算器７３６は、分子データに重み計数ｉを乗じるためのものである。
【０１１７】
次に、空間重心演算の方法を実現する具体的な回路として、図１８及び図２４に示す２つの例を説明する。図１８の重心演算回路７３Ｂ１は、上述したように、時系列に入力される受光データをＦＩＦＯメモリに保持しておき、必要なデータが蓄えられてから重心演算を実施するように構成されている。図１８において、上述の時間重心演算の方法とはＦＩＦＯメモリの構成が異なる。また、図２４の重心演算回路７３Ｂ３は、時系列に入力される受光データを、逐次演算し、２組のレジスタ群で構成されるメモリ部に、分子データ及び分母データとして累積加算して蓄積し、その結果を除算器を通して出力するように構成されている。
【０１１８】
まず、図１８に示すＦＩＦＯメモリを使った重心演算回路７３Ｂ１について説明する。
図１８において、出力処理回路６２から時系列に入力される受光データは、減算器７３２Ｂにおいて定常光成分ｋｓが取り除かれた後、ＦＩＦＯメモリであるメモリ６３Ｂに順次保持される。
【０１１９】
図２３はメモリ６３Ｂ２の詳細な構成の例を示す図である。
図２３の上列に記載されたＦＩＦＯメモリ６３４ａ１〜６３４ａ３２、及び下列に記載されたＦＩＦＯメモリ６３４ｂ１〜６３４ｂ３２は、それぞれ、２００×１段のＦＩＦＯメモリである。
【０１２０】
ｎ番目のフレームでは、ｉ番目のＦＩＦＯメモリ６３４ａｉがデータを書き込む動作を行い、同時に、ＦＩＦＯメモリ６３４ｂｉがその１フレーム前である（ｎ−１）番目のフレームに書き込まれたデータを順次読み出す。また、１フレーム後である（ｎ＋１）番目のフレームでは、ＦＩＦＯメモリ６３４ｂｉがデータを書き込む動作を行い、同時にＦＩＦＯメモリ６３４ａｉがｎ番目のフレームに書き込んだデータを順次読み出す。このような読み書きの動作はメモリ制御回路６３Ａ１によって制御される。
【０１２１】
すなわち、今、ＦＩＦＯメモリ６３４ａ１のデータが読み出されるよう制御されているとすると、ＦＩＦＯメモリ６３４ａ３２、６３４ａ３１、６３４ａ３０…、６３４ａ２、６３４ａ１の順に、各ＦＩＦＯメモリ６３４ａｉの１画素目のデータが読み出される。そして次に、同様の順に２画素目のデータが読み出され、次に３画素目のデータというように、２００画素目まで順に読み出される。
【０１２２】
読み出されたデータは、
S(n,1,1),S(n,2,1),S(n,3,1)……,S(n,31,1),S(n,32,1),
S(n,1,2),S(n,2,2),S(n,3,2)……,S(n,31,2),S(n,32,2),
………
S(n,1,200),S(n,2,200),S(n,3,200)……,S(n,31,200),S(n,32,200)
というようなデータ列として後段の演算回路へ入力される。
【０１２３】
受光データＳ（ｎ，ｉ，ｈ）は、同一の水平座標ｈに対しては３２個の同一時刻における垂直方向にサンプルされたデータであるから、１〜３２のサンプリング番号を付し、ｉ番目のデータをｘｉで表すと、空間重心Ｎｐｅａｋは３２回のサンプリングによって得られた３２個の受光データｘ１〜ｘ３２についての重心ｉｐと一致する。
【０１２４】
図１８において、メモリ６３Ｂ２で得られた受光データＳ（ｎ，ｉ，ｈ）すなわちｘｉは、乗算器７３６、加算器７３７及び分子データを保持するレジスタ７３３Ｂからなる分子演算部、加算器７３８及び分母データを保持するレジスタ７３４Ｂからなる分母演算部、並びに分母分子データを除算する除算器７３５Ｂから構成される演算部により演算され、これによって重心ｉｐ（空間重心Ｍｐｅａｋ）が求められる。
【０１２５】
なお、分子データを保持するレジスタ７３３Ｂ及び分母データを保持するレジスタ７３４Ｂのデータは、除算器７３５Ｂへ出力されて重心演算される他、それぞれ出力用メモリ６４ｂ，６４ａへも出力されて記憶される。
【０１２６】
次に、２組のレジスタ群で構成されるメモリ部を使った重心演算回路７３Ｂ３について説明する。
図２４において、出力処理回路６２から時系列に入力される受光データは、減算器７３２Ｂにおいて定常光成分ｋｓが取り除かれる。ここでは、定常光成分ｋｓが取り除かれたデータを受光データＳ（ｎ，ｉ，ｈ）とする。分子データについては、乗算器７３６によって重み計数ｉが乗じられる。
【０１２７】
レジスタ６３５〜６３８は、それぞれ、２００Ｂｙｔｅの記憶容量を持つ読み書き可能なメモリである。レジスタ６３５，６３６には分子データが格納され、レジスタ６３７，６３８には分母データが格納される。
【０１２８】
また、レジスタ６３５，６３７には更新後のデータが格納され、レジスタ６３６，６３８には更新前のデータが格納される。つまり、レジスタ６３５，６３７にそれまでに累積された水平座標ｈのデータは、センサ５３の各ラインの読出しに先立ってレジスタ６３６，６３８に転送されて記憶され、レジスタ６３６，６３８に記憶されたデータと次の受光データとが加算されてレジスタ６３５，６３７に書き込まれる。レジスタ６３５〜６３８への読み書きは、センサ５３の各ラインの読出しに同調して行われるよう、メモリ制御回路６３Ａ３によって制御される。
【０１２９】
こうして逐次演算された分子データ及び分母データは、それぞれ３２回累積加算された後、レジスタ６３５，６３７から除算器７３５Ｂに出力され、重心ｉｐ（空間重心Ｍｐｅａｋ）が求められる。
【０１３０】
上述の実施形態によると、時間重心演算の方法において、スリット光Ｕの通過タイミングｎｏｐを受光量のピークタイミングに基づいて検出するのではなく、有効受光領域Ａｅに入っている所定期間（本実施形態では３２ライン分の期間）内における重心演算で算出される重心ｉｐ（時間重心Ｎｐｅａｋ）に基づいて検出するので、ノイズの影響を受け難い。また、予め決められた期間の出力を使用するので、ピーク検出回路が不要である。
【０１３１】
上述の実施形態においては、所定期間を有効受光領域Ａｅに入っている全期間である３２ライン分としたので、計測可能距離範囲ｄ’内にある物体Ｑに対して確実に時間重心Ｎｐｅａｋを算出することができる。しかし、例えば、受光量のピークの存在する前後における適当な期間、例えばピークの前後１５ライン分、１０ライン分、５ライン分などとすることも可能である。このように、所定期間をピークとの関連で定めることとすると、物体Ｑの表面からの正規の検出光以外の光による影響を少なくすることができる。
【０１３２】
上述の実施形態によると、空間重心演算の方法において、特定のタイミングにおける受光量の最大位置を、有効受光領域Ａｅ内の画素（本実施形態では３２ラインにわたる３２個の画素）における重心演算で算出される重心ｉｐ（空間重心Ｍｐｅａｋ）に基づいて検出するので、ノイズの影響を受け難い。また、予め決められた受光幅内の出力を使用するので、ピーク検出回路が不要である。
【０１３３】
上述の実施形態では、データＤ６２に基づいて３次元位置を算出したが、重心演算回路７３，７３Ｂで求めた重心ｉｐのデータに基づいて３次元位置を算出してもよい。また、３次元位置を算出する演算をホスト３が担うものであるが、３次元カメラ２に３次元位置を算出する演算機能を設けてもよい。３次元位置をルックアップテーブル方式で算定することも可能である。受光側の光学系５０において、ズームユニット５１に代えて交換レンズによって撮像倍率を変更してもよい。その他、３次元カメラ２，２Ｂ、ホスト３、又は計測システム１の全体又は各部の構成、処理内容又は順序、処理タイミングなどは、本発明の主旨に沿って適宜変更することができる。
【０１３４】
【発明の効果】
請求項１乃至請求項３の発明によれば、高分解能で高精度の計測が可能であり、構成が簡単でノイズの影響を受け難い３次元計測装置を提供することができる。
【０１３５】
請求項３の発明によると、計測可能距離範囲内にある物体に対して確実に通過タイミングを算出することができる。
【図面の簡単な説明】
【図１】本発明に係る計測システムの構成図である。
【図２】３次元カメラの外観を示す図である。
【図３】３次元カメラの機能構成を示すブロック図である。
【図４】投光レンズ系の構成を示す模式図である。
【図５】計測システムにおける３次元位置の算出の原理図である。
【図６】センサの読出し範囲を示す図である。
【図７】センサの撮像面におけるラインとフレームとの関係を示す図である。
【図８】メモリにおける各フレームの受光データの記憶状態を示す図である。
【図９】メモリにおける各フレームの受光データの記憶状態を示す図である。
【図１０】メモリにおける各フレームの受光データの記憶状態を示す図である。
【図１１】重心演算回路の構成を示すブロック図である。
【図１２】データの転送のタイミングの概念を示す図である。
【図１３】時間重心の概念を示す図である。
【図１４】３次元カメラにおけるデータの流れを示す図である。
【図１５】ホストにおける３次元位置演算の処理手順を示すフローチャートである。
【図１６】光学系の各点と物体との関係を示す図である。
【図１７】他の実施形態の３次元カメラの機能構成を示すブロック図である。
【図１８】ＦＩＦＯメモリを使った重心演算回路の例を示す図である。
【図１９】メモリの詳細な構成の例を示す図である。
【図２０】メモリの動作を模式的に説明するための図である。
【図２１】ＶＲＡＭを使った重心演算回路を示す図である。
【図２２】ＶＲＡＭの各アドレスＰｙに格納されるデータのライン番号を示す図である。
【図２３】メモリの詳細な構成の例を示す図である。
【図２４】空間重心演算の方法による重心演算回路の例を示す図である。
【図２５】スリット光投影法の概要を示す図である。
【図２６】スリット光投影法による計測の原理を説明するための図である。
【符号の説明】
１  計測システム（３次元計測システム）
３  ホスト（第１演算手段、第２演算手段、第３演算手段、第４演算手段）
４０  光学系（投光手段）
４３  ガルバノミラー（走査手段）
５３  センサ（撮像手段）
６１  システムコントローラ（撮像制御手段）
７３  重心演算回路（第１演算手段）
７３３  第１加算部
７３４  第２加算部
７３５  除算部
７３Ｂ，７３Ｂ１，７３Ｂ２  重心演算回路（第１演算手段）
７３Ｂ，７３Ｂ１，７３Ｂ３  重心演算回路（第３演算手段）
６３１  ＶＲＡＭ（第１加算部）
６３２  ＶＲＡＭ（第２加算部）
６３５，６３６  レジスタ（第１加算部）
６３７，６３８  レジスタ（第２加算部）
７３３Ｂ  レジスタ（第１加算部）
７３４Ｂ  レジスタ（第２加算部）
７３５Ｂ  除算器（除算部）
７３７  加算器（第１加算部）
７３８  加算器（第２加算部）
ｇ  画素（受光領域）
Ａｅ  有効受光領域（受光幅）
ｎｏｐ  通過タイミング
Ｎｐｅａｋ  時間重心
Ｍｐｅａｋ  空間重心
ｉｐ  重心（時間重心、空間重心）
Ｓ２  撮像面
Ｕ  スリット光（検出光）
Ｑ  物体
【図１】
0003873401.tif 000007
【図２】
0003873401.tif 000008
【図３】
0003873401.tif 000009
【図４】
0003873401.tif 000010
【図５】
0003873401.tif 000011
【図６】
0003873401.tif 000012
【図７】
0003873401.tif 000013
【図８】
0003873401.tif 000014
【図９】
0003873401.tif 000015
【図１０】
0003873401.tif 000016
【図１１】
0003873401.tif 000017
【図１２】
0003873401.tif 000018
【図１３】
0003873401.tif 000019
【図１４】
0003873401.tif 000020
【図１５】
0003873401.tif 000021
【図１６】
0003873401.tif 000022
【図１７】
0003873401.tif 000023
【図１８】
0003873401.tif 000024
【図１９】
0003873401.tif 000025
【図２０】
0003873401.tif 000026
【図２１】
0003873401.tif 000027
【図２２】
0003873401.tif 000028
【図２３】
0003873401.tif 000029
【図２４】
0003873401.tif 000030
【図２５】
0003873401.tif 000031
【図２６】
0003873401.tif 000032