实验五 图像增强—空域滤波

一、实验目的

        了解图像平滑滤波器(均值滤波和中值滤波)和图像锐化算子(Sobel算子、Prewitt算子、Laplacian算子)在工程领域中的应用;理解图像平滑滤波器和图像锐化算子的工程应用范围;掌握图像平滑滤波器和图像锐化算子的常用算法原理;熟悉图像中常见的几种噪声模型(高斯噪声、脉冲噪声、指数噪声、瑞利噪声);根据任务要求选择图像空域增强算法并编程实现。了解几种不同滤波方式的使用和使用的场合,培养处理实际图像的能力,并为课堂教学提供配套的实践机会。

二、实验内容

(1) 学生应当完成对于给定图像+噪声,使用平均滤波器、中值滤波器对不同强度的高斯噪声和椒盐噪声,进行(平滑)滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。

利用MATLAB软件实现空域滤波的程序:

示例:

a) 调入并显示原始图像。

b) 利用imnoise 命令在图像上加入高斯(gaussian) 噪声

c)利用预定义函数fspecial 命令产生平均(average)滤波器

                     

d)分别采用3x35x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;

e)选择不同大小的模板,对加入某一固定噪声水平噪声的图像进行处理,观察上述滤波器处理的结果。

f)利用imnoise 命令在图像上加入椒盐噪声(salt & pepper)

g)重复c)~ e)的步骤

h)输出全部结果并进行讨论。

I=imread('Lenna.jpg');

J = imnoise(I,'gauss',0.02);              %添加高斯噪声

J = imnoise(I,'salt & pepper',0.02);        %添加椒盐噪声  

ave1=fspecial('average',3);              %产生3×3的均值模版

ave2=fspecial('average',5);              %产生5×5的均值模版

K = filter2(ave1,J)/255;                 %均值滤波3×3

L = filter2(ave2,J)/255;                 %均值滤波5×5

M = medfilt2(J,[3 3]);                  %中值滤波3×3模板

N = medfilt2(J,[4 4]);                   %中值滤波4×4模板

figure,imshow(I);

figure,imshow(J);

figure,imshow(K);

figure,imshow(L);

figure,imshow(M);

figure,imshow(N);

(2) 学生对于给定图像,可以采用一阶梯度算子(‘prewitt’、’sobel’),二阶拉普拉斯算子进行锐化滤波处理;能够正确地评价处理的结果;能够从理论上作出合理的解释。

(3) 自行设计滤波器算子,验证图像滤波结果。

(4) 对比采用imfilter函数或某种卷积运算时边界选项,如’replicate’,’symmetric’,’circular’的影响。

(5) 有余力的同学可根据指导书的知识点进行相关验证实验(非必须项)。

三.实验程序、实验结果与实验分析

1.实验程序

% 读取图像 

I = imread('Lenna.jpg'); 

I = rgb2gray(I); % 转换为灰度图像以简化处理 

figure;subplot(1, 3, 1);imshow(I);title('原始图像');

 

% 添加高斯噪声 

J_gauss = imnoise(I,'gaussian',0.02); % 第二个参数为均值,第三个参数为方差

subplot(1, 3, 2);imshow(J_gauss);title('添加高斯噪声后的图像');

 

% 添加椒盐噪声 

J_saltpepper = imnoise(I,'salt & pepper',0.02); 

subplot(1, 3, 3);imshow(J_saltpepper);title('添加椒盐噪声后的图像');

 

% 创建滤波器 

ave1 = fspecial('average',3); 

ave2 = fspecial('average',5); 

 

% 对高斯噪声图像进行滤波 

K_gauss = filter2(ave1,J_gauss)/255;           %均值滤波3×3

L_gauss= filter2(ave2,J_gauss)/255;            %均值滤波5×5

M_gauss = medfilt2(J_gauss,[3 3]);             %中值滤波3×3模板

N_gauss = medfilt2(J_gauss,[5 5]);             %中值滤波5×5模板

 

% 对椒盐噪声图像进行滤波 

K_saltpepper = filter2(ave1,J_saltpepper)/255;   

L_saltpepper = filter2(ave2,J_saltpepper)/255; 

M_saltpepper = medfilt2(J_saltpepper,[3 3]); 

N_saltpepper = medfilt2(J_saltpepper,[5 5]); 

 

figure;

subplot(2, 4, 1);imshow(K_gauss);title('高斯噪声 - 3x3 平均滤波');

subplot(2, 4, 2);imshow(L_gauss);title('高斯噪声 - 5x5 平均滤波');

subplot(2, 4, 3);imshow(M_gauss);title('高斯噪声 - 3x3 中值滤波');

subplot(2, 4, 4);imshow(N_gauss);title('高斯噪声 - 5x5 中值滤波');



