cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

OpenCVでステレオ画像処理(その2)

ステレオ対応点探索の前に、左右の画像を平行化します。

カメラキャリブレーションの状況のよって、平行化は3つの方法に分けられます。

1.内部・外部パラメータ両方ある場合

2.内部パラメータのみある場合

3.両方無い場合[1]

特徴点の対応[2][3][4]から、findFundamentalMat関数でF行列を求めて、stereoRectifyUncalibrated関数でホモグラフィ変換行列を求めて、warpPerspective関数で画像変換。

 [追記2017/10/29] 素晴らしいページ

qiita.com

 

 

2や3で上手くいけば簡単なのですが、よほどうまくやらないと上手くいきません。

3を[1]で紹介されている方法でテストしてみましょう。ただし、opencvの現在のバージョンは特徴点の取り扱い方が変更されているので[2][3]を参考に書き換えます。

[入力画像]

left01.jpg

 f:id:cvl-robot:20140214141253j:plain

right01.jpg 

f:id:cvl-robot:20140214141244j:plain

 対応点(SURF,SURF,クロスチェックなし)

f:id:cvl-robot:20140214141437p:plain

rectified_left01

f:id:cvl-robot:20140214141517p:plain

rectified_right01

f:id:cvl-robot:20140214141534p:plain

とてもちゃんと合っているようには見えませんね・・・。でも解が求まるだけでもマシな方です。

いろいろ特徴点抽出の手法の組み合わせを試して、一番良かったものが ”PyramidSIFT", "SIFT", "FrannBased", クロスチェック無し,でした。ただし、この絵の場合という条件付きで、上手くいったのはたまたまです。

f:id:cvl-robot:20140214195136p:plain

f:id:cvl-robot:20140214195059p:plain

f:id:cvl-robot:20140214195110p:plain

HH

f:id:cvl-robot:20140214195206j:plain

ちなみに平行化無しで同じようにSTEREO_HHを掛けた結果はこちらです。

比較すると、それなりにはできていますね。

f:id:cvl-robot:20140214195451j:plain

 

[1]hen_cyberneの備忘録:http://blog.livedoor.jp/hen_cyberne/archives/51072839.html

[2]MIRU2013チュートリアル:SIFTとそれ以降のアプローチ:http://www.slideshare.net/hironobufujiyoshi/miru2013sift

[3]おべんきょうwiki: http://www23.atwiki.jp/yahirohumpty/m/pages/25.html

[4]whoopsidaisies's diary, OpenCVで画像の特徴抽出・マッチングを行う: http://whoopsidaisies.hatenablog.com/entry/2013/12/07/135810