0
点赞
收藏
分享

微信扫一扫

图像处理之非线性滤波1

1 概述

非线性滤波有中值滤波、双边滤波等。正如我们在上节中讲到的,线性滤波可以实现很多种不同的图像变换。而非线性滤波,如中值滤波器和双边滤波器,有时可以达到更好的实现效果。

在上节中,我们所考虑的滤波器都是线性的,即两个信号之和的响应和它们各自响应之和相等。换句话说,每个像素的输出值是一些输入像素的加权和。线性滤波器易于构造,并且易于从频率响应角度来进行分析。

然而,在很多情况下,使用邻域像素的非线性滤波会得到更好的效果。比如在噪声是散粒噪声而不是高斯噪声,即图像偶尔会出现很大的值的时候,用高斯滤波器对图像进行模糊的话,噪声像素是不会被去除的,它们只是转换为更为柔和但仍然可见的散粒。这就到了中值滤波登场的时候了。

2 中值滤波

中值滤波(Median filter)是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像的边缘细节。

中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,其基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。这对于斑点噪声(speckle noise)和椒盐噪声(salt-and-pepper noise)来说尤其有用,因为它 不依赖于邻域内那些与典型值差别很大的值。中值滤波器在处理连续图像窗函数时与线性滤波器的工作方式类似,但滤波过程却不再是加权运算。

中值滤波在一定的条件下可以克服常见线性滤波器,如最小均方滤波、方框滤波器、均值滤波等带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声非常有效,也常用于保护边缘信息。保存边缘的特性使它在不希望出现边缘模糊的场合也很有用,是非常经典的平滑噪声处理方法。

  • 中值滤波与均值滤波器比较

优势:在均值滤波器中,由于噪声成分被放入平均计算中,所以输出受到了噪声的影响。但是在中值滤波器中,由于噪声成分很难选上,所以几乎不会影响到输出。因此同样用3x3区域进行处理,中值滤波消除的噪声能力更胜一筹。中值滤波无论是在消除噪声还是保存边缘方面都是一个不错的方法。

劣势:中值滤波花费的时间是均值滤波的5倍以上。

顾名思义,中值滤波选择每个像素的邻域像素中的中值作为输出,或者说中值滤波将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

例如,取3x3的函数窗,计算以点[i.j]为中心的函数窗像素中值,具体步骤如下。

(1)按强度值大小排列像素点。

(2)选择排序像素集的中间值作为点[i.j]的新值。

一般采用奇数点的邻域来计算中值,但像素点数为偶数时,中值就取排序像素中间两点的平均值。采用大小不同邻域的中值滤波器的结果如下图所示。

3 示例

代码:

//-----------------------------------【头文件包含部分】---------------------------------------
// 描述:包含程序所依赖的头文件
//------------------------------------------------------------------------------------------
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

//-----------------------------------【命名空间声明部分】---------------------------------------
// 描述:包含程序所使用的命名空间
//--------------------------------------------------------------------------------------------
using namespace cv;

//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//---------------------------------------------------------------------------------------------
int main( )
{
// 载入原图
Mat image=imread("1.jpg");

//创建窗口
namedWindow( "中值滤波【原图】" );
namedWindow( "中值滤波【效果图】");

//显示原图
imshow( "中值滤波【原图】", image );

//进行中值滤波操作
Mat out;
medianBlur ( image, out, 7);

//显示效果图
imshow( "中值滤波【效果图】" ,out );

waitKey( 0 );
}

原图

图像处理之非线性滤波1_中值滤波

效果图

图像处理之非线性滤波1_中值滤波_02

中值滤波在一定条件下,可以克服线性滤波器(如均值滤波等)所带来的图像细节模糊,对滤除脉冲干扰即图像扫描噪声最为有效,而且在实际运算过程中并不需要图像的统计特性,也给计算带来不少方便。但是对一些细节(特别是细、尖顶等)多的图像不太适合。

举报

相关推荐

MATLAB---非线性复扩散滤波

0 条评论