蓝色网站源码,网站建设管理总结,计算机做网站难吗,廊坊网站建设价格我正在尝试将二维高斯拟合到图像中。噪声很低#xff0c;所以我试图旋转图像#xff0c;使两个主轴不同时变化#xff0c;算出最大值#xff0c;然后计算两个维度的标准偏差。选择的武器是Python。。然而#xff0c;我一直在寻找图像的特征向量——numpy.linalg.py假设离散…我正在尝试将二维高斯拟合到图像中。噪声很低所以我试图旋转图像使两个主轴不同时变化算出最大值然后计算两个维度的标准偏差。选择的武器是Python。。然而我一直在寻找图像的特征向量——numpy.linalg.py假设离散的数据点。我想把这幅图像作为概率分布取样几千点然后根据这个分布计算特征向量但我确信一定有一种方法可以直接从这幅图像中找到特征向量(即高斯椭圆的半长轴和半长轴)。有什么想法吗非常感谢)只是一个简短的说明有几个工具来适应高斯图像。我唯一能想到的就是Scikits.Learn它不是完全面向图像的但我知道还有其他的。准确地计算协方差矩阵的特征向量是非常昂贵的。您必须将图像的每个像素(或大的ISH随机采样)与X、Y点相关联。基本上你会做如下的事情import numpy as np# grid is your image data, here...grid np.random.random((10,10))nrows, ncols grid.shapei,j np.mgrid[:nrows, :ncols]coords np.vstack((i.reshape(-1), j.reshape(-1), grid.reshape(-1))).Tcov np.cov(coords)eigvals, eigvecs np.linalg.eigh(cov)相反您可以利用它是一个定期采样的图像的事实并计算它的时刻(或国际轴)。对于大图像来说这会快得多。作为一个简单的例子(我使用了我以前的一个答案的一部分以防你发现它有用…)import numpy as npimport matplotlib.pyplot as pltdef main():data generate_data()xbar, ybar, cov intertial_axis(data)fig, ax plt.subplots()ax.imshow(data)plot_bars(xbar, ybar, cov, ax)plt.show()def generate_data():data np.zeros((200, 200), dtypenp.float)cov np.array([[200, 100], [100, 200]])ij np.random.multivariate_normal((100,100), cov, int(1e5))for i,j in ij:data[int(i), int(j)] 1return datadef raw_moment(data, iord, jord):nrows, ncols data.shapey, x np.mgrid[:nrows, :ncols]data data * x**iord * y**jordreturn data.sum()def intertial_axis(data):Calculate the x-mean, y-mean, and cov matrix of an image.data_sum data.sum()m10 raw_moment(data, 1, 0)m01 raw_moment(data, 0, 1)x_bar m10 / data_sumy_bar m01 / data_sumu11 (raw_moment(data, 1, 1) - x_bar * m01) / data_sumu20 (raw_moment(data, 2, 0) - x_bar * m10) / data_sumu02 (raw_moment(data, 0, 2) - y_bar * m01) / data_sumcov np.array([[u20, u11], [u11, u02]])return x_bar, y_bar, covdef plot_bars(x_bar, y_bar, cov, ax):Plot bars with a length of 2 stddev along the principal axes.def make_lines(eigvals, eigvecs, mean, i):Make lines a length of 2 stddev.std np.sqrt(eigvals[i])vec 2 * std * eigvecs[:,i] / np.hypot(*eigvecs[:,i])x, y np.vstack((mean-vec, mean, meanvec)).Treturn x, ymean np.array([x_bar, y_bar])eigvals, eigvecs np.linalg.eigh(cov)ax.plot(*make_lines(eigvals, eigvecs, mean, 0), markero, colorwhite)ax.plot(*make_lines(eigvals, eigvecs, mean, -1), markero, colorred)ax.axis(image)if __name__ __main__:main()号。强大地拟合高斯可能很困难。在IEEE信号处理杂志上有一篇关于这个主题的有趣文章Hongwei Guo,A Simple Algorithm for Fitting a Gaussian Function IEEESignal Processing Magazine, September 2011, pp. 134--137号我在这里给出1d案例的实现http://scipy-central.org/item/28/2/fitting-a-gaussian-to-noise-data-points网站(向下滚动查看结果匹配)你尝试过主成分分析(PCA)吗也许MDP包可以用最少的努力完成这项工作。