32298
宜しくお願いします。  
OpenCVで、２台のカメラを配置しステレオカメラにしています。  
この撮影画像から視差を用いて深度の測定が目的です。  
しかし、視差画像を取得しても期待するような結果が得られていません。  
一部分は白い色が出ていますが、多くは黒塗りの状態です。

これはステレオ撮影した左側の画像と視差画像です。  
[![画像の説明をここに入力](https://i.stack.imgur.com/YGJ26.png)](https://i.stack.imgur.com/YGJ26.png)

そこで、まずキャリブレーションの仕方について正しいのかお伺いしたいです。

２台のカメラは１６ｃｍ程度離して設置し、撮影対象の部分は２ｍ程度離れた場所です。  
カメラの視線はほぼ平行に設置しているつもりです。  
キャリブレーションボードは24mmの10x7のチェスボードで、1.5ｍくらいはなれば場所で１０枚以上撮影しています。

質問はですが、  
カメラは内側を向けて対象物が左右カメラとも中心に来るように設置すべきでしょうか？  
また、キャリブレーションボードは対象物より少し手前において角度を変えながら撮影していますが、対象物と同じ距離で実施すべきでしょうか？

宜しくお願い致します。
CC BY-SA 3.0
2017-02-01T03:51:36.457
32296
2017-02-01T06:36:18.060
20476
question
opencv camera
OpenCVのステレオカメラのキャリブレーションについて
通常ステレオカメラというと，二つのカメラを高さを揃えて平行に置き，横方向のズレだけが存在するようにセッティングすることを指します．  
こうすることで単純にズレと三角形の比から奥行きを求めることができ，後はどのようにしてズレを計測するかという問題に帰着できるためです．  
今回の場合は思ったよりもズレが少ないということなのでカメラ同士をもっと離したり，ズレを計測するアルゴリズムのパラメータを調節したりするといったことが対処として考えられます．

OpenCVでチェスボードを利用してキャリブレーションする場合は，複数の異なる奥行きや位置，角度のボードの画像を用いるべきです．これはカメラのパラメータを求める時に様々なデータがある方が誤差が少なくなるためです．  
確認のために，得られた画像を求めたカメラパラメータで実際にUndistortしてみてどのように変換されるかチェックしてみるのも手だと思います．

実際にOpenCVの関数を利用する上で，細かい部分でどうすればいいか分からなくなった場合にはその関数内部で利用されているアルゴリズムの仕組みを調べることをお勧めします．
CC BY-SA 3.0
2017-02-01T06:36:18.060
32298
2017-02-01T06:36:18.060
4548
32296
answer