1

可以使用以下命令将高斯滤波器应用于图像:

  1. cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType=BORDER_DEFAULT]]] )

例如:

import cv2
import numpy as np
a = np.arange(50, step=2).reshape((5,5)).astype('uint8')
print(a)
J1 = cv2.GaussianBlur(a,ksize=(3,3), sigmaX =1, sigmaY=1, 
borderType=cv2.BORDER_CONSTANT)
print(J1)

答案是:

[[ 2  4  6  7  6]
[ 8 12 14 16 13]
[15 22 24 26 20]
[22 32 34 36 27]
[20 28 29 31 23]]
  1. from scipy.ndimage import gaussian_filter gaussian_filter(a, sigma=1,mode='constant',cval=0)

例如,我的代码是:

from scipy.ndimage import gaussian_filter
gaussian_filter(a, sigma=1,mode='constant',cval=0)

答案是:

 array([[ 2,  3,  5,  6,  5],
   [ 6,  9, 12, 14, 11],
   [13, 19, 22, 23, 18],
   [19, 26, 29, 29, 23],
   [17, 23, 26, 26, 19]])
  1. 我们可以使用方程 $G(x,y) = \frac{1}{2\pi \sigma^2}e^{-\frac{x^2+y^2}{2\sigma^ 创建我们的过滤器2}}$,然后使用cv2.filter2D命令将此文件管理器应用于图像。

例如,我的代码是:

import cv2
import numpy as np
x, y = np.meshgrid(np.linspace(-1,1,3), np.linspace(-1,1,3))
d = x**2 + y**2
sigma, mu = 1.0, 0.0
K = (1/(2*np.pi*sigma**2))*np.exp(- d / ( 2.0 * sigma**2 ) ) 
J2 = cv2.filter2D(a,-1,K, borderType=cv2.BORDER_CONSTANT)
print(J2)

答案是:

[[ 2  3  4  6  5]
[ 6  9 11 12 10]
[12 17 19 20 15]
[17 25 27 28 21]
[15 22 23 24 18]]

所有这些方法的答案都是不同的,所以我的问题是过滤器使用了哪些内核值(系数)。

4

1 回答 1

1

您可以像这样找出滤波器系数: 创建一个零矩阵(或图像),例如 20x20 或更大,并将中心的一个像素设置为 1.0。对此矩阵进行过滤并打印结果。结果将等于滤波器的系数。请参阅 wiki 中的“点扩散函数 ( PSF )”。

于 2020-05-13T18:50:22.247 回答