當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python OpenCV getgaussiankernel()用法及代碼示例

Python OpenCV getGaussianKernel() 函數用於查找高斯濾波器係數。高斯核也用於高斯模糊。高斯模糊是一種使用低通濾波器的平滑技術,其權重來自高斯函數。事實上,這是 CV(計算機視覺)應用中使用最廣泛的低通濾波器。高斯濾波器的不同特性使算法更加高效。

用法:cv.getGaussianKernel(ksize, sigma[, ktype])

參數

  • Ksize:是光圈大小。 Ksize 值應該是奇數和正數。
  • sigma:Sigma 是高斯標準差。如果它是非正數,它從 ksize 計算為 sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8。
  • ktype:濾波器係數的類型。它可以是 CV_32F 或 CV_64F。

返回值:



高斯濾波器係數矩陣。

getGaussianKernel() 函數計算並返回維度為 ksize×1 的高斯濾波器係數矩陣:

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

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

可以將兩個這樣的生成內核傳遞給 sepFilter2D。這些傳遞的函數會自動識別平滑內核(權重總和等於 1 的對稱內核)並相應地處理它們。您也可以使用 higher-level GaussianBlur。在這裏,要記住的一件事是,作為孔徑大小的 k 也應該是奇數和正數。

所以,你可能會有一個問題,什麽是高斯核,我們為什麽需要它?高斯核是線性可分的。這意味著我們可以將任何二維過濾器分解為兩個一維過濾器。正因為如此,計算複雜度從 O(n2) 到 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)

輸出:

[[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]]



相關用法


注:本文由純淨天空篩選整理自rushi_javiya大神的英文原創作品 Python OpenCV – getgaussiankernel() Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。