2016-07-14 112 views
1

我試圖從圖像不失真地防止桶/徑向畸變。當我看到方程時,他們不需要相機的焦距。但openCV API initundistortrectifymap要求它們採用相機固有矩陣的形式。爲什麼這樣 ?無論如何沒有他們這樣做?因爲我知道不失真是很常見的各種失真校正。徑向畸變校正,相機參數和openCV

回答

1

焦距對於失真消除非常重要 - 因爲它提供了相機內在參數的相關信息,並且將其添加到相機矩陣中相當簡單。請記住,您必須將其從毫米轉換爲像素。這樣做是爲了確保像素是矩形的。對於轉換,您需要知道傳感器的高度和寬度(毫米),傳感器的水平(Sh)和垂直(Sv)像素數以及以毫米爲單位的焦距。轉換使用以下方程式完成:
fx =(f(mm)x Sh(px))/傳感器寬度(mm)
fy =(f(mm)x Sv(px))/ sensorheight(mm)

更多關於相機的矩陣元素可以參考here

+0

嗨,謝謝你的回答。在你提到的鏈接中,xcorrected和ycorrected的方程不需要fx和fy。這使我懷疑我們是否真的需要他們? – vvvv

+0

您提到的公式用於計算去除徑向失真(第一組方程)和切向失真(第二組方程)後的像素位置。如果你照顧這些方程,你會注意到一個由3個矩陣組成的方程。 '='之後的第一個矩陣是相機矩陣。你會看到元素fx,fy,cx和cy。後兩個元素(cx和cy)是相應x和y方向上的主點偏移。這兩個,以及焦距,可以在照相機校準後計算。 – Nikos

+0

另外,如果你不知道cx和cy的值,你可以假設p.p。沒有偏移(它恰好在圖像的中心),所以你給出了兩個值0.雖然我個人從未見過一個相機,0 p.p.偏移,這是完全正常的,並且由於製造光學系統的缺陷而引起。 – Nikos