以下、図面を参照しながら実施形態の説明を述べる。なお、以降、説明済みの要素と同一または類似の要素には同一または類似の符号を付し、重複する説明については基本的に省略する。
(実施形態)
実施形態に係る多眼カメラ装置は、例えば図2に示す3次元計測システムに組み込むことができる。この3次元計測システムは、プロジェクター/カメラ制御部10と、プロジェクター20と、画像処理装置300と、機構制御部200と、ステレオカメラ100とを含む。具体的には、この3次元計測システムは、例えばロボットビジョンを実現するためにロボット(ロボットハンドを含む)に搭載されたり、移動しながら撮影を行うために移動体(ドローンなどの航空機、車両を含む)に搭載されたりし得る。ここで、実施形態に係る多眼カメラ装置は、図2の要素のうちステレオカメラ100に限らず、その他の要素、例えば、機構制御部200の要素の一部または全部、を含み得る。
ステレオカメラ100は、図1に例示されるように、(左)カメラ101と、(右)カメラ102と、可動ミラー111と、可動ミラー112と、可動部材121と、可動部材122と、支持部材131と、支持部材132とを含む。また、後述されるように、ステレオカメラ100は、図1には示されない要素として、ベース部材140、ギア161,162、モータ171,172、角位置センサ181,182などを含み得る。なお、ステレオカメラ100は、3眼以上の多眼カメラに置き換えられてもよい。
プロジェクター/カメラ制御部10は、プロジェクター20、カメラ101およびカメラ102を制御する。具体的には、プロジェクター/カメラ制御部10は、プロジェクター20に既定の計測用パターンの投射を命令する。それから、プロジェクター/カメラ制御部10は、カメラ101およびカメラ102に、計測用パターンが投射された被写体30の撮影を命令する。
プロジェクター20は、プロジェクター/カメラ制御部10からの命令に従って、計測用パターンを被写体30に投射する。そして、カメラ101は、計測用パターンが投射された被写体30を撮影し、第1の画像を生成する。同様に、カメラ102は、計測用パターンが投射された被写体30を撮影し、第2の画像を生成する。
なお、プロジェクター/カメラ制御部10は、可動ミラー111および可動ミラー112の回転角が既定範囲内にある時に限って、カメラ101およびカメラ102に被写体30の撮影を命令してもよい。既定範囲は、可動ミラー111および可動ミラー112が被写体30からの光線をカメラ101およびカメラ102に導くことのできる範囲に基づいて定められ得る。可動ミラー111および可動ミラー112の回転角が既定範囲内にあるか否かは、例えば角位置センサ181および角位置センサ182の出力に基づいて判定可能である。
被写体30は、ベルトコンベアーに載せられており、図中のX軸方向に沿って略一定の速度で平行移動する。なお、被写体30の移動速度は、可変であってもよい。この場合には、後述される目標速度を被写体30の移動速度の変化に応じて動的に決定すればよい。
後述されるように、機構制御部200はカメラ101およびカメラ102にそれぞれ対応する可動ミラー111および可動ミラー112の回転角を被写体30の動きに追従して制御し、当該被写体30はカメラ101およびカメラ102から見て略静止した状態で撮影されるので、第1の画像および第2の画像における被写体30のブレを抑制できる。また、カメラ101およびカメラ102の撮影タイミング差の間も可動ミラー111および可動ミラー112は被写体30の動きに追従して回転しているので、撮影タイミング差の間の被写体30の動きに起因する、第1の画像または第2の画像における当該被写体30の位置のずれは抑制され、後述する画像処理において視差を高精度に推定することが可能となる。加えて、カメラ101およびカメラ102に比べて軽量な可動ミラー111および可動ミラー112を駆動するので、カメラ101およびカメラ102そのものを駆動した場合に比べて、追従可能な速度の上限は大きい。
画像処理装置300は、カメラ101から第1の画像を取得し、カメラ102から第2の画像を取得し、種々の画像処理を行う。例えば、画像処理装置300は、画素毎に第1の画像と第2の画像との間で画素ブロックレベルでのマッチングを行う。そして、画像処理装置300は、かかるマッチング結果に基づいて当該画素におけるカメラ101およびカメラ102の視差を推定し、さらにカメラ101およびカメラ102から被写体30における当該画素に対応する点までの距離を推定し得る。さらに、画像処理装置300または図示されない後段の外部装置が、距離の推定結果に基づいて被写体の3次元形状を推定してもよい。
なお、画像処理装置300は、後述されるように、カメラ101およびカメラ102にそれぞれ対応する可動ミラー111および可動ミラー112の回転角の誤差をそれぞれ示す第1の誤差データおよび第2の誤差データを機構制御部200から取得し、当該第1の誤差データおよび第2の誤差データに基づいて第1の画像および第2の画像をそれぞれ補正してから、画素ブロックレベルでのマッチングを行ってもよい。
機構制御部200は、可動部材121および可動部材122の少なくとも回転角を制御する。具体的には、機構制御部200は、例えばモータなどの小型のアクチュエーターに所望の制御値を示す制御信号を与え、可動部材121および可動部材122を必要なだけ回転させる。
機構制御部200は、例えば、少なくとも、後述される目標速度と、カメラ101およびカメラ102にそれぞれ対応する可動ミラー111および可動ミラー112の過去の(典型的には、前回の)目標回転角とに基づいて、当該可動ミラー111および可動ミラー112をそれぞれ回転させるための(回転)駆動力を発生するモータ171およびモータ172にそれぞれ要求される回転速度(角速度)を微小単位時間毎に繰り返し算出する。そして、機構制御部200は、モータ171およびモータ172の回転速度、回転方向、などを制御する。
なお、可動ミラー111および可動ミラー112は、連続回転運動をするように制御されてもよいし、往復回転運動をするように制御されてもよい。すなわち、可動ミラー111および可動ミラー112の回転角は、カメラ101およびカメラ102の撮影が有効となる既定範囲の終点に達した後、その始点まで順方向の回転により復帰してもよいし、逆方向の回転により復帰してもよい。
ここで、可動部材121は、軸部と突起部とを有し、その軸部に可動ミラー111を取り付けられる。可動部材121は、カメラ101およびカメラ102(を固定する支持部材)ならびに可動部材122とは独立して(すなわち連動することなく)回転が可能である。同様に、可動部材122は、軸部と突起部とを有し、その軸部に可動ミラー112を取り付けられる。可動部材122は、カメラ101およびカメラ102ならびに可動部材121とは独立して(すなわち連動することなく)回転が可能である。
可動ミラー111の回転角は、可動部材121の回転に連動して変化する。同様に、可動ミラー112の回転角は、可動部材122の回転に連動して変化する。
ここで、図1の例では、可動部材121は可動ミラー111の背面の中心付近に取り付けられ、可動部材122は可動ミラー112の背面の中心付近に取り付けられる。しかしながら、これは実装例の1つに過ぎない。可動部材121および可動部材122の取り付け位置は、可動ミラー112の背面の後方側(図1の例ではZ座標が大きくなる側)に取り付けられてよい。可動部材121および可動部材122をこのように取り付けることで、可動ミラー111および可動ミラー112の背面の中心付近に取り付けた場合に比べて、可動部材121および可動部材122の回転によるカメラ101およびカメラ102の仮想的なカメラ位置の動きを抑制することができる。すなわち、カメラ101およびカメラ102の光軸間隔をあまり変化させずに、輻輳角または視野方向を変化させることが可能となる。
カメラ101は、光学レンズと、受光画素と、ADC(Analog-to-Digital Converter)とを含む撮像ユニットである。カメラ101は、さらに色フィルタを含んでもよい。カメラ102の構成は、カメラ101と同一または類似であり得る。
カメラ101は、後述される第1の導光系からの入射光をレンズにより受光画素に結像し、アナログ/デジタル変換を行って、第1の画像を生成する。カメラ101は、第1の画像を画像処理装置300へ送る。同様に、カメラ102は、後述される第2の導光系からの入射光をレンズにより受光画素に結像し、アナログ/デジタル変換を行って、第2の画像を生成する。カメラ102は、第2の画像を画像処理装置300へ送る。なお、第1の画像および/または第2の画像は、後述されるように、ステレオカメラ100を基準とした被写体30の相対速度を算出するために利用されることがある。この場合に、第1の画像および/または第2の画像は、機構制御部200へも送られてよい。
第1の画像および第2の画像は、例えばUSB(Universal Serial Bus)ケーブル、光ファイバケーブル、HDMI(登録商標)(High-Definition Multimedia Interface)ケーブル、などの有線通信I/Fを介して、または例えばBluetooth(登録商標)、Wi-Fi(登録商標)などの無線通信技術を利用する無線通信I/Fを介して送信され得る。
カメラ101は、例えばその背面(光学レンズの備え付けられた面に対する裏面)が支持部材131に固定されており、可動部材121および可動部材122の回転による影響は実質的に受けない。すなわち、カメラ101の現実の位置および姿勢が、可動部材121および可動部材122の回転角により変化することはない。同様に、カメラ102は、例えばその背面が支持部材132に固定されており、可動部材121および可動部材122の回転による影響は実質的に受けない。すなわち、カメラ102の現実の位置および姿勢が、可動部材121および可動部材122の回転角により変化することはない。図1の例では、カメラ101およびカメラ102は、互いに背中合わせとなるように支持部材131および支持部材132にそれぞれ固定されているが、カメラ101の背面とカメラ102の背面との間に、プロジェクター20が配置されてもよい。これにより、ステレオカメラ100およびプロジェクター20を同一の筐体に収容することができる。他方、ステレオカメラ100を収容する筐体をコンパクト化する観点から、ステレオカメラ100およびプロジェクター20を別々の筐体に収容してもよい。
第1の導光系は、少なくとも1枚のミラーである第1のミラー群を含み、カメラ101へ第1の光線を含む入射光を導く。可動ミラー111は、この第1のミラー群に含まれる。同様に、第2の導光系は、少なくとも1枚のミラーである第2のミラー群を含み、カメラ102へ第2の光線を含む入射光を導く。可動ミラー112は、この第2のミラー群に含まれる。
カメラ101の仮想的なカメラ位置および/または姿勢は、第1の導光系の構成、例えば第1の導光系に含まれる1枚以上の可動ミラーの回転角に依存する。具体的には、カメラ101の仮想的なカメラ位置および/または姿勢は、第1のミラー群のうち第1の光線の光路上でカメラ101から最も遠いミラー(図1の例では可動ミラー111)における入射光としての第1の光線を仮想的に延長した直線に基づいて決まる。同様に、カメラ102の仮想的なカメラ位置および/または姿勢は、第2の導光系の構成、例えば第2の導光系に含まれる1枚以上の可動ミラーの回転角に依存する。具体的には、カメラ102の仮想的なカメラ位置および/または姿勢は、第2のミラー群のうち第2の光線の光路上でカメラ102から最も遠いミラー(図1の例では可動ミラー112)における入射光としての第2の光線を仮想的に延長した直線に基づいて決まる。
可動ミラー111の回転角が変化すると、カメラ101の仮想的なカメラ位置および/または姿勢は変化する。同様に、可動ミラー112の回転角が変化すると、カメラ102の仮想的なカメラ位置および/または姿勢は変化する。
可動ミラー111には、その回転角を正確に検出するために、図1には示されていない角位置センサ181が取り付けられ得る。角位置センサ181は、例えばロータリエンコーダである。角位置センサ181は、検出した回転角を示すデジタル信号を生成し、これを機構制御部200へ出力する。
同様に、可動ミラー112には、その回転角を正確に検出するために、図1には示されていない角位置センサ182が取り付けられ得る。角位置センサ182は、例えばロータリエンコーダである。角位置センサ182は、検出した回転角を示すデジタル信号を生成し、これを機構制御部200へ出力する。
なお、可動ミラー111および可動ミラー112は、片面が反射面として形成された板状のミラーであってもよいし、両面が反射面として形成された板状のミラーであってもよい。或いは、可動ミラー111および可動ミラー112は、3以上の側面が反射面として形成された多角柱状のミラーであってもよい。反射面の数が多いほど、上述の既定範囲の合計をより大きくすることが可能となる。
次に、図5、図6および図7にステレオカメラ100のXZ平面(正面)、YZ平面(側面)およびXY平面(底面)の様子をそれぞれ示す。図5および図6において、Z軸方向が鉛直方向に相当する。すなわち、図5乃至図7の例では、ステレオカメラ100の下方に被写体30が配置されていることになる。しかしながら、これは実装例の1つに過ぎず、図5が底面図かつ図7が正面図である、すなわち被写体30およびステレオカメラ100は鉛直方向上で重なり合っていない、と解することもできる。
図5乃至図7の例では、ステレオカメラ100は、図1において説明した要素に加えて、ベース部材140と、ギア161と、ギア162と、モータ171と、モータ172とを含む。
ベース部材140は、第1の面と、第2の面と、第1の面および第2の面の間を貫く複数の孔とを有する。図5では、第1の面が描かれているものの、第2の面は第1の面の反対側の面であるため、また孔は可動部材121、可動部材122、ギア161およびギア162によって遮蔽されているため、描かれていない。可動部材121および可動部材122は、それぞれベース部材140の孔を貫通するように配置されている。
なお、ベース部材140は、可動部材121およびギア161が貫通する2つの孔を有する第1のベース部材と、可動部材122およびギア162が貫通する2つの孔を有する第2のベース部材とで構成されてもよい。また、図7では、ベース部材140は、それぞれ複数の孔を有する2つの板状部材と当該2つの板状部材を接続する接続部材とで構成されているが、ベース部材140は断面がH字型の柱状部材として形成されてもよい。
可動部材121は、その長手方向の一端に周方向へ突出したギア状の突起部を有している。ここで、可動部材121の長手方向は、Y軸に沿っている。可動部材121は、この突起部をベース部材140の第1の面に掛けた状態で、当該可動部材121の一部が第2の面から露出するように孔を貫通している。また、可動部材121の突起部は、ギア161と噛み合うように配置される。故に、可動部材121は、この突起部がベース部材140の第1の面に掛かった状態で、支持部材131および支持部材132ならびに可動部材122と独立して、ギア161の回転に連動して当該可動部材121の長手方向を軸とした、すなわちY軸周りの回転が可能である。
同様に、可動部材122は、その長手方向の一端に周方向へ突出したギア状の突起部を有している。ここで、可動部材122の長手方向は、Y軸に沿っている。可動部材122は、この突起部をベース部材140の第1の面に掛けた状態で、当該可動部材122の一部が第2の面から露出するように孔を貫通している。また、可動部材122の突起部は、ギア162と噛み合うように配置される。故に、可動部材122は、この突起部がベース部材140の第1の面に掛かった状態で、支持部材131および支持部材132ならびに可動部材121と独立して、ギア162の回転に連動して当該可動部材122の長手方向を軸とした、すなわちY軸周りの回転が可能である。
ギア161は、モータ171のシャフトの先端に取り付けられ、可動部材121の突起部と噛み合うように、ベース部材140の第1の面上に配置される。同様に、ギア162は、モータ172のシャフトの先端に取り付けられ、可動部材122の突起部と噛み合うように、ベース部材140の第1の面上に配置される。
モータ171は、そのシャフトの先端の一部がベース部材140の第1の面から露出するように孔を貫通しており、その露出部分にはギア161が取り付けられる。モータ171は、電気信号を受け取り、その電気的エネルギーを力学的エネルギーに変換し、この力学的エネルギーによってギア161をY軸周りに回転駆動する。すなわち、モータ171は、ギア161を介して可動部材121に伝えられ、最終的に可動ミラー111に伝えられる回転駆動力を発生する。なお、モータ171は、第1の光線を含むカメラ101への入射光の光路を妨げないように配置され得る。例えば、モータ171は、カメラ101との間に第1の導光系が収まるように配置され得る。
同様に、モータ172は、そのシャフトの先端の一部がベース部材140の第1の面から露出するように孔を貫通しており、その露出部分にはギア162が取り付けられる。モータ172は、電気信号を受け取り、その電気的エネルギーを力学的エネルギーに変換し、この力学的エネルギーによってギア162をY軸周りに回転駆動する。すなわち、モータ172は、ギア162を介して可動部材122に伝えられ、最終的に可動ミラー112に伝えられる回転駆動力を発生する。モータ172は、第2の光線を含むカメラ102への入射光の光路を妨げないように配置され得る。例えば、モータ172は、カメラ102との間に第2の導光系が収まるように配置され得る。
モータ171およびモータ172は、互いに独立の電気信号により制御され得る。これらの電気信号は、機構制御部200から供給され得る。図5乃至図7に例示されるステレオカメラ100によれば、可動ミラー111および可動ミラー112のY軸周りの回転角、すなわちカメラ101およびカメラ102の仮想的な位置および/または姿勢を例えば被写体30を追従するように電気的に制御することができる。
ステレオカメラ100における各種構造部品、具体的には、可動部材121、可動部材122、支持部材131、支持部材132、ベース部材140、ギア161、およびギア162の一部または全部には、例えばマグネシウムなどの軽金属、またはPPS(Polyphenylene sulfide)などの樹脂、といった軽量性および強度に優れた素材が用いられ得る。かかる素材を適切に用いることで、多眼カメラ装置を実用的な強度を維持しながらも軽量に構成することが可能である。
次に、図3を用いて、機構制御部200の構成例を説明する。図3の機構制御部200は、画像取得部201と、画像記憶部202と、目標速度決定部203と、回転速度算出部211と、回転速度算出部212と、モータ制御部221と、モータ制御部222と、誤差算出部241と、誤差算出部242とを含む。
画像取得部201は、例えば、通信I/Fおよびプロセッサにより実現され得る。ここで、プロセッサは、典型的にはCPU(Central Processing Unit)および/またはGPU(Graphics Processing Unit)であるが、マイコン、FPGA(Field Programmable Gate Array)、またはDSP(Digital Signal Processor)、などであってもよい。画像取得部201は、カメラ101および/またはカメラ102から、第1の画像および/または第2の画像を複数時点に亘って取得する。画像取得部201は、取得した画像を画像記憶部202に保存する。なお、これらの第1の画像および/または第2の画像が撮影されている間、可動ミラー111および/または可動ミラー112は回転されないものとする。
画像記憶部202は、例えば、メモリ、および/または補助記憶装置により実現され得る。ここで、メモリは、種々の処理を実現するためにプロセッサによって実行されるプログラムおよび当該プログラムによって使用されるデータなどを一時的に格納する。また、補助記憶装置は、HDD(Hard Disk Drive)、SSD(Solid State Drive)、フラッシュメモリ、などであってよい。画像記憶部202は、画像取得部201によって複数時点に亘って取得された画像を保存する。画像記憶部202に保存された画像は、目標速度決定部203によって読み出される。
目標速度決定部203は、例えば、プロセッサにより実現され得る。画像記憶部202に保存された、複数時点に亘る第1の画像および/または複数時点に亘る第2の画像を読み出す。そして、目標速度決定部203は、複数時点に亘る第1の画像(または第2の画像)における被写体30の軌跡に基づいて、ステレオカメラ100を基準とする被写体30の相対速度を推定する。例えば、目標速度決定部203は、第1の時点に撮影された第1の画像における被写体30の位置と、第2の時点に撮影された第2の画像における被写体30の位置と、第1の時点と第2の時点との時間差に基づいて相対速度を推定してもよい。具体的には、目標速度決定部203は、画像における被写体30の変位を当該変位に要した時間で除算することにより、相対速度を推定してもよい。目標速度決定部203は、推定した相対速度に基づいて、例えば当該相対速度に略比例するように、目標速度を決定し、決定した目標速度を回転速度算出部211に通知する。
なお、目標速度決定部203は、ステレオカメラ100を基準とする被写体30の相対速度が、例えば、ベルトコンベアーの制御データ、人間による入力データ、速度センサの出力、などにより既知である場合には、この既知の相対速度に基づいて目標速度として決定してもよい。換言すれば、目標速度決定部203は、複数時点に亘る第1の画像(または第2の画像)から被写体30の相対速度を推定しなくてもよいことがある。故に、画像取得部201および画像記憶部202は不要となり得る。
ところで、ステレオカメラ100から見た被写体30の移動方向は、例えば図1に示すX軸に略平行であることが好ましい。より一般化すれば、被写体30は、ステレオカメラ100から見て、可動ミラー111(または可動ミラー112)の回転軸(これは、Y軸に平行)に略垂直な平面(例えばXZ平面)上を移動することが好ましい。これにより、可動ミラー111(または可動ミラー112)は、1つの軸周りに回転するだけで、被写体30を追従することが可能となる。
回転速度算出部211は、例えば、プロセッサにより実現され得る。回転速度算出部211は、少なくとも、目標速度決定部203からの目標速度と、可動ミラー111の過去の(典型的には、前回の)目標回転角とに基づいて、モータ171に必要とされる回転速度である第1の指定回転速度を算出する。回転速度算出部211は、第1の指定回転速度をモータ制御部221に通知する。
同様に、回転速度算出部212は、例えば、プロセッサにより実現され得る。回転速度算出部212は、少なくとも、目標速度決定部203からの目標速度と、可動ミラー112の過去の(典型的には、前回の)目標回転角とに基づいて、モータ172に必要とされる回転速度である第2の指定回転速度を算出する。回転速度算出部212は、第2の指定回転速度をモータ制御部222に通知する。
なお、可動ミラー111(または可動ミラー112)の目標回転角は、例えば回転速度算出部211(または回転速度算出部212)がこれまで算出した第1の指定回転速度(または第2の指定回転速度)の時間積分、すなわちモータ171(またはモータ172)の累積回転角、に基づいて算出することができる。具体的には、可動ミラー111(または可動ミラー112)の累積回転角は、モータ171(またはモータ172)の累積回転角に略比例し、その比例定数は例えばギア161および可動部材121(またはギア162および可動部材122)のギア比により算出可能である。回転速度算出部211(または回転速度算出部212)は、可動ミラー111(または可動ミラー112)の目標回転角を誤差算出部241(または誤差算出部242)に通知する。
ここで、第1の指定回転速度(または第2の指定回転速度)は、可動ミラー111(または可動ミラー112)が常にその時点の目標回転角に正しく位置していることを前提とすれば、可動ミラー111の目標回転角の(単位時間内の)更新量に略比例する。この目標回転角の更新量は、例えば以下のように定めることができる。
図13および図14に、可動ミラー112と、被写体30との位置関係が例示されている。時刻tにおける、可動ミラー112の回転角をθ(t)とし、被写体30のX軸方向の位置をx(t)とする。また、可動ミラー112からベルトコンベアーまでの距離をdとする。かかる条件の下では、下記数式(1)が成立し続けるように、可動ミラー112の回転角を制御すれば、被写体30の動きに関わらず第2の画像において当該被写体30を同一の位置、例えば画像中心に捉え続けることができる。
すなわち、任意の時刻tから(微小)単位時間Δt経過した時の、x(t)の変位と、-d×cot(2θ(t))の変位とが一致するように、単位時間Δt後の可動ミラー112の目標回転角θ(t+Δt)を定めればよい。具体的には、回転速度算出部212は、以下の数式(2)に示すように、可動ミラー112の回転角の倍角2θ(t)に対応する正接の逆数cot(2θ(t))の変化速度が、時刻tにおける被写体30の相対速度v(t)に比例する目標速度-v(t)/dに略一致するように、可動ミラーの時刻tにおける目標回転角θ(t)に基づいて可動ミラー112の目標回転角の更新量を算出すればよい。
そして、数式(2)は、以下のように書き換えることができる。
故に、回転速度算出部212は、可動ミラー112の目標回転角の更新量Δθ(t)(=θ(t+Δt)-θ(t))は、下記数式(3)により算出することができる。
ここで、前述のように、モータ171(またはモータ172)の累積回転角は、可動ミラー111(または可動ミラー112)の累積回転角に略比例し、逆もまた成り立つ。そして、第1の指定回転速度(または第2の指定回転速度)は、モータ171(またはモータ172)に要求される回転速度である。故に、第1の指定回転速度(または第2の指定回転速度)は、可動ミラー111の目標回転角の単位時間内の更新量に比例定数を乗じて得られる、モータ171(またはモータ172)に当該単位時間内に要求される回転角を、当該単位時間で除算することで算出可能である。
ただし、ここで説明した第1の指定回転速度(または第2の指定回転速度)の導出は、前述のように、可動ミラー111(または可動ミラー112)が常にその時点の目標回転角に正しく位置していることを前提としている。しかしながら、一般に、モータ171(またはモータ172)が制御値に厳密に一致する速度で回転することは困難であり、可動ミラー111(または可動ミラー112)の真の回転角は目標回転角に対して誤差を伴うであろう。
例えば、ステレオカメラ100から被写体30までの距離が5mであって、回転角の誤差が0.1度であったとすると、画像は約9mmずれることになる。ステレオカメラ100の焦点距離を10mm、画素サイズを5μmと仮定すれば、このずれは画像上で被写体30の位置が0.3画素分ずれることに相当する。この例では、被写体30の位置のずれは1画素未満に収まっているが、このずれ量は回転誤差が大きくなるほど大きくなる。さらに、かかる誤差を放置して第1の指定回転速度(または第2の指定回転速度)を算出し続ければ、誤差が累積し次第に無視できない大きさになり得る。このような、回転角の誤差による画像上での被写体30の位置のずれが顕在化すれば、画像処理装置300において行われる3次元計測の精度が低下するとともに、追従制御が破綻するおそれがある。
そこで、回転速度算出部211(または回転速度算出部212)は、誤差算出部241(または誤差算出部242)から第1の誤差データ(または第2の誤差データ)を取得し、当該第1の誤差データの示す誤差を前述の目標回転角の更新量からキャンセルして、第1の指定回転速度(または第2の指定回転速度)を算出してもよい。
後述するように、誤差算出部241(または誤差算出部242)からの第1の誤差データ(または第2の誤差データ)は、角位置センサ181(または角位置センサ182)によって検出された可動ミラー111(または可動ミラー112)の回転角と、その検出時点における可動ミラー111の目標回転角との誤差を表す。
このように、可動ミラー111(または可動ミラー112)のより正確な回転角に基づいて第1の指定回転速度(または第2の指定回転速度)を算出することで、モータ171(またはモータ172)によって生じる可動ミラー111の回転角の誤差を縮小しようとする負帰還制御が働く。故に、かかる誤差による、画像処理装置300における3次元計測の精度低下、追従制御の破綻、などを防止することができる。
モータ制御部221は、例えばモータドライバを含む。モータ制御部221は、回転速度算出部211から第1の指定回転速度を通知される。モータ制御部221は、第1の指定回転速度に従って、モータ171の回転速度を制御する。例えば、モータ制御部221は、回転速度に応じた電圧、電流、および/またはパルス幅を持つ電気信号をモータ171に供給する。
同様に、モータ制御部222は、例えばモータドライバを含む。モータ制御部222は、回転速度算出部212から第2の指定回転速度を通知される。モータ制御部222は、第2の指定回転速度に基づいて、モータ172の回転速度を制御する。例えば、モータ制御部222は、回転速度に応じた電圧、電流、および/またはパルス幅を持つ電気信号をモータ172に供給する。
誤差算出部241は、例えば、プロセッサにより実現され得る。誤差算出部241は、角位置センサ181から可動ミラー111の(角位置センサ181によって検出された)回転角を示すデジタル信号を受け取り、回転速度算出部211からこの回転角の検出時点における可動ミラー111の目標回転角を通知される。誤差算出部241は、可動ミラー111の回転角の目標回転角に対する誤差を算出する。誤差算出部241は、第1の誤差データを、回転速度算出部211および/または画像処理装置300へ送る。
同様に、誤差算出部242は、例えば、プロセッサにより実現され得る。誤差算出部242は、角位置センサ182から可動ミラー112の(角位置センサ182によって検出された)回転角を示すデジタル信号を受け取り、回転速度算出部212からこの回転角の検出時点における可動ミラー112の目標回転角を通知される。誤差算出部242は、可動ミラー112の回転角の目標回転角に対する誤差を算出する。誤差算出部242は、第2の誤差データを、回転速度算出部212および/または画像処理装置300へ送る。
以下、図8を用いて、図3の機構制御部200の動作例を説明する。
まず、モータ制御部221およびモータ制御部222は、可動ミラー111および可動ミラー112の回転角が既定の初期回転角に一致するように、モータ171およびモータ172を制御する(ステップS401)。なお、可動ミラー111および可動ミラー112の回転角が既定の初期回転角に略一致していることを検証するために、角位置センサ181および角位置センサ182の出力がモニタリングされてもよい。
ステップS401の後、被写体30が検出されるまで機構制御部200は待機する(ステップS402)。被写体30が検出されると、処理はステップS403へ進む。被写体30は、例えば第1の画像および/または第2の画像の解析結果に基づいて検出されてもよいし、赤外線、超音波、可視光などのセンサによって検出されてもよい。
ステップS403において、目標速度決定部203は、被写体30の相対速度に基づいて目標速度を決定する。次に、回転速度算出部211および回転速度算出部212は、ステップS403において決定された目標速度と過去のステップS404の実行時に算出された第1の指定回転速度および第2の指定回転速度とに基づいて、第1の指定回転速度および第2の指定回転速度をそれぞれ算出する(ステップS404)。なお、第1の指定回転速度および第2の指定回転速度は、過去のステップS407の実行時に生成された第1の誤差データおよび第2の誤差データにさらに基づいてそれぞれ算出されてもよい。
続いて、モータ制御部221およびモータ制御部222は、ステップS404において算出された指定回転速度に従って、モータ171およびモータ172をそれぞれ制御する(ステップS405)。
他方、角位置センサ181および角位置センサ182は、可動ミラー111および可動ミラー112の回転角を検出する(ステップS406)。そして、誤差算出部241および誤差算出部242は、ステップS406においてそれぞれ検出された可動ミラー111および可動ミラー112の回転角の、その検出時点における可動ミラー111および可動ミラー112の目標回転角に対する誤差をそれぞれ算出する(ステップS407)。
被写体30の撮影が終了すると図8の動作は終了し、被写体30の撮影が終了していなければ処理はステップS403に戻る(ステップS408)。ここで、被写体30の相対速度が略一定である場合には、処理はステップS403ではなくステップS404に戻ってもよい。被写体30の撮影の終了は、例えば、可動ミラー111および/または可動ミラー112の回転角が既定範囲を逸脱したか否かにより判定されてもよいし、第1の画像および/または第2の画像の解析結果に基づいて判定されてもよいし、赤外線、超音波、可視光などのセンサの出力に基づいて判定されてもよい。
次に、図4を用いて、画像処理装置300の構成例を説明する。図4の画像処理装置300は、画像取得部301と、誤差取得部302と、画像補正部303と、視差推定部304と、距離推定部305とを含む。
画像取得部301は、例えば、通信I/Fおよびプロセッサにより実現され得る。画像取得部301は、カメラ101およびカメラ102から、第1の画像および第2の画像を取得する。画像取得部301は、取得した画像を画像補正部303へ送る。
誤差取得部302は、例えば、通信I/Fおよびプロセッサにより実現され得る。誤差取得部302は、機構制御部200の誤差算出部241および誤差算出部242から、第1の誤差データおよび第2の誤差データをそれぞれ取得する。誤差取得部302は、取得した第1の誤差データおよび第2の誤差データを画像補正部303へ送る。
画像補正部303は、例えば、プロセッサにより実現され得る。画像補正部303は、画像取得部301から第1の画像および第2の画像を受け取り、誤差取得部302から第1の誤差データおよび第2の誤差データを受け取る。画像補正部303は、第1の画像を第1の誤差データに基づいて補正して第1の補正画像を生成し、第2の画像を第2の誤差データに基づいて補正して第2の補正画像を生成する。例えば、画像補正部303は、第1の誤差データ(または第2の誤差データ)の示す回転角の誤差をキャンセルするように第1の画像(または第2の画像)を変換することで、当該第1の画像を補正してもよい。
視差推定部304は、例えば、プロセッサにより実現され得る。視差推定部304は、画像補正部303から第1の補正画像および第2の補正画像を受け取る。視差推定部304は、第1の補正画像および第2の補正画像に基づいて、任意の画素に関するカメラ101およびカメラ102の視差を推定する。そして、視差推定部304は、視差推定結果を距離推定部305へ送る。
具体的には、視差推定部304は、まず、第1の補正画像における画素の1つを注目画素として決定する。なお、以降の説明では、第1の補正画像から注目画素を決定することとするが、第2の補正画像から注目画素を決定することも可能である。後者の場合には、以降の説明において「第1の補正画像」および「第2の補正画像」の用語を適宜読み替えればよい。
視差推定部304は、決定した注目画素を含む第1の画素ブロックを第1の補正画像から抽出する。それから、視差推定部304は、第1の画素ブロックに対応する第2の画素ブロックを第2の補正画像から探索する。
視差推定部304は、注目画素を変更しながら第1の補正画像の各画素について上記探索処理を繰り返す。これにより、第1の補正画像内の各画素について、第2の補正画像とのマッチングが行われる。マッチング結果は、例えば第1の補正画像の各画素(マッチングに成功した画素)の座標(位置)と、第2の補正画像において当該画素に対応するとして探索された画素の座標とを含み得る。
視差推定部304は、マッチング結果に基づいて、第1の補正画像内の各画素(マッチングに成功した画素)に関するカメラ101およびカメラ102の視差を推定する。視差推定結果は、例えば第1の補正画像の各画素の座標と当該画素に関する視差ベクトルとを含み得る。
距離推定部305は、例えば、プロセッサにより実現され得る。距離推定部305は、視差推定部304から視差推定結果を受け取り、当該視差推定結果に基づいて、第1の画像内の画素(マッチングに成功した画素)毎に、カメラ101およびカメラ102から被写体30における当該画素に対応する点までの距離、すなわち深度を推定する。距離推定結果は、例えば第1の画像の各画素の座標と当該画素の深度とを含み得る。距離推定結果は、いわゆる深度マップであってもよい。距離推定結果は、例えば被写体30の3次元形状を推定するために利用されてもよい。被写体30の3次元形状は、例えば図示されない外部装置によって推定されてもよいし、画像処理装置300に含まれ得る図示されない3次元形状推定部によって推定されてもよい。
以下、図9を用いて、図4の画像処理装置300の動作例を説明する。
まず、画像取得部301は、カメラ101およびカメラ102から第1の画像(データ)および第2の画像(データ)をそれぞれ取得する(ステップS501)。他方、誤差取得部302は、機構制御部200の誤差算出部241および誤差算出部242から第1の誤差データおよび第2の誤差データをそれぞれ取得する(ステップS502)。
画像補正部303は、ステップS501において取得された第1の画像および第2の画像を、ステップS502において取得された第1の誤差データおよび第2の誤差データに基づいてそれぞれ補正して第1の補正画像および第2の補正画像をそれぞれ生成する(ステップS503)。
視差推定部304は、ステップS503において生成された第1の補正画像および第2の補正画像に基づいて、任意の画素に関するカメラ101およびカメラ102の視差を推定する(ステップS504)。距離推定部305は、ステップS504における視差推定結果に基づいて、任意の画素に関して、カメラ101およびカメラ102から被写体30における当該画素に対応する点までの距離を推定する(ステップS505)。
以上説明したように、実施形態に係る多眼カメラ装置は、各カメラへ光線を導く導光系を備えており、この各導光系はモータによって回転される可動ミラーを含む。そして、この多眼カメラ装置は、各可動ミラーが被写体の動きを追従するように、当該可動ミラーに対応するモータを制御する。具体的には、この多眼カメラ装置は、モータに要求される回転速度を、少なくとも目標速度と当該可動ミラーの過去の目標回転角とに基づいて微小単位時間毎に繰り返し算出して更新することで、当該モータに対応する可動ミラーに被写体の動きを追従させる。このように、この多眼カメラ装置は、モータを固定速度で回転させるのでなく、その時々の目標速度と当該可動ミラーの(目標)回転角とに応じて当該可動ミラーに対応するモータの回転速度を可変に制御する。故に、この多眼カメラ装置によれば、被写体が多眼カメラ装置に近い(例えば、被写体が多眼カメラ装置の真正面にある)時であろうと、被写体が多眼カメラ装置から遠い(例えば、被写体が多眼カメラ装置をと要りすぎる前、または後)時であろうと、換言すれば広い角度範囲に亘って、当該被写体の動きを追従することが可能となる。
また、この多眼カメラ装置は、可動ミラー、可動部材、ギア、などの限られた部品をモータにより駆動するので、カメラ、すなわちレンズ、受光画素およびADCなどを含む撮像ユニット全体を駆動する場合に比べて、被写体に対する高い追従性能を実現する。すなわち、多眼カメラ装置および/または被写体が高速に動く場合にも、被写体を追従することができる。さらに、この多眼カメラ装置は、被写体を追従するためにカメラを動かす必要がないので、当該カメラに接続されたケーブルの摩耗、断線が生じにくい。
なお、ステレオカメラ100および機構制御部200のうち、カメラ101およびカメラ102以外の要素の一部または全部をまとめて、ミラー可動機構と呼ぶこともできる。このミラー可動機構は、多眼カメラのアタッチメントであってよい。例えば、可動ミラー111、可動ミラー112、可動部材121、可動部材122、モータ171、モータ172、モータ制御部221、およびモータ制御部222を含むミラー可動機構を、通常のステレオカメラに取り付けることで、被写体追従可能な多眼カメラ装置を構成することができる。
(変形例1)
前述のように、実施形態に係る多眼カメラ装置を含む3次元計測システムは、移動しながら撮影を行うために移動体(ドローンなどの航空機、車両を含む)に搭載され得る。例えば図10に示されるように、多眼カメラ装置は、空撮のためにドローン60の底面に取り付けられ得る。なお、これに限らず、多眼カメラ装置は、任意の移動体の上面、底面、正面、背面、および/または側面に取り付けられ得る。
図10の例において、被写体30は静止しているものとするが、可動としてもよい。ただし、被写体30の移動方向は、ドローン60の移動方向と平行であることが好ましい。
ドローン60は、回転翼61および回転翼62を含む複数(例えば、4枚)の回転翼を備えており、各回転翼の回転方向および/または回転速度を適切に制御することにより、上昇、下降、前進、後退、旋回、など空中を自在に移動することができる。
ただし、可動ミラー111、可動ミラー112、可動部材121および可動部材122が、Y軸周りに回転するのであれば、ドローン60は少なくとも被写体30の撮影時には例えば図10に示すX軸に略平行に移動することが好ましい。より一般化すれば、ドローン60は、可動ミラー111(または可動ミラー112)の回転軸(これは、Y軸に平行)に略垂直な平面(例えばXZ平面)上を移動することが好ましい。
なお、被写体30が静止している場合には、ステレオカメラ100を基準とする被写体30の相対速度はドローン60の移動速度に相当し、当該ドローン60の移動速度に基づいて、例えば略比例するように、前述の目標速度が決定されることになる。ドローン60の移動速度は、複数時点に亘る第1の画像(または第2の画像)から推定する必要があるかもしれないし、例えば、ドローン60の制御データ、人間による入力データ、当該ドローン60に搭載された図示されない速度センサの出力、などにより既知であるかもしれない。ここで、ドローン60の移動速度は、可変であってもよい。この場合には、目標速度をドローン60の移動速度の変化に応じて動的に決定すればよい。
(変形例2)
前述の実施形態では、図1に例示されたように、カメラ101およびこれに付随する要素(可動ミラー111、可動部材121、支持部材131、など)と、カメラ102およびこれに付随する要素(可動ミラー112、可動部材122、支持部材132、など)とが、X軸方向に沿って並んで配置される。しかしながら、図11および図12に例示されるように、カメラ101およびこれに付随する要素と、カメラ102およびこれに付随する要素とは、Y軸方向に沿って並んで配置されてもよい。
このような配置によれば、可動ミラー111および可動ミラー112の目標回転角が共通となるので、可動ミラー111および可動ミラー112の目標回転角を個別に算出する場合に比べて、第1の指定回転速度および第2の指定回転速度を算出するために要求される計算量を削減することができる。
(変形例3)
前述の実施形態では、画像処理装置300は、第1の誤差データおよび第2の誤差データに基づいて第1の画像および第2の画像をそれぞれ補正して第1の補正画像および第2の補正画像をそれぞれ生成し、当該第1の補正画像および第2の補正画像に基づいて視差を推定し得る。
しかしながら、画像処理装置300における第1の誤差データおよび第2の誤差データの利用法はこれに限られない。例えば、視差推定部304は、第1の画像および第2の画像に基づいて視差を推定し、この視差推定結果を第1の誤差データおよび第2の誤差データに基づいて補正することで、最終的な視差推定結果を得るようにしてもよい。この場合に、画像補正部303は不要となり得る。
(変形例4)
前述の実施形態では、モータ171およびモータ172によってミラー111およびミラー112の回転を実現した。しかしながら、モータに限らずロータリーアクチュエータなどの任意の回転駆動機構が利用可能である。かかる回転駆動機構の一例が図15および図16に示される。図15および図16には、ミラー111に関する回転駆動機構が描かれているが、ミラー112に関しても同様の回転駆動機構が採用され得る。
図15および図16に例示される回転駆動機構は、磁石191と、コイル192と、コイル保持部材193と、コイル194と、磁石195とを含む。磁石191および磁石195は、同じ極(図15および図16の例ではN極であり、以降の説明もこれを前提とする)を互いに向かい合わせるように配置される。
コイル192およびコイル194は、磁石191および磁石195のN極側に巻き付けられており、その電流の向きおよび方向が機構制御部200によって制御される。コイル192およびコイル194はともに、コイル保持部材193によって保持されている。すなわち、コイル192およびコイル194に同一方向の電流を流すことで、偶力を発生させてコイル保持部材193を回転させることができる。さらに、コイル192およびコイル194に流す電流の大きさおよび方向をそれぞれ制御することで、コイル保持部材193の回転角および回転方向をそれぞれ制御することができる。
そして、図15および図16の例において、可動部材121は、その長手方向の一端にコイル保持部材193が取り付けられる。ここで、可動部材121の長手方向は、Y軸に沿っている。故に、可動部材121は、支持部材131および支持部材132ならびに可動部材122と独立して、コイル保持部材193の回転に連動して当該可動部材121の長手方向を軸とした、すなわちY軸周りの回転が可能である。
上述の実施形態は、本発明の概念の理解を助けるための具体例を示しているに過ぎず、本発明の範囲を限定することを意図されていない。実施形態は、本発明の要旨を逸脱しない範囲で、様々な構成要素の付加、削除または転換をすることができる。
上述の実施形態では、いくつかの機能部を説明したが、これらは各機能部の実装の一例に過ぎない。例えば、1つの装置に実装されると説明された複数の機能部が複数の別々の装置に亘って実装されることもあり得るし、逆に複数の別々の装置に亘って実装されると説明された機能部が1つの装置に実装されることもあり得る。
上記各実施形態において説明された種々の機能部は、回路を用いることで実現されてもよい。回路は、特定の機能を実現する専用回路であってもよいし、プロセッサのような汎用回路であってもよい。
上記各実施形態の処理の少なくとも一部は、例えば汎用のコンピュータに搭載されたプロセッサを基本ハードウェアとして用いることでも実現可能である。上記処理を実現するプログラムは、コンピュータで読み取り可能な記録媒体に格納して提供されてもよい。プログラムは、インストール可能な形式のファイルまたは実行可能な形式のファイルとして記録媒体に記憶される。記録媒体としては、磁気ディスク、光ディスク(CD-ROM、CD-R、DVD等)、光磁気ディスク(MO等)、半導体メモリなどである。記録媒体は、プログラムを記憶でき、かつ、コンピュータが読み取り可能であれば、何れであってもよい。また、上記処理を実現するプログラムを、インターネットなどのネットワークに接続されたコンピュータ(サーバ)上に格納し、ネットワーク経由でコンピュータ(クライアント)にダウンロードさせてもよい。