相機畸變校正詳解

2021-10-10 06:34:53 字數 2997 閱讀 9150

目錄

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...