2013-12-11 60 views
2

Undistorting /糾正圖像我把代碼的例子來自這本書校準相機和undistorting圖片:shop.oreilly.com/product/9780596516130.do與OpenCV的

據我瞭解OpenCV的工作通常的相機校準方法完全適用於「正常」的相機。 說到魚眼鏡頭雖然我們必須使用8個校準參數而不是5的矢量,並且還要使用方法cvCalibrateCamera2中的標誌CV_CALIB_RATIONAL_MODEL。 至少,這就是它在OpenCV documentary

是這麼說的,當我使用這個圖像是這樣的(Sample images from OCamCalib)陣列上,我得到使用cvInitUndistortMap以下結果:abload.de/img/rastere4u2w.jpg

由於產生的圖像被切割從整體失真的圖像中,我繼續使用cvInitUndistortRectifyMap(像它在這裏stackoverflow.com/questions/8837478/opencv-cvremap-cropping-image描述)。所以我得到了以下結果:abload.de/img/rasterxisps.jpg

現在我的問題是:爲什麼整個圖像不失真?在我後來的結果的一些圖片中,你可以認識到,例如筆記本電腦仍然完全失真。我如何使用標準OpenCV方法取得更好的結果?

我是新來的stackoverflow,我也是新來的OpenCV,所以請原諒我的缺點,當表達我的問題。

+0

對不起,我的問題中的鏈接,但因爲我是新來的stackoverflow我只允許使用最大的2個鏈接。 – VollNoob

+0

我還沒有與undistortion和校準(雖然我用它經常)這麼多的經驗,但問題可能是你的棋盤圖案僅覆蓋了圖像的(小)部分(所有圖片) ,讓您的校準和undistortion僅適用於圖像的一部分。 – Micka

+1

記住一些前同事的一個項目,我發現自己的shortpaper,提的是常見的校準技術可能不是極端的魚眼攝像頭的工作,但紙是從2008年所以不知道openCV是否已經使用「更好」的技術: http://www.lfb.rwth-aachen.de/bibtexupload/pdf/STE08b.pdf – Micka

回答

2
  1. 所有的棋盤角落應該是可見的被發現。該算法需要一定尺寸的棋盤,例如4x3或7x6(例如)。棋盤周圍的白色邊框也應該可見,否則黑色方塊可能無法精確定義。

  2. 由於失真是徑向的(即它們隨着半徑增加)並且您找到的係數是錯誤的,所以在unistort()之後,圖像外圍仍然有很高的失真。後者是錯誤的,因爲在校準過程中儘量減少誤差平方的總和像素座標,你並不代表有足夠的樣本外圍。

待辦事項:如果您使用8 distCoeff,則必須具有20-40個棋盤圖案圖像。在不同的角度傾斜你的板子,把它們放在不同的距離,並將它們分散開來,尤其是在周圍。請記住,校準的成功取決於採樣,並在看到從您的棋盤清楚vanishing points(因此s lanting and tilting).