文章目錄
一、去畸變的分類:
1.1.在普通相機cv模型中,畸變系數主要有下面幾個:(k1; k2; p1; p2[; k3[; k4; k5; k6]] ,其中最常用的是前面四個,k1,k2為徑向畸變系數,p1,p2為切向畸變系數。
2.在fisheye模型中,畸變系數主要有下面幾個(k1,k2,k3,k4)
這篇文章主要介紹普通相機cv模型
二、去畸變的兩種方法
其實去畸變可以分為有兩種方法(每種方法均給出參數鏈接,有興趣可以跳轉查看)
1.getOptimalNewCameraMatrix+undistort(本篇文章簡寫為GU)
2.getOptimalNewCameraMatrix+initUndistortRectifyMap+remap(本篇文章簡寫為GIR)
區別
:GU方法中的undistort其實是第二種方法GIR中initUndistortRectifyMap+remap的結合,在調用undistort函數的時候,內部其實就是在調用initUndistortRectifyMap+remap。
使用范圍
:對於一張圖片,GU方法和GIR方法都可以使用,但是當圖片多的時候,GU方法就會浪費時間,因為initUndistortRectifyMap()這個函數在處理多個圖片時,他的輸出(mapx、mapy)其實只要計算一次就夠了,然后把(mapx、mapy)作為remap的其中兩個輸入進行畸變校正,只需要多次調用remap即可。
三、函數分析
1.**alpha
**參數
這里主要說一下getOptimalNewCameraMatrix()函數中的alpha參數,他的大小在0~1之間,如果
alpha=1,原圖像的所有像素能夠得到保留,也就是在去畸變之后會出現黑色區域;alpha=0,會將黑色像素去除;在0~1之間,會按照比例重新計算fx,fy,cx,cy。這里alpha的取值,其實是在改變inner和outer矩陣
事實上,內矩陣inner(alpha=0)等同於不含任何黑色邊框的圖幅大小,而外矩陣outer(alpha=1)等同於原圖大小
圖片引用自一篇文章(https://blog.csdn.net/a472609409/article/details/90515742)
圖一
圖二
2.**initUndistortRectifyMap()
**函數
1.cameraMatrix
:輸入相機矩陣
2.distCoeffs
:輸入參數,相機的畸變系數:(k1,k2,p1,p2[,k3[,k4,k5,k6[,s1,s2,s3,s4[,τx,τy]]]]),有4,5,8,12或14個元素。如果這個向量是空的,就認為是零畸變系數。
3.R
:可選的修正變換矩陣,是個3*3的矩陣。通過stereoRectify計算得來的R1或R2可以放在這里。如果這個矩陣是空的,就假設為單位矩陣。在cvInitUndistortMap中,R被認為是單位矩陣。
4.newCameraMatrix
:新的相機矩陣
5.size
:未畸變的圖像尺寸。
6.m1type
:第一個輸出的映射的類型,可以為 CV_32FC1, CV_32FC2或CV_16SC2,參見cv::convertMaps。
7.map1
:第一個輸出映射。
8.map2
:第二個輸出映射。
3.**undistort()
**函數
如果undistort函數的最后一個參數使用原相機內參,那么得到的結果就是上面圖1的結果,相當於alpha=0的情況。
如果undistort函數的最后一個參數使用getOptimalNewCameraMatrix計算出來的新矩陣,那么得到損失像素后的圖像,也就是當alpha=1時,得到上面圖2的結果。
四、總結
好了,對於圖片的矯正,還有兩個函數,分別是getOptimalNewCameraMatrix,remap,不過這兩個函數沒有太多太容易出錯的地方,根據上面給出的參數鏈接就可以寫對。
目前這篇文章只是對圖像進行去畸變,如果要對某一個像素點進行去畸變,可以參考引用5,里面有具體介紹!
目前學到這些,后續我也要對某一個像素點進行去畸變,到時候再進行更新!
五、引用
感謝下列文章的幫助:
1.https://www.cnblogs.com/riddick/p/6711263.html
2.https://blog.csdn.net/a472609409/article/details/90515742
3.https://blog.csdn.net/u013341645/article/details/78710740
4.https://zhuanlan.zhihu.com/p/74133719
5.https://zhuanlan.zhihu.com/p/137053640(該篇文章使用C++進行編寫,但是內容還是排版都看到很舒服)
6.https://www.jianshu.com/p/6daa8dbbfa30(該篇文章主要對畸變函數進行比較)