Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

问题1:x,y方向同时平移后频谱有何变化?

答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值。
代码运行结果:
在这里插入图片描述
在这里插入图片描述
代码:

clc;
clear all;
I=imread('C:\Users\Ch04\4.bmp'); 
fftI=fft2(I);
sfftI=fftshift(fftI);   %求离散傅里叶频谱
%对原始图像进行二维离散傅里叶变换,并将其坐标原点移到频谱图中央位置
RRfdp1=real(sfftI);
IIfdp1=imag(sfftI); a=sqrt(RRfdp1.^2+IIfdp1.^2);
a=(a-min(min(a)))/(max(max(a))-min(min(a)))*225;
figure(4);
subplot(1,2,1),imshow(real(I)),title('同时沿X轴和Y轴平移图');
subplot(1,2,2),imshow(real(a)),title('同时沿X轴和Y轴的傅里叶谱');
问题2:编程验证一幅图旋转45度后,其傅里叶谱图也旋转了45度。

在这里插入图片描述
代码:

%构造原始图像
clc;clear all;
I = zeros(256,256); I(88:168,124:132) = 1;
J = fft2(I); %求原始图像的傅里叶频谱
F = abs(J);
J1 = fftshift(F);
figure;
subplot(2,2,1),imshow(I),title('原图');
subplot(2,2,2),imshow(J1,[5 50]),title('原图的傅里叶谱');
%对原始图像进行旋转
J = imrotate(I,45,'bilinear','crop');
%求旋转后图像的傅里叶频谱
J1 = fft2(J);
F = abs(J1);
J2 = fftshift(F);
%figure;
subplot(2,2,3),imshow(J),title('旋转45度后的图');
subplot(2,2,4),imshow(J2,[5 50]),title('旋转45度后的图的傅里叶谱');
问题3:第8行10的数字大小对结果的影响;

答:第8行数字10表示把变换矩阵中小于 10 的值置换为 0,该数字越大,用 idct2 重构图像时余弦反变换恢复的效果越差。
代码运行结果:
在这里插入图片描述

代码:

% 选取一幅图像,进行离散余弦变换,并对其进行离散余弦反变换,观察其结果。
clc;clear all;close all;
%对 cameraman.tif 文件计算二维 DCT 变换
RGB = imread('C:\Users\...\lenna_rgb.tif');
I = rgb2gray(RGB); %真彩色图像转换成灰度图像
J = dct2(I);%计算二维 DCT 变换
% figure(2); imshow(log(abs(J)),[]); %图像大部分能量集中在上左角处
J(abs(J) < 10) = 0;   %%:第810的数字大小对结果的影响;
%把变换矩阵中小于 10 的值置换为 0,然后用 idct2 重构图像
K = idct2(J)/255;
figure;
subplot(1,3,1),imshow(I),title('灰度图');
% subplot(1,3,2),imshow(abs(J),[]),title('余弦变换系数图');
subplot(1,3,2),imshow(log(abs(J)),[]),title('余弦变换系数图');
JJ=log(abs(J));
subplot(1,3,3),imshow(K),title('余弦反变换恢复图');
%
问题4:改变mask1中1的个数,研究其对重构图像的质量影响

答:mask表示一个二值掩模矩阵,用来压缩DCT的系数,原始代码表示该矩阵只保留DCT变换矩阵的最左上角的10个系数进行数据压缩,并丢弃右下角高频数据。
通过实验可知:当取左上角的1时,1的数量多少对图像质量影响较小,图片均可较好地恢复。当左上角取0时(如下图所示,左上角取3个零),只能恢复图像的极少部分边缘。
根据实验和DCT的原理可以得出:保留左上角的较少数据,就可以得到一个相对完整的图片,但如果保留除左上角数据外的其他所有数据,只能得到一些图像的边缘细节信息。

代码运行结果:
在这里插入图片描述
在这里插入图片描述
代码:

