我想得到一个大小为m rows
和n columns
的高斯窗口。我知道如何得到1维。
from scipy.stats import multivariate_normal
multivariate_normal(mean=[1, 5], cov=(2.5))
现在我想要一个二维的矩阵。目的:我想把这个滤镜放在一个图像的顶部。绿色是一个图像的矩阵。蓝色的圆圈是一个高斯滤镜。我不知道如何得到蓝色的窗口。
我在想用这样的东西-
gw = multivariate_normal(mean=[1, 5], cov=(2.5))
for i in range(image.shape[0):
image_gauss_window[i:] = gw
你能给予一个方法来找出一个图像的高斯滤波器吗?我看到opencv许多函数应用高斯模糊到一个图像。但这里我想在应用/卷积到一个图像上之前的滤波器。
4条答案
按热度按时间qcbq4gxm1#
使用
np.fromfunction
:您可以使用我编写的
a basic computer vision library
中的一些代码。所以如果你有
size
和sigma
,你可以得到gaussian
kernel
的2d
numpy
array
,用这一行:然后将其转换为
normalise
,只需将每个element
除以:其中(* 例如 *)将
size
作为5
,将sigma
作为1
,将给予kernel
为:你可以看到一个很好的对称的
bell-curve
在2d
中,从中间升起。你可以看到这个
gaussian
filter
用matplotlib
可视化:qlfbtfca2#
在Python中使用openCV
示例:Sigma=1.0的5x5内核:
第一种方法:使用中间有一个1的矩阵:
第一个
第二种方法:使用cv2.getGaussianKernel:
第一个
结果是一样的。
注意,在Python中,内核大小必须是奇数。因此,所使用的函数不支持使用例如4x4内核。
fwzugrvs3#
如果你正在寻找一个“python“ian的方式来创建一个2D高斯过滤器,你可以通过两个1D高斯过滤器的点积来创建它。
创建单个1x5高斯滤波器
然后将其更改为二维数组
将y与其自身进行点积,以创建对称的2D高斯过滤器
huwehgph4#
这个函数在
OpenCV
中并不存在,但是OpenCV
提供了创建它的基本函数,这个函数叫做cv::getGaussianKernel
。因为我不熟悉python,所以我用c++写了我的程序,但是我知道把这个代码转换成python很简单。kernels
的输出将如下所示:如果将结果与生成2D内核的MATLAB进行比较,则输出将与opencv相同。