《数字图像处理》实验报告四

一、实验任务与要求

  • 对 Fig0403.tif 进行傅里叶变换并显示其频谱图像;fft2(x)
  • 对 Fig0405.tif 图像进行填充和非填充的高斯滤波,并观察其不同;paddedsize,fft2(x,m,n)
  • 由 sobel 空间滤波算子生成相应的频率域滤波算子并比较各自对 Fig0409.tif 的滤波效果;fspecial( 'sobel' )
  • 任意设计一个频域的低通或高通滤波器,并对 Fig0413.tif 进行处理

二、实验报告 

(一)对 Fig0403.tif 进行傅里叶变换并显示其频谱图像

1、转换图像类型为 double

f=imread('E:\Ex_4\Fig0403.tif');
f_d=im2double(f);

2、使用 fft2 进行傅里叶变换

f2=fft2(f_d);
f2=fftshift(f2); %将零频点移到频谱中间
f2=abs(f2); %取绝对值
F2=log(abs(f2)+1); %取模并进行缩放

3、效果

(二)对 Fig0405.tif 图像进行填充和非填充的高斯滤波,并观察其不同

1、转换图像类型为 double

f=imread('E:\Ex_4\Fig0405.tif');
f=im2double(f);
subplot(1,3,1)
imshow(f);title('原图');

2、填充的高斯滤波

(1)使paddedsize 获得填充参数

PQ=paddedsize(size(f));

(2)得到有填充图像的傅里叶变换

F=fft2(f,PQ(1),PQ(2));

 (3)使用 freqz2 生成一个大小为 PQ(1)*PQ(2) 的高斯频率域滤波器

h=fspecial('gaussian',[PQ(1),PQ(2)],5);
H=freqz2(h,PQ(1),PQ(2));

 (4)使用 ifftshift 进行反变换

H=ifftshift(H);

(5)滤波器乘以傅里叶变换,并使用 ifft2 进行傅里叶反变换

G=H.*F;
g=ifft2(G);

 (6)将左上部的矩形修剪为原始大小,并转换回 uint8 类型

g=g(1:size(f,1),1:size(f,2));
g=im2uint8(g);
subplot(1,3,2)
imshow(g);title('填充');

3、不填充的高斯滤波 

[r,c]=size(f);
F2=fft2(f); %无填充的傅里叶变换
h=fspecial('gaussian',[r,c],5);
H2=freqz2(h,r,c);
H2=ifftshift(H2);
G2=H2.*F2;
g2=ifft2(G2);
g2=im2uint8(g2);
subplot(1,3,3)
imshow(g2);title('无填充');

4、效果

     

可以看出,填充的高斯滤波处理图像四周边缘有都有黑边,而不填充的高斯滤波处理只有上边缘有黑边。 

(三)由 sobel 空间滤波算子生成相应的频率域滤波算子并比较各自对 Fig0409.tif 的滤波效果

1、转换图像类型为 double 进行傅里叶变化

f=imread('E:\Ex_4\Fig0409.tif');
subplot(1,3,1)
imshow(f);title('原图');
f_d=im2double(f); 
f2=fft2(f_d);

2、 sobel 空间域滤波器

h=fspecial('sobel'); %sobel空间滤波器
f1=imfilter(f,h);
subplot(1,3,2);
imshow(f1);title('空间域滤波算子处理');

3、sobel 频率域滤波器

(1)使用 paddedsize 获得填充参数

PQ=paddedsize(size(f));

(2)得到有填充图像的傅里叶变换

f3=fft2(f_d,PQ(1),PQ(2));

(3)使用 freqz2 转换为频率域滤波器,并进行反变换

H=freqz2(h,PQ(1),PQ(2));
H=ifftshift(H);

(4)滤波器乘以傅里叶变换,并使用 ifft2 进行傅里叶反变换

G=H.*f3;
g=ifft2(G);
g=g(1:size(f,1),1:size(f,2));
g=im2uint8(g);
subplot(1,3,3);
imshow(g);title('sobel频率域滤波算子');

4、效果

可以看出,空间域滤波和频域滤波对图像的滤波效果并无明显区别。

(四)任意设计一个频域的低通或高通滤波器,并对 Fig0413.tif 进行处理

1、对图像进行傅里叶变化并将分量移到频谱中心

f=imread('E:\Ex_4\Fig0413.tif');
subplot(1,2,1);imshow(f);title('原图');
f=im2double(f); %转换为double类型
f2=fft2(f); %傅里叶变换
f2=fftshift(f2); %将变换的原点移到频率矩形的中心

2、设计滤波器的传递函数

[R,C]=size(f2);
nn=2;
d0=50;
r=fix(R/2);
c=fix(C/2);
result=ones(R,C); %创建一个R*C的全一矩阵
for i=1:Rfor j=1:Cd=sqrt((i-r)^2+(j-c)^2);h=1/(1+0.414*(d/d0)^(2*nn));result(i,j)=h*f2(i,j);end
end
result=ifftshift(result);
f3=ifft2(result);
f4=im2uint8(real(f3));
subplot(1,2,2)
imshow(f4);title('频域滤波器处理');

3、处理效果

可以看出,产生了模糊效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多链代币开发:打造跨链互操作性的新纪元

随着区块链技术的迅猛发展,数字资产和加密货币市场也在不断扩大。各大区块链平台如以太坊、币安智能链、波卡、Solana等,均展现出其独特的优势和广泛的应用场景。然而,这些链之间的孤立性和互操作性问题,限制了数字资产的流动性和…

突破架构瓶颈:克服软件系统中的漂移和侵蚀

