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;

}

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

相关推荐
billhan201621 分钟前
RAG 从零到一:构建你的第一个检索增强生成系统
人工智能
billhan201626 分钟前
Function Calling:让大模型连接真实世界
人工智能
程序员飞哥37 分钟前
Block科技公司裁员四千人,竟然是因为 AI ?
人工智能·后端·程序员
大模型真好玩44 分钟前
大模型训练全流程实战指南工具篇(七)——EasyDataset文档处理流程
人工智能·langchain·deepseek
billhan20161 小时前
Embedding 与向量数据库:语义理解的基础设施
人工智能
OpenBayes贝式计算1 小时前
解决视频模型痛点,TurboDiffusion 高效视频扩散生成系统;Google Streetview 涵盖多个国家的街景图像数据集
人工智能·深度学习·机器学习
OpenBayes贝式计算1 小时前
OCR教程汇总丨DeepSeek/百度飞桨/华中科大等开源创新技术,实现OCR高精度、本地化部署
人工智能·深度学习·机器学习
我要改名叫嘟嘟2 小时前
年后上班三天之后,忽然想作的一次记录
人工智能·程序员
飞哥数智坊2 小时前
SWE-bench 退役:当 AI 评测沦为“刷题游戏”,我们还能信谁?
人工智能
爱可生开源社区3 小时前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba