频域图像旋转

时间:2014-05-26 18:42:30

标签: image matlab rotation frequency

我找到了一个关于频域图像旋转的代码。但我无法理解这段代码。此代码工作正常。谁能描述这段代码?实际上我必须编写一个代码来在极坐标中在频域中旋转图像。你觉得这段代码吗? 符合要求。

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

1 个答案:

答案 0 :(得分:0)

正如您所见here

对于旋转,没有属性。但是这段代码使用shift属性来应用旋转。

在z1中,您也可以正常计算坐标(p,q),但只需将2D旋转矩阵应用于坐标,就可以使用移位属性。

请注意,此代码会在每个地方更改一个符号,这就是为什么z1中没有减号而不是z2。

Rotation : [cos(theta) -sin(theta);
            sin(theta) cos(theta)];