% %对图像进行离散余弦变换,做图像压缩解压,取不同的 DCT 系数,并观察其结果。
% clc;clear all;close all;
% %对图像文件计算二维 DCT 变换
% RGB = imread('C:\Users\Ch04\lenna_rgb.tif');
% I = rgb2gray(RGB); %真彩色图像转换成灰度图像
% I = im2double(I);	%转换图像矩阵为双精度型
% T = dctmtx(8);	%产生二维 DCT 变换矩阵T,矩阵 T 及其转置 T'是 DCT 函数 P1*X*P2 的参数
% B = blkproc(I,[8 8],'P1*x*P2',T,T'); %块状操作函数,B实际上是DCT系数矩阵
% mask1= [ 1	1	1	1	0	0	0	0
% 1	1	1	0	0	0	0	0
% 1	1	0	0	0	0	0	0
% 1	0	0	0	0	0	0	0
% 0	0	0	0	0	0	0	0
% 0	0	0	0	0	0	0	0
% 0	0	0	0	0	0	0	0
% 0	0	0	0	0	0	0	0];  %二值掩模,用来压缩DCT系数
% % 定义一个二值掩模矩阵,用来压缩DCT的系数
% % 该矩阵只保留DCT变换矩阵的最左上角的10个系数
% % 数据压缩,丢弃右下角高频数据
% TB = blkproc(B,[8 8],'P1*x*P2',T',T); %重构图像
% B2 = blkproc(B,[8 8],'P1.*x',mask1);	%只保留 DCT 变换的 10 个系数,即压缩DCT系数矩阵
% I2 = blkproc(B2,[8 8],'P1*x*P2',T',T);	%压缩DCT系数后重构图像
% figure;
% subplot(2,3,1),imshow(I),title('灰度图');
% subplot(2,3,2);imshow(B),title('DCT系数矩阵图');
% subplot(2,3,3);imshow(B2),title('压缩后的DCT系数矩阵图');
% subplot(2,3,4),imshow(TB),title('DCT系数解压图像');
% subplot(2,3,5),imshow(I2),title('压缩DCT系数mask1解压图像');



% %%%%
%对图像进行离散余弦变换,做图像压缩解压,取不同的 DCT 系数,并观察其结果。
clc;clear all;close all;
%对图像文件计算二维 DCT 变换
RGB = imread('C:\Users\ark\Desktop\newwork\DIP\Ch04\lenna_rgb.tif');
I = rgb2gray(RGB); %真彩色图像转换成灰度图像
I = im2double(I);	%转换图像矩阵为双精度型
T = dctmtx(8);	%产生二维 DCT 变换矩阵T,矩阵 T 及其转置 T'是 DCT 函数 P1*X*P2 的参数
B = blkproc(I,[8 8],'P1*x*P2',T,T'); %块状操作函数,B实际上是DCT系数矩阵
mask1= [ 0	0	1	1	1	1	1	1
0	1	1	1	1	1	1	0
1	1	1	1	1	1	0	0
1	1	1	1	1	0	0	0
1	1	1	1	0	0	0	0
1	1	1	0	0	0	0	0
1	0	0	0	0	0	0	0
0	0	0	0	0	0	0	0];  %二值掩模,用来压缩DCT系数
TB = blkproc(B,[8 8],'P1*x*P2',T',T); %重构图像
B2 = blkproc(B,[8 8],'P1.*x',mask1);	%只保留 DCT 变换的 10 个系数,即压缩DCT系数矩阵
I2 = blkproc(B2,[8 8],'P1*x*P2',T',T);	%压缩DCT系数后重构图像
figure;
subplot(2,3,1),imshow(I),title('灰度图');
subplot(2,3,2);imshow(B),title('DCT系数矩阵图');
subplot(2,3,3);imshow(B2),title('压缩后的DCT系数矩阵图');
subplot(2,3,4),imshow(TB),title('DCT系数解压图像');
subplot(2,3,5),imshow(I2),title('压缩DCT系数mask1解压图像');
%%%%%end homework

figure;
subplot(1,2,1),imshow(abs(TB-I)),title('');
subplot(1,2,2),imshow(abs(I2-I)),title('');

RGB = imread('C:\Users\ark\Desktop\newwork\DIP\Ch04\lenna_rgb.tif'); I=rgb2gray(RGB);
I = im2double(I);	%转换图像矩阵为双精度型
T = dctmtx(8);	%产生二维 DCT 变换矩阵, returns the N-by-N DCT transform matrix
%矩阵 T 及其转置 T'是 DCT 函数 P1*X*P2 的参数
B = blkproc(I,[8 8],'P1*x*P2',T,T'); %DCT变换
mask2= [ 1 1 1 1 0 0 0 0
1	1	1	0	0	0	0	0	
1	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0];	%二值掩模,用来压缩 DCT 系数
B2 = blkproc(B,[8 8],'P1.*x',mask2);	%只保留 DCT 变换的 8 个系数
I2 = blkproc(B2,[8 8],'P1*x*P2',T',T);	%重构图像figure,imshow(I);
figure;
subplot(1,3,1),imshow(I),title('灰度图');
subplot(1,3,2);imshow(B2),title('');
subplot(1,3,3),imshow(I2),title('压缩DCT 系数 mask2 解压图像');

figure;
subplot(2,3,1),imshow(I),title('灰度图');
subplot(2,3,2),imshow(T),title('DCT变换矩阵');
subplot(2,3,3),imshow(B),title('DCT变换');
subplot(2,3,4),imshow(B2),title('压缩后的DCT变换');
subplot(2,3,5),imshow(I2),title('重构图像');

%改变mask1中1的个数,研究其对重构图像的质量影响
  • 10
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 数字图像处理中,傅里叶变换和余弦变换是两个常用的频域处理方法,可以用于图像去噪、增强、压缩等方面。下面是基于MATLAB数字图像处理傅里叶变换和余弦变换实验小结及分析: 1. 傅里叶变换实验 傅里叶变换可以将图像从时域转换到频域,分析图像中的频率成分,可以用于图像去噪、增强等方面。在MATLAB中,可以使用fft2函数进行二维离散傅里叶变换,ifft2函数进行反变换。 (1)实验目的:学习傅里叶变换的原理及应用,了解二维傅里叶变换的实现方法。 (2)实验步骤: - 读取一张灰度图像,使用imshow函数显示图像; - 对图像进行二维离散傅里叶变换,使用abs函数获取变换后的幅值谱,使用log函数进行对数变换,使用mat2gray函数将图像变换到0-1之间的范围; - 对幅值谱进行中心化,使用fftshift函数; - 对中心化后的幅值谱进行逆变换,使用ifft2函数,使用uint8函数将图像转换为8位无符号整数; - 使用subplot函数将原始图像、幅值谱、逆变换后的图像显示在同一幅图像中。 (3)实验结果分析: 通过对图像傅里叶变换,可以将图像从时域转换到频域,分析图像中的频率成分。实验结果表明,傅里叶变换后的幅值谱中,高频部分对应着图像的细节信息,低频部分对应着图像的整体信息。通过中心化幅值谱,可以将频谱的零频分量移到中心位置,方便进行分析和处理。通过逆变换,可以将幅值谱转换为时域图像,并进行图像去噪、增强等应用。 2. 余弦变换实验 余弦变换是一种常用的频域变换方法,可以将图像从空间域转换到频域,分析图像的频率成分,实现图像的压缩、去噪、增强等功能。在MATLAB中,可以使用dct2函数进行二维离散余弦变换,idct2函数进行反变换。 (1)实验目的:学习余弦变换的原理及应用,了解二维离散余弦变换的实现方法。 (2)实验步骤: - 读取一张灰度图像,使用imshow函数显示图像; - 对图像进行二维离散余弦变换,使用abs函数获取变换后的幅值谱,使用log函数进行对数变换,使用mat2gray函数将图像变换到0-1之间的范围; - 对幅值谱进行中心化,使用fftshift函数; - 对中心化后的幅值谱进行逆变换,使用idct2函数,使用uint8函数将图像转换为8位无符号整数; - 使用subplot函数将原始图像、幅值谱、逆变换后的图像显示在同一幅图像中。 (3)实验结果分析: 通过对图像的余弦变换,可以将图像从空间域转换到频域,分析图像中的频率成分。实验结果表明,余弦变换后的幅值谱中,高频部分对应着图像的细节信息,低频部分对应着图像的整体信息。通过中心化幅值谱,可以将频谱的零频分量移到中心位置,方便进行分析和处理。通过逆变换,可以将幅值谱转换为时域图像,并进行图像压缩、去噪、增强等应用。 综上所述,傅里叶变换和余弦变换是数字图像处理中常用的频域处理方法,可以用于图像去噪、增强、压缩等方面。在MATLAB中,可以使用fft2、ifft2、dct2、idct2等函数进行变换和反变换,通过对变换后的幅值谱进行分析和处理,可以实现图像的相应功能。 ### 回答2: 数字图像处理是一门研究如何对数字图像进行处理和分析的学科。傅里叶变换和余弦变换是数字图像处理中常用的两种变换技术。本次实验是基于MATLAB对数字图像进行傅里叶变换和余弦变换的实验。 在实验中,我们首先将原始图像加载到MATLAB中,并进行预处理,例如灰度化、去噪等。然后,我们使用MATLAB提供的函数进行傅里叶变换和余弦变换。傅里叶变换图像从时域转换到频域,可以分析图像中的频率成分,从而进行频域滤波、频谱分析等操作。余弦变换可以将图像分解为一系列余弦基函数的加权和,从而提取图像的频谱特征。 通过实验,我们发现傅里叶变换图像频率分析和滤波等方面具有重要的作用。通过对傅里叶变换结果的观察,我们可以了解图像中的低频分量和高频分量,并相应地进行处理。傅里叶变换还可以用于图像压缩和图像增强等应用。 而余弦变换则适用于一些特定的图像处理任务,尤其是对于包含周期相关特征的图像。余弦变换能够将图像分解为一系列余弦基函数,每个基函数代表了图像中不同频率的振幅和相位信息。通过对余弦变换结果的分析,我们可以提取图像中的周期性信息,并进行相应的处理。 总之,傅里叶变换和余弦变换是数字图像处理中常用的两种变换方法,具有广泛的应用。通过实验,我们深入了解了它们的原理和使用方式,为将来在图像处理领域的实际应用打下了基础。我们还发现这两种变换方法在图像处理中互为补充,可以分别用于不同的图像处理任务,提高图像的质量和效果。 ### 回答3: 数字图像处理中,傅里叶变换和余弦变换是常用的频域处理方法。本次实验基于matlab进行了傅里叶变换和余弦变换的实验,以下是小结和分析。 首先进行了傅里叶变换的实验。傅里叶变换可以将图像从空域转换到频域,可以分析图像的频率成分。在实验中,我们首先读取了一张图像,然后使用matlab中的fft函数进行傅里叶变换。通过查看变换后的结果,我们可以观察到不同频率的成分。在具体分析时,我们可以使用低通滤波器通过保留低频信号来消除噪声,也可以使用高通滤波器通过保留高频信号来强调图像的细节。 其次进行了余弦变换的实验。余弦变换是一种针对实数信号的变换方法,可以将图像从空域转换到相关域。在实验中,我们同样读取了一张图像,然后使用matlab中的dct函数进行余弦变换。通过观察变换后的结果,我们可以发现余弦变换主要用于图像压缩。变换后的结果可以通过截取一部分系数来降低图像的质量,从而实现图像的压缩存储。 对于傅里叶变换和余弦变换的实验,我们可以得出以下结论。傅里叶变换适用于分析图像的频率成分,可以用于滤波和图像增强。而余弦变换主要用于图像的压缩,在保证一定图像质量的前提下,减小图像的存储空间。在实际应用中,傅里叶变换和余弦变换通常结合其他图像处理方法一起使用,以达到更好的效果。 此外,我们还可以进一步探索更多的图像处理方法,比如小波变换和离散余弦变换。这些方法可以进一步改善图像处理的效果,并且在不同的应用场景下有着不同的优势和适用性。 总之,基于matlab傅里叶变换和余弦变换实验为我们提供了一种有效的图像处理方法,可以分析图像的频率成分和进行图像压缩。熟练掌握这些方法,对于数字图像处理的学习和应用具有重要的意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值