% исходные данные clear all; M=400; N=500; H=120; L=100; Alfa=0; Tetaz=-30; Tetay=0; Tetax=0; Tz=10; Ty=30; Tx=35; Sz=1; Sy=1.2; Sx=1.5; % формированаие исходного изображения Im2D=zeros(M,N); Im2D(round(M/2-L/2):round(M/2+L/2),round(N/2-H/2):round(N/2+H/2))=1; Im2D=imrotate(Im2D,Alfa,'crop'); % в градусах против час стр figure; imshow(Im2D); title('ISX IZOB'); % матрицы прямого геометрического преобразования R2D=[cos(Tetaz*pi/180) sin(Tetaz*pi/180) 0 -sin(Tetaz*pi/180) cos(Tetaz*pi/180) 0 0 0 1]; % в рад по час стр S2D=[Sx 0 0 0 Sy 0 0 0 1]; % растяжение раз T2D=[1 0 0 0 1 0 Tx Ty 1]; % перенос вправо и вниз TFormR2D=maketform('affine',R2D); TFormS2D=maketform('affine',S2D); TFormT2D=maketform('affine',T2D); % прямое геометрическое преобразование исх изображения Im2DTransform1=imtransform(Im2D,TFormR2D,... 'UData',[-round(N/2)+1 round(N/2)],'VData',[-round(M/2)+1 round(M/2)],... 'XData',[-round(N/2)+1 round(N/2)],'YData',[-round(M/2)+1 round(M/2)]); Im2DTransform2=imtransform(Im2DTransform1,TFormS2D,... 'UData',[-round(N/2)+1 round(N/2)],'VData',[-round(M/2)+1 round(M/2)],... 'XData',[-round(N/2)+1 round(N/2)],'YData',[-round(M/2)+1 round(M/2)]); Im2DTransform3=imtransform(Im2DTransform2,TFormT2D,... 'UData',[-round(N/2)+1 round(N/2)],'VData',[-round(M/2)+1 round(M/2)],... 'XData',[-round(N/2)+1 round(N/2)],'YData',[-round(M/2)+1 round(M/2)]); % вывод преобразованного изображения figure; subplot(2,2,1); imshow(Im2D); title('Isx Izob'); subplot(2,2,2); imshow(Im2DTransform1); title('Povorot'); subplot(2,2,3); imshow(Im2DTransform2); title('Maschtab'); subplot(2,2,4); imshow(Im2DTransform3); title('Peremesch'); % матрицы обратного геометрического преобразования R2DInv=[cos(Tetaz*pi/180) -sin(Tetaz*pi/180) 0 sin(Tetaz*pi/180) cos(Tetaz*pi/180) 0 0 0 1]; % в рад по час стр S2DInv=[1/Sx 0 0 0 1/Sy 0 0 0 1]; % растяжение раз T2DInv=[1 0 0 0 1 0 -Tx -Ty 1]; % перенос вправо и вниз TFormT2DInv=maketform('affine',T2DInv); TFormS2DInv=maketform('affine',S2DInv); TFormR2DInv=maketform('affine',R2DInv); % обратное геометрическое преобразование преоб изображения Im2DRestore1=imtransform(Im2DTransform3,TFormT2DInv,... 'UData',[-round(N/2)+1 round(N/2)],'VData',[-round(M/2)+1 round(M/2)],... 'XData',[-round(N/2)+1 round(N/2)],'YData',[-round(M/2)+1 round(M/2)]); Im2DRestore2=imtransform(Im2DRestore1,TFormS2DInv,... 'UData',[-round(N/2)+1 round(N/2)],'VData',[-round(M/2)+1 round(M/2)],... 'XData',[-round(N/2)+1 round(N/2)],'YData',[-round(M/2)+1 round(M/2)]); Im2DRestore3=imtransform(Im2DRestore2,TFormR2DInv,... 'UData',[-round(N/2)+1 round(N/2)],'VData',[-round(M/2)+1 round(M/2)],... 'XData',[-round(N/2)+1 round(N/2)],'YData',[-round(M/2)+1 round(M/2)]); % вывод восстановленного изображения figure; subplot(2,2,1); imshow(Im2DTransform3); title('Preob Izob'); subplot(2,2,2); imshow(Im2DRestore1); title('Obr Peremesch'); subplot(2,2,3); imshow(Im2DRestore2); title('Obr Maschtab'); subplot(2,2,4); imshow(Im2DRestore3); title('Obr Povorot'); % получение координат точек figure; [XIsx, YIsx, PIsx]=impixel(Im2D) [XTransform3, YTransform3, PTransform3]=impixel(Im2DTransform3) [XRestore3, YRestore3, PRestore3]=impixel(Im2DRestore3)