Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【从零学习OpenCV 4】中值滤波

【从零学习OpenCV 4】中值滤波

作者头像
小白学视觉
发布于 2019-12-31 07:19:28
发布于 2019-12-31 07:19:28
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

中值滤波就是用滤波器范围内所有像素值的中值来替代滤波器中心位置像素值的滤波方法,是一种基于排序统计理论的能够有效抑制噪声的非线性信号处理方法。中值滤波计算方式如图5-21所示,将滤波器范围内所有的像素值按照由小到大的顺序排列,选取排序序列的中值作为滤波器中心处黄色像素的新像素值,之后将滤波器移动到下一个位置,重复进行排序取中值的操作,直到将图像所有的像素点都被滤波器中心对应一遍。中值滤波不依赖于滤波器内那些与典型值差别很大的值,因此对斑点噪声和椒盐噪声的处理具有较好的处理效果。

相比于均值滤波,中值滤波对于脉冲干扰信号和图像扫描噪声的处理效果更佳,同时在一定条件下中值滤波对图像的边缘信息保护效果更佳,可以避免图像细节的模糊,但是当中值滤波尺寸变大之后同样会产生图像模糊的效果。在处理时间上,中值滤波所消耗的时间要远大于均值滤波消耗的时间。

图5-21 中值滤波计算过程示意图

OpenCV 4提供了对图像进行中值滤波操作的medianBlur()函数,该函数的函数原型在代码清单5-18中给出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码清单5-18 medianBlur()函数原型
void cv::medianBlur(InputArray 	src,
                      OutputArray  dst,
                      int  ksize 
                      )
  • src:待中值滤波的图像,可以是单通道,三通道和四通道,数据类型与滤波器的尺寸相关,当滤波器尺寸为3或5时,图像可以是CV_8U,CV_16U或CV_32F类型,对于较大尺寸的滤波器,数据类型只能是CV_8U。
  • dst:输出图像,与输入图像src具有相同的尺寸和数据类型。
  • ksize:滤波器尺寸,必须是大于1的奇数,例如:3、5、7……

该函数只能处理符合图像信息的Mat类数据,2通道或者更多通道的Mat类矩阵不能被该函数处理,并且对于图像数据类型的要求也和滤波器的尺寸有着密切的关系。函数第一个参数是待中值滤波的图像,可以是单通道,三通道和四通道,数据类型与滤波器的尺寸相关。当滤波器尺寸为3或5时,图像可以是CV_8U,CV_16U或CV_32F类型,对于较大尺寸的滤波器,数据类型只能是CV_8U。第二个参数是输出图像,输出图像的尺寸和数据类型与输入图像相同。最后一个参数是滤波其的尺寸,区别于之前的线性滤波,中值滤波的滤波器必须是正方形且尺寸为大于1的奇数。该函数对于多通道的彩色图像是针对每个通道的内部数据进行中值滤波操作。

为了了解中值滤波函数medianBlur()的使用方法,在代码清单5-19中给出了对含有椒盐噪声的灰度图像和彩色图像进行中值滤波的示例程序,程序中分别用3×3和9×9的滤波器对图像进行中值滤波,程序的运行结果在图5-22、图5-23给出,通过结果可以看出,9×9的中值滤波同样会对整个图像造成模糊的现象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  代码清单5-19 myMedianBlur.cpp中值滤波
#include <opencv2\opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	Mat gray = imread("equalLena_salt.png", IMREAD_ANYCOLOR);
	Mat img = imread("lena_salt.png", IMREAD_ANYCOLOR);
	if (gray.empty() || img.empty())
	{
		cout << "请确认图像文件名称是否正确" << endl;
		return -1;
	}
	Mat imgResult3, grayResult3, imgResult9, grayResult9;
	//分别对含有椒盐噪声的彩色和灰度图像进行滤波,滤波模板为3×3
	medianBlur(img, imgResult3, 3);
	medianBlur(gray, grayResult3, 3);
	//加大滤波模板,图像滤波结果会变模糊
	medianBlur(img, imgResult9, 9);
	medianBlur(gray, grayResult9, 9);
	//显示滤波处理结果
	imshow("img", img);
	imshow("gray", gray);
	imshow("imgResult3", imgResult3);
	imshow("grayResult3", grayResult3);
	imshow("imgResult9", imgResult9);
	imshow("grayResult9", grayResult9);
	waitKey(0);
	return 0;
}

