我找到了一个关于频域图像旋转的代码。但我无法理解这段代码。此代码工作正常。谁能描述这段代码?实际上我必须编写一个代码来在极坐标中在频域中旋转图像。你觉得这段代码吗? 符合要求。
clear;
img=imread('cameraman.tif');
imshow(img); title('original image');
theta=26,5;
N=size(img,1);
M=size(img,2);
fimg=fftshift(fft2(fftshift(img)));
p=ones(N,1)*[-N/2:(N-1)/2]; % horizontal axis
q=-p'; % vertical axis
theta=2*pi*theta/360;
g=1/(N^2).*fimg;
z1=exp(i*pi/N.*((p.^2-q.^2)*cos(theta)-2*p.*q*sin(theta)));
z2=exp(-i*pi/N.*((p.^2-q.^2)*cos(theta)-2*p.*q*sin(theta)));
k=ifft2(fft2(g.*z1).*(fft2(z2)));
figure,
imshow(abs(fftshift(flipud(k))), [0 255]);
title(['Cameraman rotated at ' num2str(theta*360/(2*pi)) ' Degrees']); axis off
答案 0 :(得分:0)
正如您所见here。
对于旋转,没有属性。但是这段代码使用shift属性来应用旋转。
在z1中,您也可以正常计算坐标(p,q)
,但只需将2D旋转矩阵应用于坐标,就可以使用移位属性。
请注意,此代码会在每个地方更改一个符号,这就是为什么z1中没有减号而不是z2。
Rotation : [cos(theta) -sin(theta);
sin(theta) cos(theta)];