实验三:图像的平滑滤波
目录
一、实验目的
二、实验原理
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 地址如下&…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...