一种常见但不完美的比喻是将软件系统中的架构漂移和侵蚀与物理建筑的架构相比。虽然这个比喻很直观,但它存在一个根本性的误解,这也常常引发软件开发中的架构问题。 试想一下,一个设计良好的摩天大楼或房屋建成后,我们期望它基本保…

Linux下的信号使用总结

主要参考《【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4》信号篇 发送给进程的诸多信号中,大多数都是来自于内核。 信号本质上是 int 类型的数字编号,这就好比硬件中断所对应的中断号。内核针对每个信号,都给其定义了一个唯一的整数编号…

docker 容器设置中文环境

1.容器中安装和设置 1.1.进入容器查看已有语言包 locale -a 默认情况下: 1.2 安装中文语言环境 如果没有zh_CN.utf8就安装。 方式1: #直接安装中文语言包 apt-get install -y language-pack-zh-hans 方式2: #安装中文语言环境 apt-g…

线性和二次判别分析

线性判别分析 线性判别分析(Linear Discriminant Analysis,LDA)亦称 Fisher 判别分析。其基本思想是:将训练样本投影到低维超平面上,使得同类的样例尽可能近,不同类的样例尽可能远。在对新样本进行分类时&…

达梦数据库的系统视图v$lock

达梦数据库的系统视图v$lock 在达梦数据库(DM)中,V$LOCK 系统视图用于查看当前数据库中的锁定状态。该视图提供了关于所有锁定详细信息,例如锁的内存地址、所属事务 ID,锁类型和锁模式等。这对于数据库管理员进行锁定…

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter 今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件&#x…

开发网页版加密访问文档

开发一个支持加密访问文档的网页版应用程序涉及多个步骤,包括用户认证、文档加密和解密、文件上传和下载,以及确保整个过程中的数据安全性。下面是一个详细的步骤指南: 步骤1:设置项目环境 首先,设置一个新的项目环境…

函数调用,递归技巧之取反

递归指的是在解决问题的过程中,将问题分解为同类的子问题而解决问题的方法。在程序中通常体现为函数调用自身的方式。 比如是双方回合制对战的游戏进行结算,可以使用一个变量bool类型来完成一回合双方互相战斗并且攻击方同时会作为受攻击方的结算。在递归…

Vue跨标签页数据通信

跨标签页数据通信 在同一浏览器项目地址处于不同的标签页中,建立两个页面间的数据通信,即:B页面新增/修改数据;A页面表格自动更新数据 跨标签页通信常见方案: BroadCast Channel (广播频道) Service Worker LocalStorage Window.onstorage监听 Shared…

English note 1

It was right that I decided not to buy new course before. A few days ago, the after-sales staff of this software announced that all the courses of this software would be taken down. 之前决定不继续买新的课程是对的。几天前,这个软件的售后人员就宣布…

Zookeeper 三、Zookeeper基本使用

1.Zookeeper系统模型 1)Zookeeper数据模型之ZNode 在Zookeeper中,数据信息被保存在一个个数据节点上,这些节点被称为ZNode。ZNode是Zookeeper中最小数据单位,在ZNode下面又可以再挂ZNode,这样一层层下去就形成了一个…

Reactor模型:网络线程模型演进

一,阻塞IO线程池模型(BIO) 这是传统的网络编程方案所采用的线程模型。 即有一个主循环,socket.accept阻塞等待,当建立连接后,创建新的线程/从线程池中取一个,把该socket连接交由新线程全权处理。…

【机器参数】安装适合的nvidia驱动

背景:我现在nvidia-smi没有显示,我的目标是让nvidia-smi正常显示 参考: nchttps://www.cnblogs.com/carle-09/p/11504544.html 可能是驱动版本不对,所以我重新去nvidia官网下载了驱动。 Official Drivers | NVIDIA 得到了NVID…

discuz迪恩cul!教育课程培训网站模板

Discuz x3.2模板 迪恩cul!教育课程培训 GBK,程序包中内附详细的安装教程,下载后按照教程安装即可 discuz迪恩cul!教育课程培训网站模板

如何将本地的Django项目部署到阿里云服务器上?

场景:在本地的pycharm上已经写好了一个Django架构的网站,现在要把它放到公网上 一、阿里云服务器 选择云服务器ECS,新用户可以免费使用三个月 购买时选择预装宝塔面板 买好后,进入云服务器控制台 重置实例密码 远程连接至服务…

python-17-零基础自学python-

学习内容:《python编程:从入门到实践》第二版 知识点: 类、子类、继承、调用函数 练习内容: 练习9-6:冰激凌小店 冰激凌小店是一种特殊的餐馆。编写一个名为IceCreamStand的类,让它继承为完成练习9-1或…

宝塔计划任务调用node程序时,log4js日志保存本地位置会发生变化

接我上一篇文章的情况 超简单的nodejs使用log4js保存日志到本地(可直接复制使用)-CSDN博客 原本应当保存在node项目目录下的日志文件,如果使用宝塔的计划任务来定时执行的话,日志保存路径会发生变化到如下图的位置: 如…

六款顶级原型设计工具推荐,满足你所有需求!

即时设计作为一款专业原型工具,无论是从功能还是插件库配备情况来看,都是毫无疑问可以进行原型图设计的,而且,即时设计内设海量资源库,可以支持大家通过关键词进行搜索相关资源,并且在线编辑使用&#xff0…

瑜伽馆管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教练管理,用户管理,瑜伽管理,套餐管理,体测报告管理,基础数据管理 前台账户功能包括:系统首页&#xff0c…