中值算法在图像处理中的应用
中值算法简介及原理
中值滤波法是一种非线性平滑技术,它将每一象素点的灰度值设置为该点某邻域窗口内的所有象素点灰度值的中值。
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个拎域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
图像中值算法步骤
在图像处理中,由于采集过程中受到各种噪声源影响,在图像上常常会出现一些孤立的像素点。这些像素点与相邻像素点有显著不同,干扰了图像采集效果。如不进行滤波,将对以后的图像区域分割、分析、处理带来影响。
线性滤波器能够较好的消除图像采集中噪声干扰问题。本设计采用了中值滤波方式,它有效地做到了噪声抑制,滤除了脉冲干扰和图像扫描噪声,同时避免了线性滤波器带来的图像细节模糊,并保留了边缘信息。
在图像处理中的中值定义为:一组数X1 ,X2,X3,……Xn(X1 ≤X2≤X3……≤Xn),把这n个数按值大小顺序排列如下:
Xi(n1)2,Xn1XX2nni(1)i()22n为奇数 n为偶数ymedX,X,X123y称为序列X1 ,X2, X3,……Xn,的中值。
用中值滤波进行图像去噪声处理需要以下几个步骤:设定滤波器模块大小,如取5×5模块;将模块在图像中漫游,并将模块中心与图像中某一像素位置重合;读取模块下个对应像素的灰度值;将这些灰度值从小到大排序;找出这些值
中中间一个作为中介值;将中介值赋给对应模板中心像素。这时就可以使周围像素的灰度值差趋于零,从而消除孤立噪声点。
利用IMAQ Vision可以将彩色图像进行中值滤波处理,方法为:从原始32位图像中,抽取红、绿、蓝三色调色板,IMAQ Vision中彩色图片R、G、B用一个32位整数表示。分别对RGB中,红、绿、蓝调色板(8位)进行中值滤波处理,衰减随机噪声的同时保证边界清楚,确保水果尺寸特征。处理后的RGB调色板再用相应位运算将原始图像进行转换,生成去除噪声的新的彩色图像。
程序实现
本例用C语言算法实现,具体程序如下,程序在VC6.0中调试通过。
function f = filter () a = imread (’pearb1 tif’) ; %掩模窗口为15x15 smax = 15 ; s = size (a) ; c = a ;
Processed = zeros ( s (1 , 1) , s (1 , 2) ) ; for k = 3 : 2 : smax %相当于k 3 k 的极小值滤波
zmin = ordfilt2 (a , 1 , ones (k , k) , ’symmet ric’) ; %相当于k 3 k 的极大值滤波
zmax = ordfilt2 (a , k 3 k , ones (k , k) , ’symmet ric’) ; % k 3 k 的中值滤波
zmed = medfilt2 (a , [ k , k ] , ’symmet ric’) ; %判断zmed 是否为一脉冲
UsingB = (zmed > zmin) & (zmax > zmed) &~Processed ; %判断z x , y 是否为一脉冲 B = (a > zmin) & (zmax > a) ; outputzxy = UsingB & B ;
outputzmed = UsingB & ~B ;
%输出一个不变的像素值z x , y 来代替邻域中值作为输出 c = zxy (outputzxy , c) ; % 以中值滤波的值作为输出
c = zmet (outputzmed , zmed , c) ; Processed = Processed | UsingB ; z = all ( Processed) ; if z break ; end end
imwrite (c , ’peard1 tif’) ; imshow (c) ;
程序运行结果
图像处理结果(随机选用一张用手机拍摄的城市夜景图片进行处理)
中值滤波后 未处理