目錄
1.攝像機成像原理簡述
2.成像畸變
2.1. 畸變量學模型
2.2. 公式推導
3.畸變校正
3.1. 理論推導
3.2. **實現
成像的過程實質上是幾個座標系的轉換。首先空間中的一點由世界座標系轉換到攝像機座標系,然後再將其投影到成像平面( 影象物理座標系 ),最後再將成像平面上的資料轉換到影象平面( 影象畫素座標系 )。
詳細的可以參考我之前的部落格[影象]攝像機標定(1) 標定中的四個座標系
影象畫素座標系(uov座標系)
下的無畸變座標(u, v)
,經過經向畸變和切向畸變後落在了uov座標系
的(ud, vd)
上。即就是說,真實影象 imgr與畸變影象 imgd之間的關係為:imgr(u, v) = imgd(ud, vd)
。
攝像頭成像畸變的數學模型(符合的對應關係有問題,可能會造成一些干擾,公式主要看後面推導的過程)
公式推導:
我們已知的是畸變後的影象,要得到沒有畸變的影象就要通過畸變模型推導其對映關係。真實影象 imgr與畸變影象 imgd之間的關係為:imgr(u, v) = imgd(ud, vd)
。通過這個關係,找出所有的imgr(u, v)
。(u, v) 對映到 (ud, vd)
中的(ud, vd)
往往不是整數(u和v是整數,因為它是我們要組成影象的畫素座標位置,以這正常影象的座標位置去求在畸變影象中的座標位置,取出對應的畫素值,這也是正常影象的畫素值)。 但是畸變的畫素往往不是整數,所以需要通過插值來進行求解,詳細見我之前的部落格 [影象]影象縮放演算法-雙線性內插法 。
%影象座標系和矩陣的表示是相反的
%[row,col] = find(x),座標按照列的順序排列,這樣好和reshape()匹配出響應的影象矩陣
[v u] = find(~isnan(i_r));
% xyzc 攝像機座標系的值,但是已經歸一化了,因為沒有乘比例因子
%公式 s[u v 1]' = a*[xc yc zc]' ,其中s為比例因子,不加比例因子,zc就為1,所以此時的xc相對於( xc/zc )
xyzc= inv(a)*[u v ones(length(u),1)]';
% 此時的x和y是沒有畸變的
r2 = xyzc(1,:).^2+xyzc(2,:).^2;
x = xyzc(1,:);
y = xyzc(2,:);
% x和y進行畸變的
x = x.*(1+k1*r2 + k2*r2.^2) + 2*p1.*x.*y + p2*(r2 + 2*x.^2);
y = y.*(1+k1*r2 + k2*r2.^2) + 2*p2.*x.*y + p1*(r2 + 2*y.^2);
% (u, v) 對應的畸變座標 (u_d, v_d)
u_d = reshape(fx*x + cx,size(i_r));
v_d = reshape(fy*y + cy,size(i_r));
% 線性插值出非畸變的影象
i_r = interp2(i_d, u_d, v_d);
%對比影象
subplot(121);
imagesc(i_d);
title('畸變原影象');
subplot(122);
imagesc(i_r);
title('校正後影象');
執行效果(攝像機內參是取網上的,圖也是自己畫的,影象本身沒有參考價值):
參考:
相機標定 三 畸變校正
根據針孔模型,物體和成像之間引數會滿足相似三角形的關係。但現實中會存在裝配誤差和透視失真等原因,導致這種關係無法成立,使理想成像與實際成像存在誤差,這種誤差即稱為畸變。畸變分為徑向畸變,切向畸變和薄稜鏡畸變。徑向畸變字面意思是影象座標產生徑向位置的誤差,是由鏡頭形狀缺陷造成的。徑向畸變效果可以分為枕...
徑向畸變校正
1 畸變矯正主要包括徑向畸變和切向畸變 1 徑向畸變 枕形 桶形 光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲 2 切向畸變 透鏡不完全平行於影象平面,即sensor裝配時與鏡頭間的角度不准 2 徑向畸變矯正原理 1 矯正前後的座標對映 輸出影象 nj,ni 寬高縮放比 矯正後影象 張氏標定法 ...
OpenCV3 1 0魚眼相機標定及畸變校正
常用的相機模型為針孔模型,此模型在視場較小的情況下是適用的,隨著視場的增加,模型誤差越來越大。普通鏡頭和魚眼鏡頭成像原理的差異是造成此現象的根本原因。具體原理可以參見 1 2 juho kannalaand sami s.brandt.a generic camera model and calib...