魚眼校正在opencv裡面有,比較複雜,主要思想是用棋盤首先對魚眼校正,儲存相關引數到xml中
後續校正的時候,直接用xml中儲存的引數,不需要計算,過程較複雜,在速度上如果用opencl或cuda實現也滿足需要;
才用該方法,速度沒得說,如果後面需要全景拼接,也是可以在opengl中實現的;因為兩張的臨界位置可以通過公式算出來,實現在opengl的片元著色器即可;
主要思路如下:
步驟如下:
一 opengl中建立紋理物件,紋理物件載入魚眼作為紋理;
二 編寫定點著色器和fragment著色器**;
三 載入,編譯,連線,attach上面寫好的**;
四 在視窗渲染函式中,採用平行投影方式,使用上面魚眼紋理,繪製魚眼大小的矩形;
五 輸出影象,顯示的圖形即為矯正後的;
六 如果不想再螢幕上顯示或只在記憶體中處理,可以用opengl的fbo,frame buffer object, 這個東西就是可以把渲染得內容向fbo中渲染,然後可讀取到記憶體中,後續你
想幹什麼幹什麼;
說明:opengl在顯示的時候,每個畫素點都會利用gpu呼叫fragment著色器**來計算顏色,所以魚眼矯正的演算法公式會放到fragment著色器**中實現;由於有成千上萬個gpu計算單元,所有畫素的計算都是並行的,所以速度很快;
我最厚道的地方在於,雖然上面說的簡略,但是我會把demo放到下邊;
打字很麻煩,一段**勝過千言萬語;
下面是結果:
第一張:是標準圖
第二張:把標準圖校正為左側圖
第二張:把標準圖校正為右側圖
demo的**中有說明;
如果拼接的話,把第二張和第三張圖拼接;
OpenCV3 1 0魚眼相機標定及畸變校正
常用的相機模型為針孔模型,此模型在視場較小的情況下是適用的,隨著視場的增加,模型誤差越來越大。普通鏡頭和魚眼鏡頭成像原理的差異是造成此現象的根本原因。具體原理可以參見 1 2 juho kannalaand sami s.brandt.a generic camera model and calib...
魚眼相機成像模型
魚眼鏡頭一般是由十幾個不同的透鏡組合而成的,在成像的過程中,入射光線經過不同程度的折射,投影到尺寸有限的成像平面上,使得魚眼鏡頭與普通鏡頭相比起來擁有了更大的視野範圍。下圖表示出了魚眼相機的一般組成結構。最前面的兩個鏡頭發生折射,使入射角減小,其餘的鏡頭相當於乙個成像鏡頭,這種多元件的構造結構使對魚...
海思魚眼矯正
檢視具體晶元的gdc 硬體規格,主要看以下引數 一般魚眼矯正是在vi的擴充套件通道 即 初始化vi模組後 vi ext chn attr s stextchnattr vi chn viextchn vi ext chn start size s stdstsize s32ret hi mpi vi...