opencv 非线性滤波与模糊

线性滤波因其是线性计算,所以容易构造,但却是一种平庸的方法,实现的效果也是很平庸。要想实现蒂花之秀,就要不走寻常路,所以小林祭出非线性滤波。

非线性滤波在OpenCV中主要有中值滤波和双边滤波,他们相比线性滤波,在去除噪点方面更胜一筹。

一、中值滤波

中值滤波的基本思想是,将待处理像素点的邻域像素值由小到大排列,然后取其中值作为待处理像素的像素值。

如何我们将核的大小设置为3,中值滤波就会对核中的9个数字进行排序,然后将中心点的像素值换成中值,如下图所示:


  • 相比均值滤波的优点:均值滤波,由于是加权平均,输出像素值易受噪点影响,而中值滤波只是简单的像素值排列取中值,处于极端的噪点几乎会被无视掉。
  • 相比均值滤波的缺点:效率比均值滤波 慢多啦。
  • 函数原型:
  • dst = cv2.medianBlur(src, ksize[, dst])
  • src:通道数需为1、3或4个通道;当ksize取3或5时,图像数据类型可以为CV_8U、CV_16U或CV_32F;当ksize大于5时,图像数据类型只能为CV_8U。
  • ksize:核的大小,需为大于1的奇数。

二、双边滤波

  • 优点:相比高斯滤波能更好的保护边缘信息不受模糊的影响
  • 缺点:正是由于他的优点,使得他不能很好地滤除边缘区域地噪点,且耗时长

函数原型:

dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])
  • src:8位或浮点型,1或3通道
  • d:滤波时的邻域半径,若为负值,则由参数sigmaSpace确定
  • sigmaColor:颜色空间滤波器的sigma值。值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域
  • sigmaSpace:坐标空间中滤波器的sigma值。值越大,意味着越远的像素会相互影响,从而使更大的区域和足够相似的颜色。当d大于0,d指定了邻域大小且与sigmaSpace无关。否则,d正比于sigmaSpace。
三、demo


	img = imread("D:\\cv_study\\随机练\\lena.jpg");
	medianBlur(img, m0, 17);
	boxFilter(img, m1, img.depth(), Size(17, 17));

中值的效果比均值好,双边对边缘信息保留的很好。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值