图像时-空变换

一、实验目的

   1、熟悉及掌握图像的变换原理及性质,实现图像的傅里叶变换。

二、实验环境

MATLAB 2016以上版本、WIN XP或WIN2000计算机

三、常用函数和调用格式

1、图像的变换采用命令和调用方法

1)fft2

fft2函数用于数字图像的二维傅立叶变换,如:

i=imread('e:\w01.tif'); j=fft2(i);

由于MATLAB无法显示复数图像,因此变换后的结果还需进行求模运算,即调用abs函

数。

之后常常还进行对数变换,即调用log函数,以减缓傅里叶谱的快速衰减,更好地显示

高频信息。

2)ifft2

ifft2函数用于数字图像的二维傅立叶反变换,如:

i=imread('e:\w01.tif');     

j=fft2(i);

k=ifft2(j);

3)fftshift

用于将变换后图像频谱中心从矩阵的原点移动到矩阵的中心

B=fftshift(i)

  1. 利用fft2计算二维卷积    

利用fft2函数可以计算二维卷积,如:

a=[8,1,6;3,5,7;4,9,2];     

b=[1,1,1;1,1,1;1,1,1];     

a(8,8)=0;     

b(8,8)=0;     

c=ifft2(fft2(a).*fft2(b));

c=c(1:5,1:5);

利用conv2(二维卷积函数)校验, 如:

a=[8,1,6;3,5,7;4,9,2];

b=[1,1,1;1,1,1;1,1,1];

c=conv2(a,b);

对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。 

% 加载图像
originalImage = imread('E:\photo\image3.jpg'); 
% 将彩色图像转换为灰度图像
image= rgb2gray(originalImage);
figure;
% 显示原始图像
subplot(2, 2, 1);
imshow(image);
title('原始图像');
 
% 计算平移量
dX = 50; % 水平平移量
dY = 25; % 垂直平移量
 
% 使用imtranslate进行图像平移
translatedImage = imtranslate(image, [dX, dY], 'bilinear', 'OutputView', 'same');
 
% 显示平移后的图像
subplot(2, 2, 2);
imshow(translatedImage);
title('平移后的图像');
 
% 进行傅里叶变换
fftImage = fft2(double(image));
fftTranslatedImage = fft2(double(translatedImage));
 
% 计算并显示幅度谱
magnitudeSpectrum = abs(fftshift(fftImage));
magnitudeTranslatedSpectrum = abs(fftshift(fftTranslatedImage));
 
% 对幅度谱取对数并显示
subplot(2, 2, 3);
imshow(log(1 + magnitudeSpectrum), []);
title('离散傅里叶频谱');
 
subplot(2, 2, 4);
imshow(log(1 + magnitudeTranslatedSpectrum), []);
title('平移后离散傅里叶频谱');

对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。

% 1. 加载原始图像并显示
originalImage = imread('E:\photo\image3.jpg'); 
% 将彩色图像转换为灰度图像
image= rgb2gray(originalImage);
 
% 2. 对图像进行旋转操作
angle = 45; % 旋转角度
rotatedImage = imrotate(image, angle, 'bilinear', 'crop'); % 使用双线性插值旋转图像
figure; % 创建新窗口显示旋转后的图像
imshow(rotatedImage); % 显示旋转后的图像
title('Rotated Image');
 
% 3. 对原始图像和旋转后的图像分别进行傅里叶变换
fftOriginal = fft2(double(image));
fftRotated = fft2(double(rotatedImage));
 
% 4. 显示四幅图像
subplot(2, 2, 1); % 第一个子图显示原始图像
imshow(image), title('原始图像');
 
subplot(2, 2, 2); % 第二个子图显示旋转后的图像
imshow(rotatedImage), title('旋转后的图像');
 
subplot(2, 2, 3); % 第三个子图显示原始图像的傅里叶频谱
magnitudeOriginal = log(1 + abs(fftshift(fftOriginal)));
imshow(magnitudeOriginal, []), title('原始图像的傅里叶频谱');
 
subplot(2, 2, 4); % 第四个子图显示旋转后图像的傅里叶频谱
magnitudeRotated = log(1 + abs(fftshift(fftRotated)));
imshow(magnitudeRotated, []), title('旋转后图像的傅里叶频谱');

利用 MATLAB 实现数字图像的傅里叶变换. 读入并显示图像fig.jpg,作该图的二维FFT变换F,将其直流分量移到频谱中心F1,计算其实部rr和虚部ii,并显示其实部和实部图,同时用两种方法计算其幅值A1=abs(F1) 和A2=sqrt(rr.^2+ii.^2),分别显示A1和A2,并加以比较 

% 1. 读入图像并显示
originalImage = imread('E:\photo\image3.jpg'); % 确保文件路径正确
% 将彩色图像转换为灰度图像
image= rgb2gray(originalImage);
 
% 2. 计算图像的二维FFT变换
F = fft2(double(image));
 
% 3. 将傅里叶变换结果的直流分量移到频谱中心
F1 = fftshift(F);
 
% 4. 计算实部和虚部
rr = real(F1);
ii = imag(F1);
 
% 5. 计算两种幅值表示
% 方法1: 使用abs函数直接计算幅值
A1 = abs(F1);
 
% 方法2: 计算实部平方和虚部平方的平方根
ii(ii == 0) = eps; % 防止对零取平方根
A2 = sqrt(rr.^2 + ii.^2);
 
% 使用对数运算以减缓傅里叶谱的快速衰减
logA1 = log(1 + A1) - max(log(1 + A1)); % 归一化显示范围
logA2 = log(1 + A2) - max(log(1 + A2)); % 归一化显示范围
 
% 6. 显示实部、虚部以及两种幅值的图像
figure;
 
subplot(3, 2, 1);
imshow(colorImage), title('原图');
 
subplot(3, 2, 2);
imshow(image), title('灰度图');
 
subplot(3, 2, 3);
imshow(logA1, []), title('第一种方法A1');
colormap('gray'), colorbar;
 
subplot(3, 2, 4);
imshow(logA2, []), title('第二种方法A2');
colormap('gray'), colorbar;
 
subplot(3, 2, 5);
imshow(log(1 + abs(rr)), []), title('实部图');
colormap('gray'), colorbar;
 
subplot(3, 2, 6);
imshow(log(1 + abs(ii)), []), title('虚部图');
colormap('gray'), colorbar;

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值