subplot(2, 4, 5);imshow(K_saltpepper);title('椒盐噪声 - 3x3 平均滤波');

subplot(2, 4, 6);imshow(L_saltpepper);title('椒盐噪声 - 5x5 平均滤波');

subplot(2, 4, 7);imshow(M_saltpepper);title('椒盐噪声 - 3x3 中值滤波');

subplot(2, 4, 8);imshow(N_saltpepper);title('椒盐噪声 - 5x5 中值滤波');



% 锐化滤波

prewitt_x = fspecial('prewitt');

prewitt_y = prewitt_x'; % Prewitt滤波器的y方向等于x方向的转置

sobel_x = fspecial('sobel');

sobel_y = sobel_x'; % Sobel滤波器的y方向等于x方向的转置

laplacian = fspecial('laplacian', 0.5);



% 应用锐化滤波器

sharp_prewitt = imfilter(double(I), prewitt_x, 'replicate') + imfilter(double(I), prewitt_y, 'replicate');

sharp_sobel = imfilter(double(I), sobel_x, 'replicate') + imfilter(double(I), sobel_y, 'replicate');

sharp_laplacian = imfilter(double(I), laplacian, 'replicate');



% 显示锐化结果

figure;

subplot(1, 3, 1);imshow(mat2gray(sharp_prewitt));title('Prewitt锐化');

subplot(1, 3, 2);imshow(mat2gray(sharp_sobel));title('Sobel锐化');

subplot(1, 3, 3);imshow(mat2gray(sharp_laplacian));title('Laplacian锐化');



% 自定义滤波器

custom_filter = ones(3, 3) / 9;

sharp_custom = imfilter(double(I), custom_filter,'replicate');

% 显示自定义滤波器结果

figure;imshow(mat2gray(sharp_custom));title('自定义滤波器滤波结果');



% 对高斯噪声图像进行滤波

K_gauss_replicate = imfilter(J_gauss, ave1, 'replicate');   

K_gauss_symmetric = imfilter(J_gauss, ave1, 'symmetric');

K_gauss_circular = imfilter(J_gauss, ave1, 'circular');



figure;subplot(1, 3, 1);imshow(K_gauss_replicate);

title('高斯噪声 - 3x3 平均滤波 - replicate');

subplot(1, 3, 2);imshow(K_gauss_symmetric);

title('高斯噪声 - 3x3 平均滤波 - symmetric');

subplot(1, 3, 3);imshow(K_gauss_circular);

title('高斯噪声 - 3x3 平均滤波 - circular');

2.实验结果

(1)为图像分别加入高斯噪声、椒盐噪声

(2)分别采用3x35x5的模板,分别用平均滤波器以及中值滤波器,对加入噪声的图像进行处理并观察不同噪声水平下,上述滤波器处理的结果;

(3)一阶梯度算子(‘prewitt’、’sobel’),二阶拉普拉斯算子进行锐化滤波处理结果

(4)使用自定义滤波器算子进行滤波

(5)采用imfilter函时边界选项,’replicate’,’symmetric’,’circular’的影响。

3.实验分析

(1)读取名为"Lenna.jpg"的彩色图像,并将其转换为灰度图像

I = imread('Lenna.jpg'); 

I = rgb2gray(I); % 转换为灰度图像以简化处理

(2)添加高斯噪声和添加椒盐噪声。

J_gauss = imnoise(I,'gaussian',0.02);

J_saltpepper = imnoise(I,'salt & pepper',0.02);

(3)创建了两个平均滤波器(3x3和5x5)

ave1 = fspecial('average',3); 

ave2 = fspecial('average',5); 

(4)对添加了高斯噪声的图像和添加了椒盐噪声的图像分别应用了这些滤波器

% 对高斯噪声图像进行滤波 

K_gauss = filter2(ave1,J_gauss)/255;         3

L_gauss= filter2(ave2,J_gauss)/255;          

M_gauss = medfilt2(J_gauss,[3 3]);            

N_gauss = medfilt2(J_gauss,[5 5]);            

% 对椒盐噪声图像进行滤波 

K_saltpepper = filter2(ave1,J_saltpepper)/255;   

L_saltpepper = filter2(ave2,J_saltpepper)/255; 

M_saltpepper = medfilt2(J_saltpepper,[3 3]); 

N_saltpepper = medfilt2(J_saltpepper,[5 5]); 

(5)使用Prewitt、Sobel和Laplacian滤波器进行图像的锐化

% 锐化滤波

prewitt_x = fspecial('prewitt');

prewitt_y = prewitt_x';

sobel_x = fspecial('sobel');

sobel_y = sobel_x';

laplacian = fspecial('laplacian', 0.5);

% 应用锐化滤波器

