TP-probleme-inverse-3D/TP1/trace_epipoles.m
2023-06-25 16:38:01 +02:00

59 lines
1.7 KiB
Matlab

taille_ecran = get(0,'ScreenSize');
L = taille_ecran(3);
H = taille_ecran(4);
decalage_bord = 500;
I_bord = 240*ones(size(I_1,1),decalage_bord,3);
decalage_milieu = 1000;
I_milieu = 240*ones(size(I_1,1),decalage_milieu,3);
figure('Name','Detection des points d''interet','Position',[0.1*L,H,0.8*L,H]);
I_1_2 = cat(2,I_bord,I_1,I_milieu,I_2,I_bord) ;
imagesc(I_1_2);
axis equal;
axis image off;
hold on;
F = inverse_K'*E_estimee*inverse_K;
p_1_select = transpose(K*w_1_select(1:8,:)');
p_2_select = transpose(K*w_2_select(1:8,:)');
for i = 1:size(p_1_select,1)
% Tracé coloré des pixels sélectionnés :
x_g = p_1_select(i,1)+decalage_bord;
y_g = p_1_select(i,2);
scatter(x_g,y_g,'r','filled');
x_d = p_2_select(i,1)+decalage_bord+decalage_milieu+size(I_1,2);
y_d = p_2_select(i,2);
scatter(x_d,y_d,'g','filled');
% Équations cartésiennes des droites épipolaires :
p1 = [x_g-decalage_bord ; y_g ; 1];
D1 = F*p1;
p2 = [x_d-decalage_bord-nb_colonnes-decalage_milieu ; y_d ; 1];
D2 = F'*p2;
% Tracé de la droite épipolaire droite :
x_trace = -(decalage_bord/2):nb_colonnes+decalage_bord/2;
y_trace = -D1(1)/D1(2)*x_trace-D1(3)/D1(2);
indices = find(y_trace>0 & y_trace<nb_lignes);
x_trace = x_trace(indices);
y_trace = y_trace(indices);
plot(x_trace+decalage_bord+nb_colonnes+decalage_milieu,y_trace,'LineWidth',1,'Color','g');
hold on;
% Tracé de la droite épipolaire gauche :
x_trace = -(decalage_bord/2):nb_colonnes+decalage_bord/2;
y_trace = -D2(1)/D2(2)*x_trace-D2(3)/D2(2);
indices = find(y_trace>0 & y_trace<nb_lignes);
x_trace = x_trace(indices);
y_trace = y_trace(indices);
plot(x_trace+decalage_bord,y_trace,'LineWidth',1,'Color','r');
hold on;
end