Преобразование базиса

source = imread('Small_Rect.bmp'); %файл с квадратным изображением

N = 32; %размер изображения

X = (double(source(1:N,1:N,1)) + double(source(1:N,1:N,2)) + double(source(1:N,1:N,3)))/3;

[u1 v1] = meshgrid(0:(N - 1));

Y = fft2(X);

%Y(N/2:N, 1:N) = 0; %фильтрация ”избыточных” частот

%Y(1:N, N/2:N) = 0; %фильтрация ”избыточных” частот

Y1 = Y;

Y2 = zeros(N, N);

c = (N/2) - 0.5;

 

angle = (0 + 10 * q) * pi / 180;

ar1 = u1 * (1 - cos(angle) - sin(angle));

ar2 = v1 * (1 + sin(angle) - cos(angle));

k = exp(2 * pi * i * c * (ar1 + ar2) / N);

for u = 0:(N-1)

for v = 0:(N-1)

F11 = exp(2*pi*i*(u1 * cos(angle) - v1 * sin(angle) - u + 0.0000001))-1;

F12 = exp((1/N)*2*pi*i*(u1 * cos(angle) - v1 * sin(angle) - u + 0.0000001))-1;

F1 = F11./F12;

F21 = exp(2*pi*i*(u1 * sin(angle) + v1 * cos(angle)- v + 0.0000001))-1;

F22 = exp((1/N)*2*pi*i*(u1 * sin(angle) + v1 * cos(angle)- v + 0.0000001))-1;

F2 = F21./F22;

F = F1 .* F2;

F = (k / N ^ 2).* F;

if(u == 0 & v == 0)

W1 = F;

end;

if(u == N - 1 & v == N - 1)

W2 = F;

end;

Y2(v + 1,u + 1) = sum(sum(Y1 .* F));

end;

end;

%Y2(N/2:N, 1:N) = 0; %фильтрация ”избыточных” частот

X2 = ifft2(Y2);

for i1 = 1:3

for j1 = 1:3

X4(1 + (i1 - 1) * N :i1 * N,1 + (j1 - 1) * N :j1 * N) = X(1:N, 1:N);

end;

end;

X4 = imrotate(X4, - angle * 180 / pi, 'bicubic', 'crop');

X3 = X4(N + 1: 2 * N, N + 1: 2 * N);

Y3 = fft2(X3);

figure;

subplot(2, 2, 1); imshow(real(X3), colormap('default'));

subplot(2, 2, 2); imshow(real(X2), colormap('default'));

colormap(jet);

subplot(2, 2, 3); mesh(abs(Y3));

subplot(2, 2, 4); mesh(abs(Y2));