sharp_prewitt = imfilter(double(I), prewitt_x, 'replicate') + imfilter(double(I), prewitt_y, 'replicate');

sharp_sobel = imfilter(double(I), sobel_x, 'replicate') + imfilter(double(I), sobel_y, 'replicate');

sharp_laplacian = imfilter(double(I), laplacian, 'replicate');

(6)自定义一个3x3的均值滤波器对图像进行滤波

custom_filter = ones(3, 3) / 9;

sharp_custom = imfilter(double(I), custom_filter,'replicate');

% 显示自定义滤波器结果

figure;imshow(mat2gray(sharp_custom));title('自定义滤波器滤波结果');

(7)对添加了高斯噪声的图像分别应用3种不同的边界填充方式(replicate、symmetric、circular)的3x3平均滤波器

K_gauss_replicate = imfilter(J_gauss, ave1, 'replicate');   

K_gauss_symmetric = imfilter(J_gauss, ave1, 'symmetric');

K_gauss_circular = imfilter(J_gauss, ave1, 'circular');

四.思考题

1. 简述高斯噪声和椒盐噪声的特点。

答:(1)高斯噪声(Gaussian Noise):

高斯噪声是一种概率密度函数服从高斯分布(即正态分布)的噪声。在时域和频域中,高斯噪声都有均匀的分布特性。高斯噪声在图像上表现为像素值随机波动,但波动范围通常较小,且在整个图像上分布较为均匀。

(2)椒盐噪声(Salt and Pepper Noise):

椒盐噪声也称为脉冲噪声,它随机改变一些像素值。椒盐噪声由两种噪声组成,一种是盐噪声(salt noise),即图像中随机出现的白色点;另一种是椒噪声(pepper noise),即图像中随机出现的黑色点。椒盐噪声通常是由图像传感器、传输信道或解码处理等过程中产生的错误或损坏引起的。在视觉上,椒盐噪声表现为图像上的黑白亮点,这些点随机分布在图像中,可能破坏图像的细节信息。

2. 结合实验内容,定性评价平均滤波器/中值滤波器对高斯噪声和椒盐噪声的去噪效果?

答:(1)平均滤波器对高斯噪声的去噪效果评价:

平均滤波器的基本原理是对图像中每个像素周围的邻域进行均值计算,对于轻度的高斯噪声,平均滤波器可以有效地模糊图像并减少噪声。然而,对于较强的高斯噪声,平均滤波器可能导致图像细节的丢失和模糊。

(2)中值滤波器对高斯噪声的去噪效果评价:

中值滤波器采用每个像素周围邻域的中值来替代像素值,这使得它对高斯噪声有很好的去噪效果,中值滤波器能够在保留图像边缘和细节的同时有效地去除高斯噪声。它对于不同尺度和强度的高斯噪声都能提供相对较好的去噪效果。

(3)平均滤波器对椒盐噪声的去噪效果评价:

平均滤波器在处理椒盐噪声时表现一般。由于椒盐噪声将一些像素值替换为最大或最小值,平均滤波器导致图像中出现模糊和残留的噪点。

(4)中值滤波器对椒盐噪声的去噪效果评价:

中值滤波器对椒盐噪声有较好的去噪效果。通过取邻域中像素的中值,中值滤波器可以有效地去除椒盐噪声,而不会对图像边缘和细节产生明显的影响。

3. 结合实验内容,定性评价滤波窗口对去噪效果的影响?

        对于平均滤波器和中值滤波器,滤波窗口的大小会直接影响去噪效果。较小的滤波窗口适用于轻度噪声和保留图像细节,但可能不能完全去除强烈的噪声。较大的滤波窗口能够更有效地去除强烈的噪声,但可能会导致图像模糊和细节丢失。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MSPM0G3507——编码器控制速度

绿色设置的为目标值100,红色为编码器实际数据 。 最后也是两者合在了一起,PID调试成功。 源码直接分享,用的是CCStheia,KEIL打不开。大家可以看一下源码的思路,PID部分几乎不用改 链接:https://pan.baid…

微信公众平台测试账号本地微信功能测试说明

使用场景 在本地测试微信登录功能时,因为微信需要可以互联网访问的域名接口,所以本地使用花生壳做内网穿透,将前端服务的端口和后端服务端口进行绑定,获得花生壳提供的两个外网域名。 微信测试账号入口 绑定回调接口 回调接口的…

C++左值右值

在C中,左值(lvalue)和右值(rvalue)是表达式分类的关键概念,它们主要影响表达式的赋值、函数调用以及操作符的使用方式。这些概念在C11及以后的版本中变得更加重要,因为引入了移动语义和右值引用…

字符串和正则表达式踩坑

