数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)

简介: 数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)

一、实验目的


1了解图像变换的原理;

2理解图像变换系数的特点;

3掌握图像变换的方法及应用;

4掌握图像的频谱分析方法;

5了解图像变换在图像数据压缩、图像滤波等方面的应用。


二、主要仪器设备


安装了MATLAB软件的台式或笔记本电脑


三、实验原理


(一)变换原理


1.离散傅里叶变换


对于二维离散信号,Fourier正变换定义为:

0a2653c851af460fa595bd959398a8f1.png

二维离散傅立叶逆变换为:

0eacb84100b54626af849e6b562bf92a.png

相关函数:fft2; ifft2


2.离散余弦变换


正变换公式为:

0a2653c851af460fa595bd959398a8f1.png

逆变换公式为:

0eacb84100b54626af849e6b562bf92a.png

相关函数:dct2; idct2


3.频谱平移


2d65d23f6d4748949b924e4057485923.png

相关函数:fftshift; ifftshift

例题:

图像的二维离散傅立叶变换

I=imread(‘coins.png’); %读入原图像文件

imshow(I); %显示原图像

fftI=fft2(I); %二维离散傅立叶变换

sfftI=fftshift(fftI); %直流分量移到频谱中心

RR=real(sfftI); % real(A)为取复数A的实部

II=imag(sfftI); %imag(A)为取复数A的虚部

A=sqrt(RR.^ 2+II.^2); %计算频谱幅值

B=abs(sfftI);

I1=ifft2(fftI); %重建原图像

figure; %创建窗口

imshow(uint8(A)); %显示原图像的频谱


(二)频谱分析原理


图像变换是能量的重新分配。频率域中低频部分对应的是图像中的平滑部分(灰度变化缓慢的区域,)高频部分对应的是图像中的边缘、细节或噪声部分。

本实验主要函数:

fft2; ifft2; dct2; idct2; abs; angle; fftshift; ifftshift; imshow ; subplot; title


四、实验步骤和内容


1. 为下面三段程序写出注释并上机运行,将实际运行结果如实记录到实验报告,并分析三段程序的不同之处,并解释第一段程序出现问题的原因。


(1)f = imread ( ‘pout.tif’);

F=fft2(f);

S=abs(F);

imshow(S);

f1=ifft2(F);

figure;imshow(f1);


(2)f1 = imread (‘pout.tif’);

f=im2double(f1);

F=fft2(f);

S=abs(F);

imshow(uint8(S));

f1=ifft2(F);

figure;imshow(f1);


(3)f1 = imread (‘pout.tif’);

f=im2double(f1);

F=fft2(f);

S=uint8(abs(F));

imshow(S);

S1=fftshift(F);

figure;imshow(uint8(abs(S1)));

f11=ifft2(F);

figure;imshow(f11);


2.选取一幅标准测试图像实现傅里叶变换。


(1)读图图像;

(2)显示原图像;

(3)进行傅里叶正变换;

(4)获取其幅度谱和相位谱;

(5)利用逆变换对图像进行重建。


3.频谱平移


选取一幅灰度图像,对其进行傅里叶变换、频谱平移、频谱逆平移、傅里叶逆变换,并在同一窗口中同时显示原图像、傅里叶变换频谱、频谱平移图像、逆平移频谱图像及傅里叶逆变换图像并按上述名称命名。将程序及效果图记录入实验报告。


4. 选取一幅标准测试图像实现离散余弦变换。


(1)读图图像;

(2)显示原图像;

(3)进行离散余弦正变换;

(4)利用逆变换对图像进行重建;

(5)对(3)中的系数进行取舍。

(6)用(5)中得到的系数矩阵对图像进行重建(逆变换),得到新图像;

(7)在同一窗口显示原图像、频谱图、直接重建图像、改变系数后的重建图像;

(8)分析两个重建的图像的图像质量变化以及产生的原因。

