Python 生成 2D 高斯核

本文最后更新于:2022年5月21日 凌晨

本文记录 Python 中二维高斯核的生成方法。

生成思路

  • 使用 cv2.getGaussianKernel(ksize, sigma[, ktype]) 函数
  • 该函数用于生成一维高斯核
  • 生成一维高斯核后乘以自己的转置得到二维高斯核

核心函数

  • cv2.getGaussianKernel(ksize, sigma[, ktype]) ,函数生成一维高斯核

  • 官方函数文档

  • 参数说明

参数 描述 限制
ksize 核尺寸(文档中要求奇数,使用时可以是偶数) 正整数
sigma 高斯函数的标准差 正数
ktype 滤波器系数的类型,可以是 cv2.CV_32fcv2.CV_64f,配置参数后生成数据会分别表示为 float32float64类型,默认为cv2.CV_64f cv2.CV_32fcv2.CV_64f
  • 公式:
    $$
    \mathrm{G}_{\mathrm{i}}=\alpha * e^{-(\mathrm{i}-(\mathrm{ksize}-1) / 2)^{2} /(2 * \mathrm{sigma})^{2}}
    $$

生成方法

  • 生成一维高斯核
1
2
import cv2
data = cv2.getGaussianKernel(300, 100, cv2.CV_32F)
  • 计算得到二维高斯核
1
2
3
4
5
6
7
import cv2 
from mtutils import PIS

data = cv2.getGaussianKernel(300, 100, cv2.CV_32F)

gaussian_kernel = data * data.T
PIS(gaussian_kernel)

  • 如果需要将其归一化到 0 - 1,可以使用 mtutils 中的 min_max_normalize 函数:
1
2
3
4
5
6
7
8
9
10
11
import cv2 
from mtutils import PIS
from mtutils import min_max_normalize

data = cv2.getGaussianKernel(300, 100, cv2.CV_32F)

gaussian_kernel = data * data.T
gaussian_kernel = min_max_normalize(gaussian_kernel)
PIS(gaussian_kernel)

pass

参考资料