📜  Python OpenCV – getgaussiankernel()函数

📅  最后修改于: 2022-05-13 01:55:08.457000             🧑  作者: Mango

Python OpenCV – getgaussiankernel()函数

Python OpenCV getGaussianKernel()函数用于查找高斯滤波器系数。高斯核也用于高斯模糊。高斯模糊是一种使用低通滤波器的平滑技术,其权重源自高斯函数。事实上,这是 CV(计算机视觉)应用中使用最广泛的低通滤波器。高斯滤波器的不同特性使算法更加高效。

getGaussianKernel()函数计算并返回维度为 ksize×1 的高斯滤波器系数矩阵:

Gi=α∗e−(i−(ksize−1)/2)2/(2∗sigma2)

其中 i=0 到 ksize−1,α 是选择的比例因子,因此 ∑iGi=1。

可以将两个这样的生成内核传递给 sepFilter2D。这些传递的函数会自动识别平滑内核(权重总和等于 1 的对称内核)并相应地处理它们。您也可以使用更高级别的 GaussianBlur。在这里,要记住的一件事是,作为孔径大小的 k 也应该是奇数和正数。

所以,你可能会有一个问题,什么是高斯核,我们为什么需要它?高斯核是线性可分的。这意味着我们可以将任何二维过滤器分解为两个一维过滤器。因此,计算复杂度从 O(n 2 ) 降低到 O(n)。什么时间在计算机科学中很重要。

应用多个连续的高斯核与应用单个更大的高斯模糊相同,其半径等于多个核半径平方和的平方根。使用这个特性,我们可以通过多个可分离过滤器的混合来近似一个不可分离过滤器。使用帕斯卡三角形可以快速获得高斯核权重(1-D)。

示例 1:

在这里,在下面的示例中,我们将找到一张图像的高斯核。我们首先使用 cv2 读取图像。然后我们使用 getgaussiankernel()函数创建大小为 3×1 的高斯核。孔径大小的 ksize 是奇数和正数。

本例中使用了下图:

Python3
# Python OpenCV - getgaussiankernel() Function
  
# import cv2
import cv2
  
# read image
img = cv2.imread('gfg2.jpg')
  
# Creates a 1-D Gaussian kernel
a = cv2.getGaussianKernel(3, 1)
  
# print Gaussian filter coefficients matrix
print(a)


Python3
# Python OpenCV - getgaussiankernel() Function
  
# import cv2
import cv2
  
# read image
img = cv2.imread('gfg_logo.png')
  
# Creates a 1-D Gaussian kernel
a = cv2.getGaussianKernel(7, 1)
  
# print Gaussian filter coefficients matrix
print(a)


输出:

[[0.27406862]
 [0.45186276]
 [0.27406862]]

示例 2:

在这个例子中,我们将找到一张图像的高斯核,我们使用 getgaussiankernel()函数创建大小为 7×1 的高斯核。

Python3

# Python OpenCV - getgaussiankernel() Function
  
# import cv2
import cv2
  
# read image
img = cv2.imread('gfg_logo.png')
  
# Creates a 1-D Gaussian kernel
a = cv2.getGaussianKernel(7, 1)
  
# print Gaussian filter coefficients matrix
print(a)

输出:

[[0.00443305]
 [0.05400558]
 [0.24203623]
 [0.39905028]
 [0.24203623]
 [0.05400558]
 [0.00443305]]