OpenCV高斯滤波器、双边滤波器的讲解与实战(附Python源码)

需要源码和图片请点赞关注收藏后评论区留言私信~~~

一、高斯滤波器

高斯滤波也被称为高斯模糊或者高斯平滑,是目前应用最广泛的平滑处理算法,高斯滤波可以很好的在降低图片噪声,细节层次的同时保留更多的图像信息,经过处理的图像呈现磨砂玻璃的滤镜效果

在高斯滤波中,越靠近核心的像素权重越大,越远离核心的像素权重越小,高斯滤波的计算过程涉及卷积运算,会有一个与滤波核带线啊哦相等的卷积核,卷积核中保存的值就是核所覆盖区域的权重值

像素与卷积核进行卷积计算

opencv将高斯滤波器封装成了GaussianBlur方法 语法格式如下

dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType) 

sigmaX 卷积核水平方向的标准差

sigmaY 卷积核垂直方向的标准差

修改sigmaX或者sigmaY的值都可以改变卷积核中的权重比例,也可以设置为0,该方法会根据滤波核的大小自动计算合适的权重比例

下面对花朵图像进行高斯滤波处理

 滤波核越大,处理之后的图像就越模糊,和均值滤波,中值滤波处理的图像相比,高斯滤波处理的图像更加平滑,保留的图像更多,更容易辨认

部分代码如下

import cv2
img = cv2.imread("amygdalus triloba.jpg")  # 读取原图
dst1 = cv2.GasianBlur(img, (5, 5), 0, 0)  # 使用大小为5*5的滤波核进行高斯滤波
dst2 = cv2.GaianBlur(img, (9, 9), 0, 0)  # 使用大小为9*9的滤波核进行高斯滤波
dst3 = cv2.GaussianBlur(img, (15, 15), 0, 0)  # 使用大小为15*15的滤波核进行高斯滤波
cv2.imshow("im", img)  # 显示原图
cv2.imshw("5", dst1)  # 显示滤波效果
cv2.imshow("9", dst2)
cv2.imshw("15", dst3)
cv2.waitKey()  # 按下任何键盘按键后
cv2.deroyAllWindows()  # 释放所有窗体

二、双边滤波器

上面几种滤波方法都会使整幅图像变得平滑,图像中的边界会变得模糊不清,双边滤波使一种在平滑处理过程中可以有效保护边界信息的滤波操作方法。

双边滤波器自动判断滤波核处于平坦区域还是边缘区域,如果滤波核处于平坦区域,则会使用类似高斯滤波的算法进行滤波,如果滤波核处于边缘区域,则加大边缘像素的权重,尽可能地让这些像素值保持不变

opencv将双边滤波器封装成bilateralFilter方法 语法格式如下

dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)

d 以当前像素为中心的整个滤波区域的直径

sigmaColor 参与计算的颜色范围,这个值使像素颜色值与周围颜色值的最大差值,只有颜色值之差小于这个值时,周围的像素才进行滤波计算,值为255时,表示所有颜色都参与计算

sigmaspace 该值越大 参与计算的像素数量就越多 

下面对比高斯滤波和双边滤波的处理效果 

可见双边滤波明显清晰一些,并且边界信息保存的更好

部分代码如下

import cv2
img = cv2.imread("amygdalus triloba.jpg")  # 读取原图
dst1 = cv2.GauianBlur(img(15, 15), 0, 0)  # 使用大小为15*15的滤波核进行高斯滤波
# 双边滤波取范围直径为15,颜色差为120
dst2 = cv2.bilateralFilter(img, 15, 120, 100)
cv2.imshow("img", img)  #示原图
cv2.imshow(auss", dst1)  # 显示高斯滤波效果
cv2.show("bilateral", dst2)  # 显示双边滤波效果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAWindows()  # 释放所有窗体

 总结

噪声指的是一幅图像内部的、高亮度的像素点。图像平滑处理是指在尽量保留原图像信息的情况下,去除图像内部的这些高亮度的像素点(即“噪声”)。为了实现图像平滑处理,需要的工具就是滤波器。虽然每种滤波器的实现原理都不同,但是每种滤波器都能对图像进行图像平滑处理

创作不易 觉得有帮助请点赞关注收藏~~~

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
WLS(Weighted Least Squares)滤波是一种基于图像的双边滤波,它能够平衡平滑和边缘保留的效果。在 OpenCV 中,可以使用 `cv2.ximgproc.createDisparityWLSFilter` 函数来创建一个 WLS 滤波对象。 以下是一个使用 WLS 滤波的示例代码: ``` python import cv2 # 读取左右视图图像和视差图 imgL = cv2.imread('left.png', 0) imgR = cv2.imread('right.png', 0) disp = cv2.imread('disp.png', 0) # 创建 WLS 滤波对象 wls_filter = cv2.ximgproc.createDisparityWLSFilter(left_matcher) # 设置 WLS 滤波参数 wls_filter.setLambda(80000) wls_filter.setSigmaColor(1.5) # 应用 WLS 滤波 filtered_disp = wls_filter.filter(disp, imgL, None, imgR) # 显示结果 cv2.imshow('Filtered Disparity', filtered_disp) cv2.waitKey() cv2.destroyAllWindows() ``` 在上面的代码中,首先读取了左右视图图像和视差图。然后,创建了一个 WLS 滤波对象。接着,设置了 WLS 滤波的参数,包括 Lambda 和 SigmaColor。最后,使用 `filter` 函数对视差图进行滤波,并显示结果。 需要注意的是,在使用 WLS 滤波时,需要先使用立体匹配算法(如 SGBM 或 BM)计算出视差图。函数 `cv2.ximgproc.createDisparityWLSFilter` 的第一个参数就是立体匹配算法对象。在示例代码中,我们将 `left_matcher` 作为参数传递给了该函数。如果你使用的是 BM 算法,则可以使用 `cv2.StereoBM_create` 函数创建一个 BM 算法对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

showswoller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值