基于傅里叶的图像平移与旋转实验的Matlab代码
时间: 2023-06-26 20:07:07 浏览: 100
以下是基于傅里叶变换的图像平移与旋转实验的Matlab代码:
% 读取图像
img = imread('test.jpg');
imshow(img);
% 图像傅里叶变换
img_fft = fft2(img);
img_fft_shift = fftshift(img_fft);
% 图像平移
tx = 30; % x轴方向平移量
ty = 60; % y轴方向平移量
[M, N] = size(img);
u = 0:(M-1);
v = 0:(N-1);
idx = find(u > M/2);
u(idx) = u(idx) - M;
idy = find(v > N/2);
v(idy) = v(idy) - N;
[V, U] = meshgrid(v, u);
img_fft_shift_trans = img_fft_shift .* exp(-1i*2*pi*(U*ty/M+V*tx/N));
img_fft_trans = ifftshift(img_fft_shift_trans);
img_trans = uint8(real(ifft2(img_fft_trans)));
figure, imshow(img_trans);
% 图像旋转
theta = pi/6; % 逆时针旋转角度
img_fft_shift_rot = img_fft_shift .* exp(-1i*2*pi*(U*cos(theta)-V*sin(theta))*0.5);
img_fft_rot = ifftshift(img_fft_shift_rot);
img_rot = uint8(real(ifft2(img_fft_rot)));
figure, imshow(img_rot);
以上代码中,我们首先读取图像并进行傅里叶变换,然后对图像进行平移和旋转。平移的实现是在频域中将图像乘以一个复数,其中实部和虚部分别为cos(2*pi*(u*ty/M+v*tx/N))和sin(2*pi*(u*ty/M+v*tx/N)),然后进行傅里叶逆变换得到平移后的图像。旋转的实现是在频域中将图像乘以一个复数,其中实部和虚部分别为cos(2*pi*(u*cos(theta)-v*sin(theta))*0.5)和sin(2*pi*(u*cos(theta)-v*sin(theta))*0.5),然后进行傅里叶逆变换得到旋转后的图像。
阅读全文