OpenCV-22高斯滤波

一、高斯函数的基础

要理解高斯滤波首先要直到什么是高斯函数,高斯函数是符合高斯分布的(也叫正态分布)的数据的概率密度函数。

 高斯函数的特点是以x轴某一点(这一点称为均值)为对称轴,越靠近中心数据发生的概率越高,最终形成一个两边平缓,中间陡峭的钟型(有的地方也叫帽子)图形。

高斯函数的一般形式:以(0,0)和(0,0,0)为中点:

高斯滤波就是使用符合高斯分布的卷积核对图片进行卷积操作,所以高斯滤波的重点是如何计算符合高斯分布的卷积核,即高斯模板:

假设中心点的坐标为(0,0),那么取距离它最近的8个坐标,为了计算,需要设定 \delta = 1.5,则模糊半径为1的高斯模板就如下所示:

我们可以观察到越靠近中心值,数值越大,越边缘的数值越小,符合高斯分布的特点。

通过高斯函数计算得到的是概率函数密度, 所以我们还有确保着九个点加起来为1,这9个点的权重总和等于0.4787147, 因此上面9个值还要分别除以0.4787147, 得到最终的高斯模板。

注意:有的整数的高斯模板是在归一化后的高斯模板的举出是每个数除上左上角的数值,然后取证。

有了卷积核,计算高斯滤波就简单了,假设现在有9个像素点,灰度值(0-255)的高斯滤波计算如下:

 二、在OpenCV中使用高斯滤波

使用API---GaussiamBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

--- kernel:高斯核

---sigmaX:x轴的标准差(一般只需要设定一个标准差就行)

---sigmaY:Y轴的标准差,默认为0,此时sigmaY = sigmaX

如果没有指定sigmaY的值,会分别从Ksize的宽度和高度计算sigma,此时sigma = 0

选择不同的sigma的值会得到不同的平滑效果,sigma越大,平滑效果越明显。

示例代码如下:

import cv2
import numpy as np

dog = cv2.imread("dog.png")
NEW_DOG = cv2.resize(dog, (640, 480))
new_dog = cv2.GaussianBlur(NEW_DOG, (5, 5), sigmaX=10)

cv2.imshow("img", np.hstack((NEW_DOG, new_dog)))
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

相关推荐

  1. opencv滤波函数

    2024-01-13 08:10:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 08:10:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 08:10:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 08:10:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 08:10:03       20 阅读

热门阅读

  1. 修改默认负载均衡策略(Ribbon)

    2024-01-13 08:10:03       40 阅读
  2. 使用spark将MongoDB数据导入hive

    2024-01-13 08:10:03       36 阅读
  3. CompletableFuture、ListenableFuture高级用列

    2024-01-13 08:10:03       29 阅读
  4. STM32 i2c从机模式中断处理参考

    2024-01-13 08:10:03       31 阅读
  5. 9个Linux网络命令

    2024-01-13 08:10:03       33 阅读
  6. 基本数据结构 | 并查集

    2024-01-13 08:10:03       44 阅读
  7. Docker-Compose编排Nginx1.25.1+PHP7.4.33+Redis7.0.11环境

    2024-01-13 08:10:03       25 阅读
  8. Redis学习指南(3)-Redis的应用领域

    2024-01-13 08:10:03       39 阅读