6.4OpenCV中值滤波

来源:互联网 发布:淘宝qps 编辑:程序博客网 时间:2024/06/07 14:34
无论是直接获取的灰度图像,还是由彩色图像转换得到的灰度图像,里面都有噪声的存在,噪声对图像质量有很大的影响。进行中值滤波不仅可以去除孤点噪声,而且可以保持图像的边缘特性,不会使图像产生显著的模糊,比较适合于实验中的人脸图像。

   中值滤波是一种非线性的信号处理方法,因此中值滤波器也就是一种非线性的滤波器。在一定条件下,其可以克服线性滤波器处理图像细节模糊的问题,而且它对滤除脉冲干扰和图像扫描噪声非常有效,但是,对点、线、尖顶等细节较多的图像,则会引起图像信息的丢失。中值滤波器最先被应用于一维信号的处理中,后来被人们引用到二维图像的处理中来。

   中值滤波的基本思想是,把局部区域的像素按灰度等级进行排序,取该领域中灰度的中值作为当前像素的灰度值。

   中值滤波的步骤为:

   1、将滤波模板(含有若干个点的滑动窗口)在图像中漫游,并将模板中心与图中某个像素位置重合;

   2、读取模板中各对应像素的灰度值;

   3、将这些灰度值从小到大排列;

   4、取这一列数据的中间数据,将其赋给对应模板中心位置的像素。如果窗口中有奇数个元素,中值取元素按灰度值大小排序后的中间元素灰度值。如果窗口中有偶数个元素,中值取元素按灰度值大小排序后,中间两个元素灰度的平均值。因为图像为二维信号,中值滤波的窗口形状和尺寸对滤波器效果影响很大,不同图像内容和不同应用要求往往选用不同的窗口形状和尺寸。

#include "opencv2/core/core.hpp"#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"#include <iostream>using namespace cv;void main() {// load image Mat image = imread("../salt.jpg");if (!image.data){printf("读取图片文件失败\n");exit(0);}//resize(image, image, Size(), 0.3, 0.3);imshow("salted image", image);//median filteMat resutl;medianBlur(image, resutl, 3);//display resultimshow("median filted image", resutl);waitKey();}
原图:

效果图:


原创粉丝点击