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

一、实验目的

        了解图像平滑滤波器(均值滤波和中值滤波)和图像锐化算子(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×3L = filter2(ave2,J)/255;                 %均值滤波5×5M = 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×3L_gauss= filter2(ave2,J_gauss)/255;            %均值滤波5×5M_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;         3L_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.mzph.cn/pingmian/42605.shtml

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

相关文章

Netty学习(Netty入门)

概述 Netty是什么 Netty的地位 Netty的优势 HelloWorld public class HelloClient {public static void main(String[] args) throws InterruptedException {// 1. 启动类new Bootstrap()// 2. 添加 EventLoop.group(new NioEventLoopGroup())// 3. 选择客户端 channel 实现.…

如何恢复未保存的 Excel 文件

您是否曾经在处理 Excel 工作表时,电脑突然崩溃?您首先想到的是“进度保存了吗?”或“我是否按了 CtrlS 来保存文件?”这种压力是难以想象的,因为意外断电或电脑崩溃可能会让您所有的辛苦工作付诸东流。 无论对于学生…

前端技术(三)—— javasctipt 介绍:jQuery方法和点击事件介绍(补充)

6. 常用方法 ● addClass() 为jQuery对象添加一个或多个class <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

Educational Codeforces Round 167 (Rated for Div. 2)(A~C)题解

A. Catch the Coin 解题思路: 最终&#x1d465;一定会相等&#xff0c;我们考虑直接到下面接住他。 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000005 ll dp[N], w[N], v[N], h[N]; ll dis[1005][1005]; ll a, b, c, n, m, t; ll…

反编译kasada

继续研究反编译 这次的网站是 一个航司网站 他有 akamai和 kasada 两种防护 akamai 没啥好说的 结构分析 最开始有个长字符串 处理成 一个十几万的数组 通过 r.W[0] 走什么分支 还有数据的存取 M是一个98个函数组成的数组 代表不同的执行逻辑 这里给他转成了 switch case…

pygame 音乐粒子特效

代码 import pygame import numpy as np import pymunk from pymunk import Vec2d import random import librosa import pydub# 初始化pygame pygame.init()# 创建屏幕 screen pygame.display.set_mode((1920*2-10, 1080*2-10)) clock pygame.time.Clock()# 加载音乐文件 a…

RAID的实现

软RAID&#xff0c;在实际工作中使用较少&#xff0c;性能太次。 mdadm工具&#xff0c;主要在虚拟机上使用&#xff0c; 硬RAID 用一个单独的芯片&#xff0c;这个芯片的名字叫做RAID卡&#xff0c;数据在RAID中进行分散的时候&#xff0c;用的就是RAID卡。 模拟RAID-5工作…

麦蕊智数,,另外一个提供免费的股票数据API,可以通过其提供的接口获取实时和历史的股票数据。

麦蕊智数&#xff0c;&#xff0c;提供免费的股票数据API&#xff0c;可以通过其提供的接口获取实时和历史的股票数据。 API接口&#xff1a;http://api.mairui.club/hslt/new/您的licence 备用接口&#xff1a;http://api1.mairui.club/hslt/new/您的licence 请求频率&#x…

element-plus的文件上传组件el-upload

el-upload组件 支持多种风格&#xff0c;如文件列表&#xff0c;图片&#xff0c;图片卡片&#xff0c;支持多种事件&#xff0c;预览&#xff0c;删除&#xff0c;上传成功&#xff0c;上传中等钩子。 file-list&#xff1a;上传的文件集合&#xff0c;一定要用v-model:file-…

stm32按键检测+光敏+蜂鸣器

按键检测 按键注意消抖&#xff0c;机械按下和松开时均伴随有一连串的抖动&#xff0c;一般为5ms&#xff5e;10ms。可通过软件或硬件消抖。 void Key_Init() {//开启时钟,GPIOBRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//定义结构体变量GPIO_InitTypeDef GPIO_…

080、类与类之间的关系

类与类之间主要存在以下几种关系&#xff1a; 继承&#xff08;Inheritance&#xff09;&#xff1a; 继承是面向对象编程的一个基本特征&#xff0c;它允许我们定义一个类&#xff08;子类或派生类&#xff09;来继承另一个类&#xff08;父类或基类&#xff09;的属性和方法…

孟德尔随机化与痛风3

写在前面 检索检索&#xff0c;刚好发现一篇分区还挺高&#xff0c;但结果内容看上去还挺熟悉的文章&#xff0c;特记录一下。 文章 Exploring the mechanism underlying hyperuricemia using comprehensive research on multi-omics Sci Rep IF:3.8中科院分区:2区 综合性期…

刷题——重建二叉树

重建二叉树_牛客题霸_牛客网 TreeNode* reConstructBinaryTree(vector<int>& preOrder, vector<int>& vinOrder) {// write code hereint n preOrder.size();int m vinOrder.size();if(n 0 || m 0) return NULL;TreeNode* root new TreeNode(preOrde…

【排序算法】—— 快速排序

快速排序的原理是交换排序&#xff0c;其中qsort函数用的排序原理就是快速排序&#xff0c;它是一种效率较高的不稳定函数&#xff0c;时间复杂度为O(N*longN)&#xff0c;接下来就来学习一下快速排序。 一、快速排序思路 1.整体思路 以升序排序为例&#xff1a; (1)、首先随…

web缓存代理服务器

一、web缓存代理 web代理的工作机制 代理服务器是一个位于客户端和原始&#xff08;资源&#xff09;服务器之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理服务器发送一个请求&#xff0c;并指定目标原始服务器&#xff0c;然后代理服务器向原始…

启动外部EXE参数

QString rootDir1 QApplication::applicationDirPath(); QString filePathExe1 QString(“%1/run/xxx.exe”).arg(rootDir1); QString fileConfigPath1 QString(“%1/run/”).arg(rootDir1); std::string stdStr filePathExe1.toStdString(); LPCSTR lpcStr stdStr.c_str(…

xxxxxxx.jar中没有主清单属性

写了一个小的springboot demo&#xff0c;构建时由于没加构建的maven插件,导致使用java -jar命令运行时报错xxxxxxx.jar中没有主清单属性。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boo…

使用Spring Boot和HBase实现大数据存储

使用Spring Boot和HBase实现大数据存储 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 随着大数据技术的发展&#xff0c;处理和存储海量数据成为许…

2-27 基于matlab的一种混凝土骨料三维随机投放模型

基于matlab的一种混凝土骨料三维随机投放模型&#xff0c;为混凝土细观力学研究提供一种快捷的三维建模源代码。可设置骨料数量&#xff0c;边界距离、骨料大小等参数。程序已调通&#xff0c;可直接运行。 2-27 matlab 混凝土骨料三维随机投放模型 - 小红书 (xiaohongshu.com)…

CDNOW_master.txt数据分析实战

一、数据详情 该数据集是常见的销售数据集&#xff0c;数据展示的是美国1997后的商品销售数据。包含四个字段&#xff0c;分别是用户id,购买时间&#xff0c;销售量&#xff0c;与销售金额。 二、数据读取与数据清洗 导入必要的包 \s代表的许多空格作为分割&#xff0c;names重…