中值滤波
其基本思路是通过滤波器遍历图像,取滤波器区域像素值中值为新的像素值。其中,f(x,y)和g(x,y)分别是原图像和处理后图像,(x,y),(s,t)均为像素点坐标。如果是(3*3)的模板,就是对这3*3个像素点的值进行排序,(x,y)取值为排序之后的中值。可以用opencv自带的函数medianBlur()实现中值滤波,代码如下:其运行结果如下,左图为加了噪声的原图,右图为中值滤波后的图。 从上图可看出,中值滤波可以有效地消除噪声,并且相对于均值滤波,它能够更好地保护边缘信息,图像的视觉效果更好。当然,也可以逐像素点对图像进行运算,来求得中值并进行赋值,代码如下图所示:其中paixu()是对序列a进行从大到小的排序,median()是求序列a的中值,twotoone()是将列表从二维降到一维,这三个自定义的函数的目的都是为了求中值。可能有更好的办法,只是我没有找到python或者numpy中自带的求中值的函数,只能自己写了。
|