% Лабораторна робота № 6 % ПРОСТОРОВІ ПЕРЕТВОРЕНЯ ЗОБРАЖЕНЬ % Початкове зображення Im1=rgb2gray(imread('apple.bmp')); % - - - Лінійні конформні та афінні перетворення - - - % Задання параметрів перетворення scale=2.0; % коефіцієнт масштабування angle=25*pi/180; % кут повороту tx=0; % зсув по x ty=0; % зсув по y % Матриця перетворення sc=scale*cos(angle); ss=scale*sin(angle); T=[ sc -ss ss sc tx ty]; % maketform Create spatial transformation structure (TFORM) % maketform is not recommended. Use AFFINE2D, PROJECTIVE2D, AFFINE3D, or % FITGEOTRANS instead. t_lc=maketform('affine', T); % Обчислення перетворення I_linearconformal=imtransform(Im1, t_lc, 'bilinear'); % Виведення результатів figure; subplot(2,3,1); imshow(Im1); title('Source image'); subplot(2,3,2); imshow(I_linearconformal); title('Image linear conformal'); imwrite(I_linearconformal,'apple1.bmp'); size(Im1) size(I_linearconformal) % - - - Проекційні перетворення - - - % Матриця перетворення T=[1 0 0.008 1 1 0.01; 0 0 1]; t_proj=maketform('projective', T); % Обчислення перетворення I_projective=imtransform(Im1, t_proj, 'bilinear'); % Виведення результатів subplot(2,3,3); imshow(I_projective); title('Image projective'); % - - - Поліноміальні перетворення - - - % reshape Reshape array. % reshape(X,M,N) or reshape(X,[M,N]) returns the M-by-N matrix % whose elements are taken columnwise from X % повертає матрицю розміром M-by-N елементи якої взяті стовпчиками з X xymov=reshape(randn(12, 1), 6, 2); xyfixed=reshape(randn(12, 1), 6, 2); % cp2tform Infer spatial transformation from control point pairs. % TFORM = cp2tform(MOVINGPOINTS,FIXEDPOINTS,TRANSFORMTYPE) % Формує просторове перетворення з пар контрольних точок. % cp2tform is not recommended. Use FITGEOTRANS instead. % MOVINGPOINTS is an M-by-2 double matrix containing the X and Y coordinates % of control points in the moving image you want to transform. % координати контрольних точок у рухомому зображенні, яке потрібно трансформувати % FIXEDPOINTS is an M-by-2 double matrix containing the X and Y coordinates % of control points in the fixed image. % TRANSFORMTYPE can be 'nonreflective', 'similarity', 'affine', 'projective', 'polynomial', % 'piecewise linear' or 'lwm'. % Більше інформації % https://wiki.gis-lab.info/w/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BD%D0%BE%D0%BC%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_-_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0 % https://gis-lab.info/qa/polynom.html t_poly=cp2tform(xymov, xyfixed, 'polynomial', 2); % Дванадцять елементів T T= [0 0 1 0 0 1 0.001 0 0.02 0 0.01 0]; t_poly.tdata=T; I_polynomial=imtransform(Im1, t_poly, 'bilinear'); subplot(2,3,4); imshow(I_polynomial); title('Image polynomial'); % - - - Кусково-лінійні перетворення - - - imid=round(size(Im1, 2)/2); I_left=Im1(:, 1:imid); stretch=1.5; % Коефіціент розтягнення size_right=[size(Im1, 1) round(stretch*imid)]; I_right=Im1(:, imid+1:end); % Розтягнення частини зображення I_right_stretched=imresize(I_right, size_right); % Формування вихідного зображення з двох частин I_piecewiselinear=[I_left I_right_stretched]; subplot(2,3,5); imshow(I_piecewiselinear); title('Image piecewise linear'); % - - - Синусоїдальні перетворення - - - % Більше інформації % https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A5%D0%B0%D1%84%D0%B0 % Перетворення Хафа [nrows, ncols]=size(Im1); [xi, yi]=meshgrid(1:ncols, 1:nrows); a1=5; % амплітуда синусоїди a2=3; u=xi+a1*sin(pi*xi/imid); v=yi-a2*sin(pi*yi/imid); tmap_B=cat(3, u, v); resamp=makeresampler('linear', 'fill'); I_sinusoid=tformarray(Im1, [], resamp, [2 1], [1 2], [], tmap_B, .3); subplot(2,3,6); imshow(I_sinusoid); title('Image sinusoid');