问题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;   %%:第8行10的数字大小对结果的影响;
%把变换矩阵中小于 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 homeworkfigure;
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的个数,研究其对重构图像的质量影响

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

  1. Matlab数字图像处理 02 灰度变化(图像直方图、直方图均衡化、直方图匹配)

    第二章 灰度变化 2.1 图像的亮度.对比度和动态范围 2.1.1 亮度 2.1.2 对比度 2.1.3 动态范围 2.2 线性灰度变换 2.2.1 具有饱和处理的线性灰度变换 2.2.2 分段线性灰 ...

  2. python实现傅里叶变换求幅值和相位_Python 实现图像快速傅里叶变换和离散余弦变换...

    图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了二维离散傅里叶变换和二维离散余弦变换算法,并在多个图像样本上进行测试,以探究二者的 ...

  3. 利用python对图像进行傅里叶变换_Python 实现图像快速傅里叶变换和离散余弦变换...

    图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了 二维离散傅里叶变换 和 二维离散余弦变换 算法,并在多个图像样本上进行测试,以探 ...

  4. Python 实现图像快速傅里叶变换和离散余弦变换

    图像的正交变换在数字图像的处理与分析中起着很重要的作用,被广泛应用于图像增强.去噪.压缩编码等众多领域.本文手工实现了二维离散傅里叶变换和二维离散余弦变换算法,并在多个图像样本上进行测试,以探究二者的 ...

  5. matlab图像低通滤波器 实验报告,基于matlab数字图像处理之低通滤波器

    <基于matlab数字图像处理之低通滤波器>由会员分享,可在线阅读,更多相关<基于matlab数字图像处理之低通滤波器(6页珍藏版)>请在人人文库网上搜索. 1.实践一:理想低 ...

  6. Matlab数字图像处理——图像的空间变换

    Matlab空间变换函数 imtransform Matlab空间变换函数 imtransform 可以实现图像仿射变换(如 平移.旋转.剪切.缩放).投影变换, 该函数可与 maketform 配合 ...

  7. MATLAB数字图像处理常见实验代码

    实验代码结果展示 此代码使用的编译器为MATLAB2018b及以上的版本 求1到10的阶乘之和 sum = 0; for i = 1:10sum = sum + factorial(i); end d ...

  8. Matlab数字图像处理——图像文件的读取

    文章目录 一.Matlab中获取图像信息的函数 imfinfo 二.Matlab读取图像文件的函数 imread 三.Matlab保存图像文件的函数 imwrite 完整目录 一.Matlab中获取图 ...

  9. matlab对于处理数字图像的优点,学习MATLAB数字图像处理经验谈

    学习MATLAB数字图像处理经验谈 学习数字图像处理经验谈 (赵小川) 一.面向应用:层层分解.抓住要点 我们学习数字图像处理的最终目的还是应用,不管是用它来研制产品还是研发项目抑或是研究课题,都要用 ...

最新文章

  1. 那些年,我在游戏开发中改过的bug:坑爹的Vista与中间件
  2. 你必须知道的CSS盒模型,面试建议
  3. 微信小程序console.log出来的是object的问题解决方法
  4. nutch爬虫原来是这样操作的!
  5. Redis:哨兵模式(针对某一模块,数据量有限)
  6. 音频分析工具librosa
  7. 【PAT乙】1005 继续(3n+1)猜想 (25分)
  8. VS2019下安装NumCpp库小结
  9. 三极管/达林顿管 管脚定义
  10. 《王牌特工2:黄金圈》观后感
  11. 虚幻引擎_矢量场初探
  12. ATX 双电源切换电路
  13. Python新手-记一次股权穿透层级打分(森林实现)
  14. UDP 实现多收多发,广播发送,组播发送 TCP 实现多收多发
  15. ex.php,Exphp代码走读(二)
  16. 多机房UPS及环境集中监控方案丨UPS环境综合监控主机
  17. 华为RS2 传输介质
  18. 医学知识-DDR数字化成像-X平片
  19. 使用C#winform写一个翻译软件
  20. 解决WARN: Establishing SSL connection without server‘s identity verification is not recommended警告问题~

热门文章

  1. linux战争雷霆无法运行,战争雷霆Mac版下载及运行问题汇总 苹果OSX系统怎么运行战雷...
  2. CloudLeak: Large-Scale Deep Learning Models一种黑盒的攻击方法
  3. NetScaler 12.1 Deploy Package
  4. bt5制作php木马,BT5安全测试实践 - 安全牛课堂 - 领先的信息安全在线教育平台
  5. java经典习题-模拟地下城与勇士(DNF)的装备强化
  6. 情人恋语短信--诚心道歉版
  7. android utf-8 转 gbk编码,【字符编码系列】GBK,UTF-8,UTF-16之间的转换
  8. MySQL数据库1初识MySQL
  9. StarUML 注册码源码级别授权:实现 StarUML免注册码(Mac OS为例)
  10. 中国IT分销行业研究与投资战略报告(2021版)