雙目結構光測量系統
顧名思義,雙目結構光就是采用兩個相機+投影儀的結構,兩個相機分別放置在投影儀的兩側,該系統測量原理首先采用投影儀投射設計的光柵編碼圖案到測量物件表面,然后被雙目相機同步采集,兩個相機分別對光柵影像做相位解包演算法,利用相位資訊對雙目視覺進行匹配,然后通過雙目視覺的重建方式對測量物體重建三維點云,
本博客采用三頻外差的方法求解相位資訊,然后對雙目系統進行去除畸變、立體校正,利用相位對雙目進行點對點匹配,然后三維重建點云,
三頻外差光柵生成
三組頻率分別為76、57、37,76為高頻條紋的頻率,57為中頻條紋的頻率,37為低頻條紋的頻率,其中高頻的條紋設定為4步相移,中頻和低頻的分別設定為3步相移,具體的Matlab生成代碼如下:
R = 1140; C = 912; % 光柵尺寸1140*912
P1 = 1140/76; % 頻率76的光柵寬度
P2 = 1140/57; % 頻率57的光柵寬度
P3 = 1140/37; % 頻率37的光柵寬度
a = 126; % 背景光強
b = 126; % 調制光強
I0 = zeros(1140,912); %定義影像尺寸大小
H1 = I0; H2 = I0; H3 = I0; H4 = I0;
H5 = I0; H6 = I0; H7 = I0;
H8 = I0; H9 = I0; H10 = I0;
for i = 1:1140
for j = 1:912
H1(i,j) = a+b*cos(2*pi*(j-1)/P1); %4步相移余弦光柵 --高頻
H2(i,j) = a+b*cos(2*pi*(j-1)/P1+1*2*pi/4);
H3(i,j) = a+b*cos(2*pi*(j-1)/P1+2*2*pi/4);
H4(i,j) = a+b*cos(2*pi*(j-1)/P1+3*2*pi/4);
H5(i,j) = a+b*cos(2*pi*(j-1)/P2-2*pi/3); %3步相移余弦光柵 --中頻
H6(i,j) = a+b*cos(2*pi*(j-1)/P2);
H7(i,j) = a+b*cos(2*pi*(j-1)/P2+2*pi/3);
H8(i,j) = a+b*cos(2*pi*(j-1)/P3-2*pi/3); %3步相移余弦光柵 --低頻
H9(i,j) = a+b*cos(2*pi*(j-1)/P3);
H10(i,j) = a+b*cos(2*pi*(j-1)/P3+2*pi/3);
end
end
%% ----------------------【光柵寫出】--------------------------
for k = 1:10
eval(['H','=H',num2str(k),';']);
H = uint8(H);
img_name = ['gratings/',num2str(k),'.bmp'];
imwrite(H,Himg_name);
end
三頻外差相位解包
每個頻率的光柵求出的相位都是包裹相位,其形式如同下式的
?
(
x
,
y
)
\phi(x,y)
?(x,y)所示,這樣的相位圖不能直接用于雙目匹配,為了獲取絕對相位
Φ
(
x
,
y
)
\Phi(x,y)
Φ(x,y),我們需要獲取一個條紋階次
k
(
x
,
y
)
k(x,y)
k(x,y),然后通過下式將包裹相位展開為絕對相位:
Φ
(
x
,
y
)
=
?
(
x
,
y
)
+
2
π
×
k
(
x
,
y
)
\Phi(x,y) = \phi(x,y) + 2\pi \times k(x,y)
Φ(x,y)=?(x,y)+2π×k(x,y)

三頻外差的高頻條紋就是為了獲取包裹相位,這里有人可能會問,為什么其他頻率的不能當作包裹相位
?
(
x
,
y
)
\phi(x,y)
?(x,y)呢,因為條紋頻率越高,信噪比就越大,因此高頻的相位精度更好,中頻和低頻的光柵就是為了獲取
k
(
x
,
y
)
k(x,y)
k(x,y)的,其具體獲取方式如下(matlab代碼):
% ----------------變數預定義
[R C] = size(H1);
phi1 = zeros(R,C); phi2 = phi1; phi3 = phi1;
k1 = phi1; k2 =phi1; k = phi1;
phi_eq2 = phi1; phi_eq1 = phi1; phi_eq = phi1;
phase = phi1;
% ---------------高頻包裹相位phi1
phi1 = atan2(H4-H2,H1-H3);
phi1(phi1<0) = phi1(phi1<0)+2*pi;
% ---------------中頻包裹相位phi2
phi2 = atan2(sqrt(3)*(H5-H7),2*H6-H5-H7);
phi2(phi2<0) = phi2(phi2<0)+2*pi;
% ---------------低頻包裹相位phi3
phi3 = atan2(sqrt(3)*(H8-H10),2*H9-H8-H10);
phi3(phi3<0) = phi3(phi3<0)+2*pi;
% ---------------高頻-中頻外差相位phi_eq1
phi_eq1 = phi1-phi2;
phi_eq1(phi_eq1<0) = phi_eq1(phi_eq1<0)+2*pi;
% ---------------中頻-低頻外差相位phi_eq2
phi_eq2 = phi2-phi3;
phi_eq2(phi_eq2<0) = phi_eq2(phi_eq2<0)+2*pi;
% ---------------高頻-中頻-低頻外差相位phi_eq(三個頻率的綜合外差)
phi_eq = phi_eq2-phi_eq1;
phi_eq(phi_eq<0) = phi_eq(phi_eq<0)+2*pi;
L_12 = p1*p2/(p2-p1); % 外差相位phi_eq1波長
L_23 = p2*p3/(p3-p2); % 外差相位phi_eq2波長
L_eq = L_23*L_12/(L_12-L_23); % 外差相位phi_eq波長
k1 = round(((L_12/p1)*phi_eq1-phi1)/(2*pi));
k2 = round(((L_eq/L_12)*phi_eq-phi_eq1)/(2*pi));
k = k2*(L_12./p1) + k1;
% -----------------------相位展開,得絕對相位phase---------------------------
phase = phi1 + k*2*pi;
實驗
投影儀投射光柵,被左右相機同時采集,然后通過上次的方式進行相位解包,進行雙目相機匹配和三維重建,然后獲取了三維點云,

如需交流合作,可以聯系qq:1091454117
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/158404.html
標籤:java
上一篇:樹莓派救援機器人制作
