1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| [g2,map] = imread('untitled5.gif','gif');
[Ni,Nj] = size(g2);
figure(1)
colormap(map)
subplot(221)
image(g2)
axis image
title('Image initiale')
hold on
[b_j,a_i] = ginput(4);
plot([b_j;b_j(1)],[a_i;a_i(1)],'g-')
drawnow
x1 = (b_j(1)-1)/Nj;
y1 = ((Ni+1)-a_i(1))/Ni;
x2 = (b_j(2)-1)/Nj;
y2 = ((Ni+1)-a_i(2))/Ni;
x3 = (b_j(3)-1)/Nj;
y3 = ((Ni+1)-a_i(3))/Ni;
x4 = (b_j(4)-1)/Nj;
y4 = ((Ni+1)-a_i(4))/Ni;
subplot(223)
hold on
plot([x1 x2 x3 x4 x1],[y1 y2 y3 y4 y1],'g-');
plot(x1,y1,'ro',x2,y2,'bo',x3,y3,'ko',x4,y4,'mo');
set(gca,'xlim',[0 1],'ylim',[0 1],'dataaspectratio',[1 1 1],'box','on')
title('(x,y)')
drawnow
%*****************************************************************
A = [x1 y1 1 0 0 0 0 0
0 0 0 x1 y1 1 0 0
x2 y2 1 0 0 0 -x2 -y2
0 0 0 x2 y2 1 0 0
x3 y3 1 0 0 0 -x3 -y3
0 0 0 x3 y3 1 -x3 -y3
x4 y4 1 0 0 0 0 0
0 0 0 x4 y4 1 -x4 -y4];
B = [0;0;1;0;1;1;0;1];
temp = A\B;
a=temp(1);
b=temp(2);
c=temp(3);
d=temp(4);
e=temp(5);
f=temp(6);
g=temp(7);
h=temp(8);
xp = (a*[x1 x2 x3 x4 x1]+b*[y1 y2 y3 y4 y1]+c)./(g*[x1 x2 x3 x4 x1]+h*[y1 y2 y3 y4 y1]+1);
yp = (d*[x1 x2 x3 x4 x1]+e*[y1 y2 y3 y4 y1]+f)./(g*[x1 x2 x3 x4 x1]+h*[y1 y2 y3 y4 y1]+1);
subplot(224)
hold on
plot(xp,yp,'g-');
plot(xp(1),yp(1),'ro',xp(2),yp(2),'bo',xp(3),yp(3),'ko',xp(4),yp(4),'mo');
set(gca,'xlim',[0 1],'ylim',[0 1],'dataaspectratio',[1 1 1],'box','on')
title('(gX,gY)')
drawnow
%Formules pour travailler en pixels
Nii = 500;
Njj = 500;
image_final = zeros(Nii,Njj,'uint8');
xmin = min(b_j);
xmax = max(b_j);
ymin = min(a_i);
ymax = max(a_i);
%**********************************
for i = ymin:.05:ymax %Indices dans l'image redressée (carré).
for j = xmin:.05:xmax
%Coordonnées de l'image redressée (carré)
%****************************************
x = (j-1)/Nj;
y = ((Ni+1)-i)/Ni;
X = (a*x + b*y + c)/(g*x + h*y + 1);
Y = (d*x + e*y + f)/(g*x + h*y + 1);
if (X <= 1 && Y <= 1 && X>=0 && Y>=0)
i1 = (Nii+1) - floor(Nii*Y);
j1 = floor(Njj*X) + 1;
image_final(i1,j1) = g2(round(i),round(j));
end
end
end
subplot(222)
image(image_final)
title('Image redressée')
axis image |
Partager