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));