opencv#31 非线性滤波——中值滤波

中值滤波原理

中值滤波原理与均值滤波相似。在滤波器的范围内,将滤波器所覆盖的图像的像素,进行排序后,选取序列中中间位置的数值作为滤波后的结果,此过程不含任何线性操作,所以称为非线性滤波,对图像中数据进行排序可以很好的移除掉某些区域中突然出现的较大值。例如在下图中3*3的区域内,即使存在着椒盐滤波255,排序后选取中位数可以有效的筛除最大值。即使有两个最大值,也不会出现远大于或远偏离于期望中的数值。所以中值滤波可以很好的滤除突然出现的较大值,也就是我们的椒盐噪声。

中值滤波步骤

Step1:滤波器内像素排序。

Step2:寻找中位数。

Step3:替换像素。

中值滤波函数

medianBlur()

由于中值滤波是一个非线性滤波,因此没有滤波模板,如果想用图像进行中值滤波,必须使用此函数。否则就需要对每一个像素进行操作,比较,排序,最后得到一个顺序选取中间的值,这个过程比线性滤波可以通过卷积来实现复杂很多。

cpp 复制代码
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...。

示例
cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv; //opencv的命名空间
using namespace std;


//主函数
int main()
{
	Mat img = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/lena3Salt.png");//读取含有椒盐噪声的彩色图像
	Mat gray = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/equalLena_S.png");//读取含有椒盐噪声的灰度图像
	Mat gray_g = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/equalLena_G.png");//读取含有高斯噪声的灰度图像

	Mat imgResult3, imgResult9, grayResult3, grayResult9, gray_gResult3, gray_gResult9;//用于存放中值滤波结果

	medianBlur(img, imgResult3, 3);
	medianBlur(gray, grayResult3, 3);
	medianBlur(gray_g, gray_gResult3, 3);

	medianBlur(img, imgResult9, 9);
	medianBlur(gray, grayResult9, 9);
	medianBlur(gray_g, gray_gResult9, 9);

	imshow("imgResult3", imgResult3);
	imshow("grayResult3", grayResult3);
	imshow("gray_gResult3", gray_gResult3);

	imshow("imgResult9", imgResult9);
	imshow("grayResult9", grayResult9);
	imshow("gray_gResult9", gray_gResult9);

	waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出

	return 0;

}

运行程序后可以发现,滤波后,含有椒盐噪声的彩色图像已经去除椒盐噪声了,当尺寸扩大后,图像会模糊。灰度图像中的椒盐噪声也很好去除,尺寸较大时也产生模糊效果,对于高斯噪声,进行中值滤波后还是含有高斯噪声,中值滤波没有办法很好的处理高斯噪声,即使中值滤波尺寸扩大,还是有噪声的存在。

相关推荐
信马堂1 小时前
WorkBuddy 接入第三方模型 API 全流程:安装与配置实录
人工智能·大模型·token·ai算力·workbuddy
朝朝辞暮i2 小时前
VLA 系统学习第 4 课:一个 Batch 进入神经网络后,模型到底是怎么“学会”的?
人工智能·python·神经网络·vla
IT古董2 小时前
《FDE前沿部署工程师实战教程》33 - Enterprise AI Observability:从Agent Trace到全链路智能运维
数据库·人工智能
xsd202411182 小时前
地网腐蚀AI识别算法全解析:从锈蚀图像到地下腐蚀快速定位
人工智能
oooost2 小时前
pytorch学习笔记2(transformer)
人工智能·机器学习
云杂项3 小时前
Exploring Model Inversion Attacks in the Black-box Setting(个人笔记)
人工智能
还卿一钵无情泪3 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
冬奇Lab4 小时前
LLM 驱动的自动化测试系列(06):移动端自动化(二)——DroidRun/Mobilerun 的角色级模型拆分
人工智能·测试
冬奇Lab4 小时前
一天一个开源项目(第230篇):HandRaw-Style —— 把 327 种手绘风格、165 种排版、36 种配色编号化,让 AI 画图不再每次都飘
人工智能·开源·资讯
罗西的思考4 小时前
从陶哲轩的访谈看:AI 数学研究方法论 & 给其它行业的启示
人工智能