成像的過程實質上是幾個座標系的轉換。首先空間中的一點由 世界座標系 轉換到 攝像機座標系 ,然後再將其投影到成像平面 ( 影象物理座標系 ) ,最後再將成像平面上的資料轉換到影象平面 ( 影象畫素座標系 ) 。
詳細的可以參考我之前的部落格[影象]攝像機標定(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('校正後影象');
執行效果(攝像機內參是取網上的,圖也是自己畫的,影象本身沒有參考價值):
攝像機標定
利用攝像機所拍攝到的影象來還原空間中的物體。在這裡,不妨假設攝像機所拍攝到的影象與三維空間中的物體之間存在以下一種簡單的線性關係 像 m 物 這裡,矩陣m可以看成是攝像機成像的幾何模型。m中的引數就是攝像機引數。通常,這些引數是要通過實驗與計算來得到的。這個求解引數的過程就稱為攝像機標定。中文名 攝...
攝像機標定
攝像機鏡頭的畸變 由於攝像機光學系統並不是精確地按理想化的小孔成像原理工作,存在有透鏡畸 變,物體點在攝像機成像面上實際所成的像與理想成像之間存在有光學畸變誤差。主要的畸變誤差分為三類 徑向畸變 偏心畸變和薄稜鏡畸變。第一類只產生徑向 位置的偏差,後兩類則既產生徑向偏差,又產生切向偏差,下圖2 為無...
unity 畸變 攝像機成像 畸變模型
一 攝像機成像模型 成像的過程實質上是幾個座標系的轉換。首先空間中的一點由世界座標系轉換到攝像機座標系,然後再將其投影到成像平面 攝像機的ccd 最後再將成像平面上的資料轉換到影象平面 最後生成的影象 圖1 1 世界空間內的乙個點在影象上成像的過程稱為投影成像過程,這中間轉換過程構成的矩陣m稱為投影...