中值滤波-cv.medianBlur()函数
线性滤波是滤波模板内的像素值通过线性组合得到,运算过程包含排序、逻辑计算等等,并且线性滤波是对所有的像素进行线性组合,因此含有噪音的像素也一样会被计算在内,导致线性滤波对于去噪只能是减缓,不能消除,使得噪音仍然存在。而非线性滤波对像素的处理是非线性的,使得滤波的效果可能会更好,非线性滤波通过一定的逻辑判断可以将噪音过滤掉。常见的非线性滤波主要有中值滤波和双边滤波。
中值滤波和均值滤波的算法过程有异曲同工之妙,均值滤波是对滤波模板内的所有像素进行求和再求平均值,再将均值复制给所有的中心像素;中值滤波不同的是对滤波模板内的所有元素进行排序,取排序序列的中值作为中心像素。中值滤波和卷积操作一样,只有一个中心像素,也会和卷积一样进行图像的遍历,遍历的方向也和卷积一致。由于中值滤波不考虑像素差距较大的边缘值,可以比较好的应对斑点噪音和椒盐噪音。
代码如下(示例):
dst = cv.medianBlur(src,
ksize
[,dst])
#src:待中值滤波的输入图像
#ksize:中值滤波模板的大小
#dst:输出图像
函数用于图像的中值滤波,并将滤波结果返回
src: 符合ndarray数组对象,例如灰度图 三通道彩色图
ksize:当数值维3或者5时,数据类型可以是uint8,uint16,uint32.但是对于较大的滤波模板,数据类型就只能是uint8.ksize必须相等,且为大于1的奇数.