离散余弦变换后,将低频分量其中到了左上角,所以程序中是保留了左上角33*33的小矩阵的信息量,而其他信息都舍弃了,因此重建后的图像变得模糊了。


5.记录和整理实验报告。


五、思考题


1.傅里叶变换有哪些重要的性质?

可以将低频和高频信号区分开来,将图像的灰度分布函数变换为图像的频率分布函数。

2.离散余弦变换与傅里叶变化相比有哪些优势?

离散余弦变换首先低频信号都是集中在左上角,并且相对于傅里叶变换是不用进行频谱搬移的

3.观察图像变换后的频谱矩阵系数,总结变换后系数分布特点。

都是双精度,并且落在(-1,1)的区间


六、实验代码


%% 1.1
f = imread ('pout.tif'); 
f = im2double(f)  %没有对图像进行归一化(为什么进行归一化?)
F=fft2(f);       
S=abs(F);      
imshow(uint8(S)); %没有对复数模值进行[0,255]进行映射          
f1=ifft2(F);
figure;imshow(f1);
%% 1.2 
f1 = imread ('pout.tif'); 
f=im2double(f1); %将图像转换为双精度(归一化)
F=fft2(f); % 进行傅里叶变化
S=abs(F);  % 对复数取模值
imshow(uint8(S));  % 将数据映射到[0,255](频谱图)并显示
f1=ifft2(F); % 对傅里叶进行逆变换
figure;imshow(f1);  % 显示
%% 1.3 
clc,clear
close all
f1 = imread ('pout.tif'); 
f=im2double(f1); 
F=fft2(f);
S=uint8(abs(F));           
imshow(S);
S1=fftshift(F); %频谱平移,将直流分量移到频谱中心
figure;imshow(uint8(abs(S1)));
f11=ifft2(F);
figure;imshow(f11);
%% 2
clc,clear
close all
f = imread ('pout.tif');
f_y = im2double(f);
f_n = fft2(f);   % 未im2double的傅里叶变换
f_y = fft2(f_y); % 经过im2double的傅里叶变换
RR_y = real(f_y); %实部
II_y = imag(f_y); %虚部
RR_n = real(f_n);
II_n = imag(f_n);
A_y = sqrt(RR_y.^2+II_y.^2); % 求取距离(频谱)
B_y = angle(f_y);            % 求取相位
C_y = abs(f_y);              % 求取距离
A_n = sqrt(RR_n.^2+II_n.^2);
B_n = angle(f_n);
C_n = abs(f_n);
S_y = fftshift(f_y);         %频谱平移
S_n = fftshift(f_n);
figure
subplot(2,3,1);imshow(f);xlabel('原图像')
subplot(2,3,2);imshow(A_y);xlabel('幅度谱');title('经过im2double处理')
subplot(2,3,3);imshow(B_y);xlabel('相位谱')
subplot(2,3,4);imshow(uint8(A_y));xlabel('频谱图')
subplot(2,3,5);imshow(uint8(abs(S_y)));xlabel('频谱平移图')
subplot(2,3,6);imshow(ifft2(f_y));xlabel('图像进行重建')
% figure
I_y = ifftshift(S_y);
I_n = ifftshift(S_n);
figure
subplot(1,2,1);imshow(uint8(abs(I_y)));xlabel('y_逆平移')
subplot(1,2,2);imshow(uint8(abs(I_n)));xlabel('n_逆平移')
%% 3
f1 = imread ('pout.tif'); 
f=im2double(f1); % 0-1变小;
F=fft2(f1);
F1 = fft2(f)
S=uint8(abs(F));           
S1=fftshift(F); %频谱平移,将直流分量移到频谱中心
S2=ifftshift(S1);
f11=ifft2(F);
figure
subplot(2,3,1);imshow(f1);xlabel('原图像')
subplot(2,3,2);imshow(S);xlabel('傅里叶变换频谱')
subplot(2,3,3);imshow(uint8(abs(S1)));xlabel('频谱平移图像')
subplot(2,3,4);imshow(uint8(abs(S2)));xlabel('逆平移频谱图像')
subplot(2,3,5);imshow(uint8(f11));xlabel('傅里叶逆变换图像')
%% 4
f = imread ('pout.tif');
f1 = im2double(f);
f_dct = dct2(f1);
f_idct = idct2(f_dct);
Z = zeros(291,240);
Z(1:33,1:33) = 1;
f_dct_d = Z.*f_dct;
f_idct_d = idct2(f_dct_d);
figure
subplot(2,2,1);imshow(f);xlabel('原图像')
subplot(2,2,2);imshow(abs(f_dct));xlabel('频谱图')
subplot(2,2,3);imshow(f_idct);xlabel('直接重建图像')
subplot(2,2,4);imshow(f_idct_d);xlabel('改变系数后重建图像')


