6.3中值滤波
创作时间:
作者:
@小白创作中心
6.3中值滤波
引用
CSDN
1.
https://m.blog.csdn.net/weixin_45794330/article/details/141905007
实验原理
中值滤波(Median Filtering)是一种非线性滤波技术,常用于图像处理中去除噪声,特别是在保留边缘的同时减少椒盐噪声(salt-and-pepper noise)。OpenCV中的cv::medianBlur函数可以实现中值滤波。
函数原型
void medianBlur( InputArray src, OutputArray dst, int ksize );
参数说明
- src:输入图像。
- dst:输出图像,与输入图像具有相同的大小和类型。
- ksize:卷积核大小,通常是一个奇数,如3、5、7等。
工作原理
中值滤波器的工作方式是通过一个窗口即卷积核(Kernel)(通常为奇数大小,比如3×3, 5×5等)在图像上滑动,对该像素点及其邻域内的窗口内的所有像素值进行排序,然后用中位数来代替窗口中心的像素值。这样做的好处是不会像简单的平均滤波那样模糊边缘,因为中值滤波能够有效地抑制孤立的噪声点,而对图像的整体结构影响较小。
优点
- 去噪能力强:特别适合去除椒盐噪声。
- 边缘保持:由于中值滤波是非线性滤波,它在平滑图像的同时能较好地保持图像的边缘。
不足
- 计算复杂度较高:相对于线性滤波器(如均值滤波或高斯滤波),中值滤波涉及排序操作,因此计算量较大。
- 不适合去除高斯噪声:对于高斯噪声,高斯滤波可能更为合适。
示例代码1
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char** argv)
{
if (argc != 2)
{
std::cout << "Usage: " << argv[0] << " <image_path>" << std::endl;
return -1;
}
// 读取图像
cv::Mat src = cv::imread(argv[1], cv::IMREAD_COLOR);
if (src.empty())
{
std::cout << "Error opening image" << std::endl;
return -1;
}
// 创建输出图像
cv::Mat dst;
// 定义卷积核大小
int kernelSize = 5; // 卷积核大小,必须是奇数
// 应用中值滤波
cv::medianBlur(src, dst, kernelSize);
// 显示结果
cv::namedWindow("Original Image", cv::WINDOW_NORMAL);
cv::imshow("Original Image", src);
cv::namedWindow("Median Blurred Image", cv::WINDOW_NORMAL);
cv::imshow("Median Blurred Image", dst);
cv::waitKey(0);
return 0;
}
代码解释
- 读取图像:使用cv::imread读取输入图像,并确保它是彩色图像。
- 创建输出图像:创建一个新的cv::Mat对象来存储模糊后的结果。
- 定义卷积核大小:定义一个奇数大小的卷积核,如5x5。
- 应用中值滤波:使用cv::medianBlur函数对图像进行中值滤波。
- 显示结果:使用cv::imshow函数显示原始图像和中值模糊后的图像,并等待用户按键退出。
运行结果1
核大小的选择
卷积核的大小(ksize)决定了滤波器的效果。较大的核可以产生更强烈的平滑效果,但可能会丢失更多的细节;较小的核则可以保留更多细节,但平滑效果较弱。通常情况下,ksize应该是一个奇数,以确保卷积核覆盖中心像素点。
总结
中值滤波是一种有效的图像去噪技术,尤其适用于去除椒盐噪声。通过使用cv::medianBlur函数,可以轻松地在OpenCV中实现中值滤波。选择合适的卷积核大小可以控制滤波器的效果,较大的核可以产生更强烈的平滑效果,但可能会丢失更多的细节;较小的核则可以保留更多细节,但平滑效果较弱。
示例代码2
// test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
//#pragma comment(lib, "opencv_world450d.lib") //引用引入库
using namespace cv;
int main()
{
// 载入原图
Mat image = imread("03.png");
//创建窗口
namedWindow("中值滤波【原图】",WINDOW_NORMAL);
namedWindow("中值滤波【效果图】", WINDOW_NORMAL);
//显示原图
imshow("中值滤波【原图】", image);
//进行中值滤波操作
Mat out;
medianBlur(image, out, 5);//输入,输出,7通道
//显示效果图
imshow("中值滤波【效果图】", out);
waitKey(0);
}
运行结果2
热门推荐
AI进军核武领域遇三大挑战,技术瓶颈制约军事应用
流行文化影响下的一代人
冬游神农架:三大路线详解,赏雪滑雪全攻略
“春捂秋冻”背后的科学秘密
深圳地铁22号线一期最新进展:桂花站配线段顺利封顶
做好5项监测,守护全家健康:家庭健康检查指南
脊神经损伤:治疗现状与未来展望
一文读懂搪瓷锅:特点、选购与使用全指南
宝可梦朱紫:6步教你获取全部三明治食谱
老南瓜花式吃法,解锁秋季美食新姿势
寒冬至,酱酒香:冬天里的酱酒暖身指南
中国游客海外消费大变局:从“购物狂”到“体验派”
琼瑶的爱情观:理想与现实的交织
拯救C盘大作战:快速找出并清理占用空间的文件
胃药成分大揭秘:吃对了吗?
脑鸣治疗指南:从专业治疗到生活饮食全方位建议
钦州旅游必去三地:两处名人故居加“海上大熊猫”观赏地
海棠病害怎么治?看完这些治理“难点”,栽植海棠“零失误”
四川资阳仁里村:数字游民社区助力乡村振兴,400人入驻带动村民就业
Windows需四步、Mac仅两步:查看Wi-Fi密码哪家强
macOS Sonoma 14查看已保存Wi-Fi密码的两种方法
项羽之死:一个军事天才的政治悲剧
从沟通到信任:专家详解异地恋维持之道
飞猪购票现价格差异,网友质疑大数据杀熟
2025春节高速免费通行:巧用免费时段避开拥堵高峰
重庆发布2025年春节高速免费通行方案,日均车流量或破200万
除夕起高速免费8天,三类旅游路线助你畅游春节
从电池到齿轮油:新能源汽车保养要点详解
正定古城有哪些神秘景点?十大探秘之处大揭秘,你探访过吗?
“果中圣品”柿子的养生功效与安全食用指南