def GaussianMatrix(X,sigma):
row,col=X.shape
GassMatrix=np.zeros(shape=(row,row))
X=np.asarray(X)
i=0
for v_i in X:
j=0
for v_j in X:
GassMatrix[i,j]=Gaussian(v_i.T,v_j.T,sigma)
j+=1
i+=1
return GassMatrix
def Gaussian(x,z,sigma):
return np.exp((-(np.linalg.norm(x-z)**2))/(2*sigma**2))
这是我现在的方式。有什么方法可以用矩阵运算来做这个吗?X是数据点。
我自己在图像处理中使用了接受的答案,但我发现它(和其他答案)太依赖于其他模块。因此,这里是我的紧凑解决方案:
编辑:将arange更改为linspace以处理偶数边长
你可以简单的高斯过滤一个简单的2D dirac function,结果就是使用的过滤函数:
是否要使用高斯核进行图像平滑?如果是,在scipy中有一个函数^{} :
更新答案
这应该是可行的——虽然它仍然不是100%准确,但它试图解释网格中每个单元内的概率质量。我认为在每个单元格的中点使用概率密度稍微不太准确,特别是对于小的内核。有关示例,请参见https://homepages.inf.ed.ac.uk/rbf/HIPR2/gsmooth.htm。
在图3的示例中从链接测试它:
给予
下面接受的原始(接受)答案是错误的 平方根是不必要的,间隔的定义是不正确的。
相关问题 更多 >
编程相关推荐