可以使用以下命令将高斯滤波器应用于图像:
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]]
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]])
- 我们可以使用方程 $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]]
所有这些方法的答案都是不同的,所以我的问题是过滤器使用了哪些内核值(系数)。