七、实验图像



0a2653c851af460fa595bd959398a8f1.png0eacb84100b54626af849e6b562bf92a.png2d65d23f6d4748949b924e4057485923.png2e9b90b2ca334476abebe75bafe6eeaa.png4cebaac233b3433da32a72337a77fc60.png


八、对于傅里叶变换的相关解释


可以看我之前写的文章,有对于傅里叶和离散余弦的变换的说明


数字图像处理——图像变换(二维离散傅里叶正逆变换fft2/fft2、离散余弦正逆变换dct2/idct2、频谱正逆平移fftshift/ifftshift、幅度谱与相位谱)


相关文章
|
机器学习/深度学习 传感器 算法
数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)
数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)
940 0
数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)
|
13天前
|
数据可视化 算法 计算机视觉
什么是傅里叶变换?傅里叶变换处理图像的原理是什么?
傅里叶变换是一种强大的数学工具,能够将信号在时域与频域之间进行转换,广泛应用于物理学、信号处理、图像处理等领域。它能够将复杂信号分解为多个简单的正弦波,从而便于分析和处理。在图像处理中,傅里叶变换可以用于去噪、锐化和压缩等操作,通过滤波器选择性地保留或去除特定频率的信息,提高图像质量。
|
3月前
第4章-变换-4.1-基础变换
第4章-变换-4.1-基础变换
22 0
|
机器学习/深度学习 传感器 算法
参数化重采样时频变换(PRTF变换)附matlab代码
参数化重采样时频变换(PRTF变换)附matlab代码
|
机器学习/深度学习 算法 自动驾驶
基于图像特征检测——使用相位拉伸变换(Matlab代码实现)
基于图像特征检测——使用相位拉伸变换(Matlab代码实现)
117 0
|
传感器 机器学习/深度学习 算法
【方位估计 】基于music算法均匀线阵的标量阵与矢量阵的方位估计附Matlab源码
【方位估计 】基于music算法均匀线阵的标量阵与矢量阵的方位估计附Matlab源码
|
机器学习/深度学习 传感器 算法
【图像隐藏】基于分数阶傅里叶变换 DFT实现数字水印嵌入提取附含Matlab代码
【图像隐藏】基于分数阶傅里叶变换 DFT实现数字水印嵌入提取附含Matlab代码
|
机器学习/深度学习 传感器 算法
【图像重建】基于离散余弦变换DCT图像重建含MSE、PSNR、压缩比附matlab代码
【图像重建】基于离散余弦变换DCT图像重建含MSE、PSNR、压缩比附matlab代码
|
机器学习/深度学习 传感器 编解码
基于二维连续小波变换条纹图相位提取方法附matlab代码
基于二维连续小波变换条纹图相位提取方法附matlab代码
|
机器学习/深度学习 算法 计算机视觉
【MATLAB】离散余弦变换滤波算法(DCT)
之前介绍的所有滤波算法都是空间域滤波算法(即2D滤波算法)。离散余弦变换滤波算法(DCT)属于频率域滤波算法(即3D滤波算法)。
360 0
【MATLAB】离散余弦变换滤波算法(DCT)