1. 常見(jiàn)的圖片畸變
無(wú)人駕駛攝像頭/照相機(jī)鏡頭往往會(huì)有兩種形式的圖像變形,徑向畸變(Radial Distortion)和切向變形(Tangetial Distortion)攒庵。前者是由于鏡頭成像的過(guò)程中旋恼,邊緣造成的損耗饮六。后者是因?yàn)殓R頭本身存在角度造成的傾角誤差。
2. 畸變矯正
由于鏡頭畸變不可避免,因此需要矯正考蕾。在矯正之時(shí)礼仗,我們需要建立原圖與矯正圖像之間的關(guān)系吐咳,并找到這組關(guān)系的系數(shù)逻悠,通過(guò)一組標(biāo)準(zhǔn)系數(shù),我們就獲得了鏡頭的矯正方法韭脊。
通常來(lái)說(shuō)童谒,我們可以通過(guò)測(cè)量一組黑白格(如下圖左)來(lái)獲得這個(gè)矯正系數(shù)。當(dāng)獲得鏡頭拍攝的黑白格沪羔,只要找出其中的同等位置的格子交界處饥伊,并計(jì)算兩者間變化的關(guān)系,就可以計(jì)算得到變形的系數(shù)蔫饰。
如果使用 OpenCV 就可以簡(jiǎn)易獲取其中的黑白交界處,如cv2.findChessboardCorners()?和?cv2.drawChessboardCorners()?函數(shù)篓吁。
代碼如下:
Tips:gray.shape[::-1] 是返回灰度圖的長(zhǎng)寬茫因,代表 反置全部數(shù)組;
? ? ? ? ? color.shape[1::-1] 是返回彩色圖的長(zhǎng)款杖剪,代表 反置前兩個(gè)元素冻押;
3. 圖像矯正
在矯正了畸變之后,我們就可以把圖像變形回我們需要的圖像了盛嘿。在這里洛巢,我們使用圖像點(diǎn)來(lái)幫助把點(diǎn)矯正回原來(lái)的位置,來(lái)拉平圖像次兆,使用的函數(shù)為 cv2.getPerspectiveTransform() 和?cv2.warpPerspective() 稿茉。
修正結(jié)果如下:
代碼如下: