实验三:图像的平滑滤波
目录
一、实验目的
二、实验原理
1. 空域平滑滤波
2. 椒盐噪声的处理
三、实验内容
四、源程序和结果
(1) 主程序(matlab)
(2) 函数GrayscaleFilter
(3) 函数MeanKernel
(4) 函数MedFilter
五、结果分析
1. 空域平滑滤波
2. 椒盐噪声的处理
一、实验目的
- 熟练掌握空域平滑滤波的原理、方法及其MATLAB实现。
- 分析模板大小对空域平滑滤波的影响,线性和非线性方法对空域平滑滤波增强效果的影响,比较不同滤波器的处理效果,分析其优缺点。
二、实验原理
1. 空域平滑滤波
空域平滑滤波是一种基本的图像处理技术,旨在降低图像中的噪声并模糊图像细节。其原理是基于图像中像素值的局部平均化或加权平均化来实现。
具体来说,平滑滤波器在图像上滑动,对每个像素周围邻域内的像素进行平均操作。这通常涉及将滤波器覆盖的像素值进行加权平均,得到一个新的像素值来代替原始像素值。平均操作有助于消除高频噪声,并使图像变得更加平滑。
在该实验中,用到的平滑滤波器为均值滤波器。
均值滤波器是一种常见的空域平滑滤波器,用于图像处理中的噪声抑制和平滑处理。其原理是在图像中滑动一个固定大小的滤波窗口,对窗口中的像素值进行平均操作,用平均值替代中心像素的值,适用于去除轻度噪声和平滑图像。
一般来说,对同一幅图像进行均值滤波器处理,尺寸越大的均值滤波器处理后的图像越模糊,设置分辨不出图像内容。但是,对于包含大量噪声或细节的图像,均值滤波器可能会导致图像过度模糊,因为它平均化了整个邻域内的像素。
2. 椒盐噪声的处理
对于包含大量噪声或细节的图像,比如含有“椒盐噪声”的图像,往往会采用中值滤波器。中值滤波器是一种非线性滤波器,在图像处理中常用于去除椒盐噪声或斑点噪声。与均值滤波器不同,中值滤波器不是对图像像素进行加权平均,而是将图像区域内像素值排序后选取中间值(中值)作为当前像素的新值。
虽然中值滤波器在处理去除椒盐噪声上有优势,但是,中值滤波器的处理速度较慢,特别是在处理大尺寸窗口或高分辨率图像时。另外,对于高斯噪声等连续性噪声,中值滤波器的去噪效果可能不如均值滤波器等线性滤波器。
三、实验内容
- 选择一幅图像,分别选择两种尺寸的算术平均模板进行均值滤波模糊处理,并对不同尺寸的滤波器模板操作后的图像进行比较。
- 选择一幅图像,对图像加入椒盐噪声,检验两种滤波模板(3×3平均模板和3×3中值滤波器)对噪声的滤波效果。
四、源程序和结果
(1) 主程序(matlab)
clear;close;% 读取彩色图片
img = imread('lena.jpg');
grayscale = rgb2gray(img); % 读取灰度图% 显示原始图片
subplot(2, 2, 1);
imshow(grayscale);
title('原始图片');% 1) 分别选择 3×3,7×7,25×25 等平均模板进行均值滤波
filter_sizes = [3, 7, 25];
for i = 1:numel(filter_sizes)filter_size = MeanKernel(filter_sizes(i));filtered_grayscale = GrayscaleFilter(grayscale, filter_size);% 显示滤波后的图片subplot(2, 2, i+1);imshow(filtered_grayscale);title(['均值滤波 ',num2str(filter_sizes(i)), 'x', num2str(filter_sizes(i))]);
end% 2) 对图像加入椒盐噪声
noisy_grayscale = imnoise(grayscale, 'salt & pepper', 0.1);% 显示加入噪声的图片
figure;
subplot(2, 2, 1);
imshow(grayscale);
title('原始图片');% 显示加入噪声的图片
subplot(2, 2, 2);
imshow(noisy_grayscale);
title('添加椒盐噪声');% 使用3x3平均模板进行滤波
avg_filtered_grayscale = GrayscaleFilter(noisy_grayscale, MeanKernel(3));
subplot(2, 2, 3);
imshow(avg_filtered_grayscale);
title('图像 3x3 均值滤波');% 使用3x3中值滤波器进行滤波
med_filtered_grayscale = MedFilter(grayscale);subplot(2, 2, 4);
imshow(med_filtered_grayscale);
title('图像 3x3 中值滤波');
(2) 函数GrayscaleFilter
% 功能:输入灰度图和滤波核,输出滤波图像
function filtered_image = GrayscaleFilter(gray_image, filter_kernel)% 读取行列值[rows, cols] = size(gray_image);[krows, kcols] = size(filter_kernel);% 计算边界填充(零填充)pad_rows = floor(krows/2);pad_cols = floor(kcols/2);padded_image = zeros(rows + 2*pad_rows, cols + 2*pad_cols);padded_image(pad_rows+1:end-pad_rows, pad_cols+1:end-pad_cols) = gray_image;% 对图像进行滤波filtered_image = zeros(rows, cols);for i = 1:rowsfor j = 1:colspatch = padded_image(i:i+krows-1, j:j+kcols-1);filtered_image(i, j) = sum(patch(:) .* filter_kernel(:)); % 卷积运算endend% 还原到0~255的灰度像素范围filtered_image = uint8(filtered_image);
end
(3) 函数MeanKernel
function mean_filter = MeanKernel(x)% 定义均值滤波器mean_filter = 1/(x*x) * ones(x, x);
end
(4) 函数MedFilter
% 功能:3*3中值滤波器滤波
function filtered_image = MedFilter(gray_image)
[m, n] = size(gray_image);
filtered_image = gray_image;
for i = 2:m-1for j = 2:n-1% 获取3x3邻域内的像素值neighborhood = gray_image(i-1:i+1, j-1:j+1);% 计算邻域内像素值的中值作为当前像素值filtered_image(i, j) = median(neighborhood(:));end
end
五、结果分析
1. 空域平滑滤波
如图一所示,均值滤波器滤波后的图像会变模糊,且会滤波核的大小的增大而变得更模糊。
图一 均值滤波
2. 椒盐噪声的处理
如图二所示,布满椒盐噪声的图片整幅图像充满了黑白点。对于这类噪声的处理,使用均值滤波器滤波后的图像,得益于均值滤波器的模糊效果,黑白点确实没那么明显突出了,但是效果还是不尽人意,一方面噪声又没完全剔除,另一方面原本图像的细节也被模糊了。而观察中值滤波后的图像,可以惊讶的发现,滤波后的图像基本上和原图一样,看不出什么差别出来。由此空间,中值滤波器对椒盐噪声的剔除有奇效,十分适合这种场景。
图二 椒盐噪声处理
相关文章:

实验三:图像的平滑滤波
目录 一、实验目的 二、实验原理 1. 空域平滑滤波 2. 椒盐噪声的处理 三、实验内容 四、源程序和结果 (1) 主程序(matlab) (2) 函数GrayscaleFilter (3) 函数MeanKernel (4) 函数MedFilter 五、结果分析 1. 空域平滑滤波 2. 椒盐噪声的处理…...

VUE前端HTML静默打印(不弹出打印对话框)PDF简单方案
前言 在做打印功能的时候,以前大部分客户端都是用C#做的,静默打印(也就是不弹出打印对话框)比较简单。 但是使用浏览器作为客户端,静默打印(也就是不弹出打印对话框)做起来就比较困难。困难的…...

大数据hive表和iceberg表格式
iceberg: https://iceberg.apache.org/ iceberg表,是一种面向大型分析数据集的开放表格式,旨在提供可扩展、高效、安全的数据存储和查询解决方案。它支持多种存储后端上的数据操作,并提供 ACID 事务、多版本控制和模式演化等特性,…...

flutter 手写 TabBar
前言: 这几天在使用 flutter TabBar 的时候 我们的设计给我提了一个需求: 如下 Tabbar 第一个元素 左对齐,试了下TabBar 的配置,无法实现这个需求,他的 配置是针对所有元素的。而且 这个 TabBar 下面的 滑块在移动的时…...

一个引发openssl崩溃问题案例
1 背景 最近用libevent写了一个https代理功能,在调研的时候,遇到了一个项目用到了本地多个openssl库引发的ssl握手崩溃问题。 2 开发环境 项目库版本号依赖项libeventlibevent-2.1.8-stableopenssl 1.1openssl1.0u / 1.1.1w / 3.3.1...... 3 问题现象…...

如何申请抖音本地生活服务商?3种方式优劣势分析!
随着多家互联网大厂在本地生活板块的布局力度不断加大,以抖音为代表的头部互联网平台的本地生活服务商成为了创业赛道中的大热门,与抖音本地生活服务商怎么申请等相关的帖子,更是多次登顶创业者社群的话题榜单。 就目前的市场情况来看&#x…...

【项目-轻量级Web Server lock类】
信号同步机制封装 Lock类信号量——sem类初始化信号量sem_init()销毁信号量sem_destory()对信号量进行P操作sem_wait()对信号进行V操作sem_post() 互斥锁——locker类初始化互斥量pthread_mutex_init()销毁互斥量pthread_mutex_destroy()给互斥锁加锁pthread_mutex_lock()解锁互…...

数据分析_计划
我做大数据的有6年了,以前都是用sql,或者spark,java,scala,python去做。现在这些平台搭建、维护、大多数都是搭建一次就完了,而且维护大多是大厂直接用云平台去做。ETL也是就做一次就够了,我们公…...

LDAPWordlistHarvester:基于LDAP数据的字典生成工具
关于LDAPWordlistHarvester LDAPWordlistHarvester是一款功能强大的字典列表生成工具,该工具可以根据LDAP中的详细信息生成字典列表文件,广大研究人员随后可以利用生成的字典文件测试目标域账号的非随机密码安全性。 工具特征 1、支持根据LDAP中的详细信…...

dhtmlx-gantt甘特图数据展示
官网文档:甘特图文档 实现效果: 首先需要下载 dhtmlx-gantt组件 npm i dhtmlx-gantt //我项目中使用的是"dhtmlx-gantt": "^8.0.6" 这个版本,不同的版本api或是文档中存在的方法稍有差异 界面引用 <template>&l…...

《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸
当攻击者获得一个容器环境的shell权限时,攻击者往往会尝试进行容器逃逸,利用容器环境中的错误配置或是漏洞问题,从容器成功逃逸到宿主机,从而获取到更高的访问权限。 在本节课程中,我们将详细介绍一些常见的容器逃逸方…...

初学者指南:如何搭建和配置 Nginx 服务器
初学者指南:如何搭建和配置 Nginx 服务器 Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。本文将详细介绍如何在 Linux 上安装、配置和管理 Nginx 服务器。 一、安装 Nginx Nginx 可以安装在多种操作系统上&#x…...

[AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
目录 背景描述 用浏览器访问,正常返回 编辑 AHK v2官方示例源代码 AHK v2运行结果报错(0x80092004) 找不到对象或属性 用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性 附: 用Apifox访问,也正常返回 AHK v1 …...

`speech_recognition` 是一个流行的库
在Python中,speech_recognition 是一个流行的库,用于从各种来源(如麦克风、文件等)进行语音识别。以下是您提到的技术名称和相应的Python代码示例。 技术名称 语音识别(Speech Recognition):这…...

MFC Ribbon菜单 - 中英文实时切换方法
简介 最近在搞一个老外的项目,本来谈的好好的,纯英文界面。项目接近尾声了,又提出了中英文实时切换的新需求,没办法就只能想办法,毕竟客户最大嘛。 实现方法 还好本来的ribbon英文菜单不复杂,就用纯C编码…...

MFC程序创建word,创建表格,写入数据
文章目录 1、MFC程序功能:2、MFC程序实现2.1 创建项目2.2 添加word操作类2.3 添加word资源2.4 编写代码,实现将数据写入到word2.5 运行程序、验证功能3、工程代码下载 1、MFC程序功能: 创建word文档;向文档中写入字符串ÿ…...

FPGA:基于复旦微FMQL10S400 /FMQL20S400 国产化核心板
复旦微电子是国内集成电路设计行业的领军企业之一,早在2000年就在香港创业板上市,成为行业内首家上市公司。公司的RFID芯片、智能卡芯片、EEPROM、智能电表MCU等多种产品在市场上的占有率位居行业前列。 今天介绍的是搭载复旦微 FMQL10S400/FMQL20S400的…...

centos下使用yum安装keepalived工具
1、安装如下rpm包,不安装此包在装keepalived时会报错 mkdir keepalived_rpm cd keepalived_rpm/ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-community-libs-compat-8.0.36-1.el7.x86_64.rpm 2、使用yum进行keepalived的安装 yum -y install keepal…...

无人机图像目标检测
本仓库是人工智能课程的课程作业仓库,主要是完成无人机图像目标检测的任务,我们对visdrone数据集进行了处理,在yolo和ssd两种框架下进行了训练和测试,并编写demo用于实时的无人机图像目标检测。 requirements依赖: ss…...

JSqlParser 解析 sql
目录 前言一、Maven依赖二、获取sql中的表名三、获取sql中的具体信息 前言 JSqlParser是一个 SQL 语句解析器。它将 SQL 语句转换为可遍历的 Java 类层次结构,可以方便的用代码对 SQL 语句进行解析,修改等操作。 官网 api 文档和 github 地址如下&…...

Vue中使用mind-map实现在线思维导图
概述 在前面的文章Vue中实现在线画流程图实现中介绍了流程图的在线绘制,在本文,给大家分享一下基于mind-map实现在线的思维导图,并实现:1. 导图导出为图片;2. 打开xmind文件。 实现效果 实现 1. mind-map简介 simp…...

ChatGPT 深度解析:技术驱动的智能对话
在当今科技飞速发展的时代,ChatGPT 无疑成为了最耀眼的明星之一。它以其令人惊叹的智能对话能力,引发了全球范围内的广泛关注和热议。 ChatGPT 背后的技术堪称精妙绝伦。它基于深度学习算法,通过对海量数据的学习和分析,从而能够理…...

Armv8-R内存模型详解
目录 1.内存模型的必要性 2.Armv8-R内存模型分类 2.1 Normal memory 2.2 Device Memory 2.2.1 Gathering 2.2.2 Reordering 2.2.3 Early Write Acknowledgement 3.小结 大家好,今天是悲伤的肌肉。 在调研区域控制器芯片时,发现了S32Z、Stellar …...

Python面经
文章目录 Python基本概念1. Python是**解释型**语言还是**编译型**语言2. Python是**面向对象**语言还是面向过程语言3. Python基本数据类型4.append和 extend区别5.del、pop和remove区别6. sort和sorted区别介绍一下Python 中的字符串编码is 和 的区别*arg 和**kwarg作用浅拷…...

海外ASO:iOS与谷歌优化的相同点和区别
海外ASO是针对iOS的App Store和谷歌的Google Play这两个主要海外应用商店进行的优化过程,两个不同的平台需要采取不同的优化策略,以下是对iOS优化和谷歌优化的详细解析: 一、iOS优化(App Store) 1、关键词覆盖 选择关…...

【C++题解】1168. 歌唱比赛评分
问题:1168. 歌唱比赛评分 类型:数组找数 题目描述: 四(1) 班要举行一次歌唱比赛,以选拔更好的苗子参加校的歌唱比赛。评分办法如下:设 N 个评委,打 N 个分数( 0≤每个分…...

鸿蒙开发工程师面试-架构篇
1. 假如让你负责鸿蒙App架构设计,你会关注哪些方面? 分层架构设计: 将应用划分为产品定制层、基础特性层和公共能力层,以降低层间依赖性,提升代码可维护性。通过分层架构设计,进一步明确每层的职责和层间交…...

【Redis】持久化
对于Redis中间件来说,一般是作为内存型数据库或者缓存出现的。但是由于其数据是在内存中,因此当Redis所在的主机宕机之后,数据就会消失,再次重启之后,没有任何数据。这对于生产环境来说,是属于P0级别的灾难…...

港股指数实时行情API接口
港股 指数 实时 行情 API接口 # Restful API https://tsanghi.com/api/fin/index/HKG/realtime?token{token}&ticker{ticker}指定指数代码,获取该指数的实时行情(开、高、低、收、量)。 更新周期:实时。 请求方式:…...

Qt5开发实战_图形_QPen
Qpen是Qt框架中的一个类,用于定义绘制线条的属性,包括颜色、宽度、样式、端点样式和连接样式。 具体属性(设置颜色和设置宽度直接pass从样式开始): 设置样式: pen的样式主要有以下几种: 分别是:直线样式…...