图5-21 中值滤波计算过程示意图

图5-21 中值滤波计算过程示意图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【从零学习OpenCV 4】均值滤波
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/12/25
7200
基于FPGA的中值滤波算法的实现
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
FPGA开源工作室
2019/10/29
1.2K0
基于FPGA的中值滤波算法的实现
实战 | 用OpenCV实现开关中值滤波去除周期性线状噪声(步骤 + 源码)
本文主要介绍如何用OpenCV实现开关中值滤波去除周期性线状噪声的实例,包含实现步骤和源码。
Color Space
2023/08/18
5450
实战 | 用OpenCV实现开关中值滤波去除周期性线状噪声(步骤 + 源码)
【从零学习OpenCV 4】高斯滤波
高斯噪声是一种常见的噪声,图像采集的众多过程中都容易引入高斯噪声,因此针对高斯噪声的高斯滤波也广泛应用于图像去噪领域。高斯滤波器考虑了像素离滤波器中心距离的影响,以滤波器中心位置为高斯分布的均值,根据高斯分布公式和每个像素离中心位置的距离计算出滤波器内每个位置的数值,从而形成一个形如图5-15所示的高斯滤波器。之后将高斯滤波器与图像之间进行滤波操作,进而实现对图像的高斯滤波。
小白学视觉
2019/12/30
1.4K0
OpenCV之中值模糊
中值滤波本质上是统计排序滤波器的一种,中值滤波对图像特定噪声类型(椒盐噪声)会取得比较好的去噪效果,也是常
MachineLP
2021/07/20
2650
OpenCV之中值模糊
中值滤波
算法:中值滤波取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将这些像素值进行排序,然后将位于中间位置的像素值作为当前下像素点的像素值。中值滤波对极限像素额敏感度远不如像素平均值,克服了线性滤波器模糊图像细节的缺点,达到既消除中值滤波常用于保护图像边缘信息,对消除椒盐噪声非常有效,在光学测量条纹图像的相位分析处理中有特殊作用,但在条纹中心分析方法中作用不大。
裴来凡
2022/05/28
4500
中值滤波
手把手教你使用图像处理利器OpenCV
在本文中,将学习如何使用Python语言进行图像处理,我们不会局限于一个单独的库或框架,然而,有一个库的使用率将会是最高的,那就是OpenCV。我们一开始会讨论一些图像处理,然后继续探讨不同的应用/场景,也就是图像处理的用武之地。开始吧!
老齐
2020/05/15
1.4K0
手把手教你使用图像处理利器OpenCV
OpenCV中值滤波
在数字图像处理常见的变换核及其用途中,已经说明了线性滤波。线性滤波是算术运算,有固定的模板,即:变换核。
zy010101
2020/03/18
1.3K0
OpenCV中值滤波
图像滤波常用算法实现及原理解析
图像滤波是一种非常重要的图像处理技术,本文详细介绍了四种常见的图像滤波算法,并附上源码,包括自适应中值滤波、高斯滤波、双边滤波和导向滤波。
小白学视觉
2022/02/14
1.6K0
图像滤波常用算法实现及原理解析
OpenCV 入门教程:中值滤波和双边滤波
在图像处理和计算机视觉领域,中值滤波和双边滤波是两种常见的滤波方法,用于平滑图像、去除噪声等。 OpenCV 提供了中值滤波和双边滤波的实现函数,使得图像处理更加灵活和高效。本文将以中值滤波和双边滤波为中心,为你介绍使用 OpenCV 进行滤波操作的基本步骤和实例。
小蓝枣
2023/07/10
1.1K0
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
在当今数字化社会中,图像处理 和 计算机视觉 技术应用广泛,从日常的图像编辑、滤镜应用到专业的智能安防、自动驾驶等领域,这些技术无处不在。对于开发者来说,OpenCV 是一个功能强大的库,提供了各种图像处理和计算机视觉的工具,广泛用于 Python 开发中。
半截诗
2024/10/09
4K1
opencv学习笔记 模糊操作+代码(均值模糊,中值模糊,自定义模糊,锐化)
像该函数对领域点的灰度值进行权重相加最后设置灰度值,这样的操作又叫卷积,这样的滤波器叫线性滤波器。
用户2965768
2018/08/30
2.2K0
opencv学习笔记 模糊操作+代码(均值模糊,中值模糊,自定义模糊,锐化)
【从零学习OpenCV 4】Sobel算子
Sobel算子是通过离散微分方法求取图像边缘的边缘检测算子,其求取边缘的思想原理与我们前文介绍的思想一致,除此之外Sobel算子还结合了高斯平滑滤波的思想,将边缘检测滤波器尺寸由ksize * 1改进为ksize * ksize,提高了对平缓区域边缘的响应,相比前文的算法边缘检测效果更加明显。使用Sobel边缘检测算子提取图像边缘的过程大致可以分为以下三个步骤:
小白学视觉
2020/02/12
1K0
【从零学习OpenCV 4】Sobel算子
【从零学习OpenCV 4】边缘检测原理
图像的边缘指的是图像中像素灰度值突然发生变化的区域,如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数,那么图像的边缘对应在灰度值函数中是函数值突然变大的区域。函数值的变化趋势可以用函数的导数描述。当函数值突然变大时,导数也必然会变大,而函数值变化较为平缓区域,导数值也比较小,因此可以通过寻找导数值较大的区域去寻找函数中突然变化的区域,进而确定图像中的边缘位置。图5-27给出一张含有边缘的图像,图像每一行的像素灰度值变化可以用图中下方的曲线表示。
小白学视觉
2020/02/10
7810
组合滤波器
算法:组合滤波器是先对图片添加椒盐噪声,先采用中值滤波器进行去噪处理,然后采用巴特沃斯低通滤波和同态滤波混合滤波器进行图像处理。
裴来凡
2022/05/29
4280
组合滤波器
【OpenCV】Chapter7.图像噪声与滤波器
算术平均滤波器是最简单的均值滤波器,与空间域滤波中的盒式滤波器相同。 计算公式如下:
zstar
2022/09/26
1K0
【OpenCV】Chapter7.图像噪声与滤波器
基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
FPGA开源工作室
2019/10/29
7.3K0
基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比
opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波[通俗易懂]
方框滤波是所有滤波器中最简单的一种滤波方式。每一个输出像素的是内核邻域像素值的平均值得到。 通用的滤波kernel如下:
全栈程序员站长
2022/07/25
1.5K0
opencv 滤波 方框滤波 均值滤波 高斯滤波 中值滤波 双边滤波[通俗易懂]
空域噪声滤波器
算法:空域噪声滤波器是在待处理的图像中逐点地移动模板,滤波器在该点的响应通过事先定义的滤波器系数与滤波模板扫过区域的相应像素值的关系来计算。
裴来凡
2022/05/29
3980
空域噪声滤波器
【走进OpenCV】滤波代码原来这么写!(纠正版)
学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了【走进OpenCV】系列,主要帮助小伙伴了解如何调用OpenCV库,涉及到的知识点会做简单讲解。
小白学视觉
2019/10/24
4520
相关推荐
【从零学习OpenCV 4】均值滤波
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验