// 中石化加油卡号格式:以 100011 开头共19位public static final String ZHONGSHIYOU_OIL_CARD_PATTERN "^100011\\d{13}$";// 中石油加油卡号格式:以90、95、70开头共16位public static final String ZHONGYOU_OIL_CARD_PATTERN "^(9…

按键控制LED流水灯模式定时器时钟

目录 1.定时器 2. STC89C52定时器资源 3.定时器框图 4. 定时器工作模式 5.中断系统 1)介绍 2)流程图:​编辑 3)STC89C52中断资源 4)定时器和中断系统 5)定时器的相关寄存器 6.按键控制LED流水灯模…

去O化神器 Exbase

随着去O化进程推动,很多旧业务依赖的oracle数据库,都需要实现做数据库的替换,当下能很好兼容Oracle,并实现异构数据库之间转换的工具并不多。这里给大家推荐一个商业工具数据库迁移工具exbase(北京海量)&am…

谷粒商城学习笔记-17-快速开发-逆向工程搭建使用

文章目录 一,克隆人人开源的逆向工程代码二,把逆向工程集成到谷粒商城的后台工程三,以商品服务为例,使用逆向工程生成代码1,修改逆向工程的配置2,以Debug模式启动逆向工程3,使用逆向工程生成代码…

通信协议_C#实现自定义ModbusRTU主站

背景知识:modbus协议介绍 相关工具 mbslave:充当从站。虚拟串口工具:虚拟出一对串口。VS2022。 实现过程以及Demo 打开虚拟串口工具: 打开mbslave: 此处从站连接COM1口。 Demo实现 创建DLL库,创建ModbusRTU类,进行实现: using Syste…

OpenAI的崛起:从梦想到现实

OpenAI的崛起不仅是人工智能领域的重大事件,也是科技史上一个引人注目的篇章。本文将深入探讨OpenAI从创立到如今的演变过程,分析其成功的关键因素,以及未来的发展方向。 一、OpenAI的初创期:理想主义与混乱并存 OpenAI成立于20…

【74CH160组成60进制0-59】2021-11-22

缘由60进制计数 到达60后显示ff-嵌入式-CSDN问答 缘由《数电》用两片74160接成29进制计数器应该怎么接呢?-嵌入式-CSDN问答

解决数据库PGSQL,在Mybatis中创建临时表报错TODO IDENTIFIER,连接池用的Druid。更换最新版本Druid仍然报错解决

Druid版本1.1.9报错Caused by: java.sql.SQLException: sql injection violation, syntax error: TODO IDENTIFIER : CREATE TEMPORARY TABLE temp_ball_classify (id int8 NOT NULL,create_time TIMESTAMP,create_by VARCHAR,classify_name VARCHAR) 代码如下: 测…

【数据结构与算法】快速排序双指针法

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ​

STM32实战项目:从零打造GPS蓝牙自行车码表,掌握传感器、蓝牙、Flash存储等核心技术

一、 引言 骑行,作为一项绿色健康的运动方式,越来越受到人们的喜爱。而记录骑行数据,分析速度、里程等信息,则成为了许多骑行爱好者的追求。本篇文章将带你使用STM32单片机,DIY一款功能完备的自行车码表,记…

【开放集目标检测】Grounding DINO

一、引言 论文: Grounding DINO: Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection 作者: IDEA 代码: Grounding DINO 注意: 该算法是在Swin Transformer、Deformable DETR、DINO基础上…

【LeetCode】有效的数独

目录 一、题目二、解法 一、题目 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&…

代码随想录算法训练营第二十七天 |56. 合并区间 738.单调递增的数字 968.监控二叉树 (可跳过)

56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:in…

赤壁之战的烽火台 - 观察者模式

“当烽火连三月,家书抵万金;设计模式得其法,千军如一心。” 在波澜壮阔的三国历史长河中,赤壁之战无疑是一场改变乾坤的重要战役。而在这场战役中,一个看似简单却至关重要的系统发挥了巨大作用——烽火台。这个古老的…

探索InitializingBean:Spring框架中的隐藏宝藏

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL》 💪🏻 制定明确可量化的目标,坚持默默的做事。 ✨欢迎加入探索MYSQL索引数据结构之旅✨ 👋 Spring框架的浩瀚海洋中&#x…

Javascript常见数据结构和设计模式

在JavaScript中,常见的数据结构包括两大类:原始数据类型(Primitive Types)和对象类型(Object Types)。对象类型又可以进一步细分为多种内置对象、数组、函数等。下面是一些JavaScript中常见的数据结构&…

《算法笔记》总结No.4——散列

散列的英文名是hash,即我们常说的哈希~该知识点在王道408考研的教材里面属于查找的范围。即便各位并无深入了解过,也听说过散列是一种更高效的查找方法。 一.引例 先来考虑如下一个假设:设有数组M和N分别如下: M[10][1,2,3,4,5,6…