2010-09-28 74 views
7

我一直在使用偉大的Emgu C#包裝來爲OpenCV收集來自家庭內置立體聲裝置的圖像。兩個攝像頭用螺栓固定在一塊木頭上,相距35釐米,希望能讓我在10-20米範圍內製作深度圖。我已經將它們設置爲與我可以做到的平行(從三角測試測試大約89.3度)。Emgu(OpenCV for C#) - 使用cvStereoRectify構建視差圖

我試圖從這些製作一個視差圖,雖然過程作爲代碼的結果是非常隨機的。我的意思是,每次我試圖運行立體聲校正時,我都會得到非常不同的結果,並且圖像經常如此嚴重扭曲,屏幕上幾乎看不到任何東西。

據我所知做,這是如下的方式:


1)打印關閉棋盤圖案(例如6×8內角) - 粘在平的東西。

2)從攝像機1拍攝一組約10張照片,全視角但不同位置持有棋盤。

3)使用CameraCalibration.FindChessboardCorners找到內角(8 6)

4)使用img.FindCornerSubPix()來細化這些角位置,以子像素水平

5)使用CameraCalibration.CalibrateCamera ()來計算本徵照相機的細節,並且此保存爲XML文件

6)上述重複相機2

7)現在你有你可以採取一個立體聲p上的內部相機失真信息並使用CameraCalibration.StereoCalibrate()與之前計算的固有數據計算外部信息(相機1和2之間的偏移和旋轉)。 8)使用CvInvoke.cvStereoRectify()和CvInvoke.cvInitUndistortRectifyMap(),然後使用CvInvoke.cvRemap()構建一個輸出圖像,該圖像應該排列在Y中,因此您可以運行其中一個立體對應測試。

我發現你需要使用Emgu 2.1 ver 806才能讓cvStereoRectify在沒有訪問衝突錯誤的情況下工作。


我想我的問題是:

A)是我的過程是否正確?我一直在做攝像機固有的校準作爲一個單獨的過程,因爲當相機距離相距35釐米時,在辦公室看到他們兩個人的棋盤並且很難將它移動很多..因爲它很快就會離開側面其中一個相機視圖。我認爲,因爲這些值是固有的,所以它們與相機有關,因此應該轉換到立體聲程序OK。它是否正確?

在cvStereoRectify過程中,似乎內部值已經發生了變化,並且正在變得非常不同。

例如。第一階段失真值= 0.22,-1.2,0.01,-0.01,2.6 cvStereoRectify後值改爲= 10,-489,-0.03,-0.09,13208

我不是專家,但第一個集似乎更像我從其他人的評論中看到的,而第二集看起來相當出色!B)有什麼方法可以阻止在cvStereoRectify期間更新的內部+失真值?

C)這對於內在價值是否正確(937,0,290,0,932,249,0,0,1)?

非常感謝任何提示...我已經被困在這一段時間,現在......我真的不知道該過程的一部分被扔了錯誤。任何提示或建議將是非常歡迎......我沒有在幾年使用EMGU

+0

我剛剛發現,一切似乎工作更好,如果你收集的圖像在同一時間從L和R相機設置,然後解決所有的對象模型點(即棋盤的角落COORDS)和兩套的圖像角座標(即左和右相機子像素座標)。 – timemirror 2010-09-29 06:35:14

+0

當棋盤相當靠近相機時,它似乎做得更好......我的問題是,這並沒有給我很大的工作空間,因爲我的相機相隔甚遠。因此,我剛剛製作了一個更大的棋盤(200%),並將其放在更遠的地方。給我角落匹配的準確性,並且還有更多的空間來移動它。似乎幫助...仍在努力! – timemirror 2010-09-29 06:37:01

+0

@timemirror:您是否檢出了Matlab校準工具箱(www.vision.caltech.edu/bouguetj/calib_doc/)或Danail Stoyonov的相機校準工具(http://ubimon.doc.ic.ac.uk/dvs/m581 .html)都是優秀的校準工具。順便說一下,你對emguCV庫的發現是什麼,你是否得到了滿意的結果? – 2010-12-02 08:34:44

回答

0

,但我用它來校準相機和Kinect的。

我發現可以有一些混亂與矩形角的順序如果矩形是完全水平 - 我從來沒有真正得到到的原因,而這似乎只是爲我工作底部。嘗試設置板子,使矩形處於45度角(即從正面觀看更多菱形,如果這有意義的話)。

我非常基本的理解是,這應該很容易讓這兩款相機,以確保它們選擇相同的角落作爲第一個彎道開始從計數。

我不能保證,這將解決您的問題 - 它可能只是我有一些極其錯誤在我的代碼,這就是爲什麼它沒有產生正規成果的時候,棋盤持平。再一次,它不會花費你很長時間來測試,而且可能只是工作。