gpt4 book ai didi

python - 如何获得对带有噪声的图像进行二维高斯拟合的正确参数

转载 作者:行者123 更新时间:2023-12-01 01:42:03 25 4
gpt4 key购买 nike

我有多个物体图像,其中感兴趣的物体(每张图像一个)位于所述图像的中心附近。然而,它不一定是图像中最亮的源,因为某些图像还包括我不感兴趣的源,但恰好更亮/更强烈。通常还会有相当大的噪音。

我想将高斯函数拟合到这些 2D numpy 图像数组中,但我不确定如何使用这些我不想要的明亮光源有效地做到这一点。最后,我将以感兴趣的源为中心堆叠所有图像(中值),这样这些其他明亮的源就会消失。下面是我到目前为止尝试的代码,其中 data 是多个二维数组(图像)的列表。

import numpy as np
import scipy

def Gaussian2D(x, y, x_0, y_0, theta, sigma_x, sigma_y, amp):
a = np.cos(theta)**2/(2*sigma_x**2) + np.sin(theta)**2/(2*sigma_y**2)
b = -np.sin(2*theta)/(4*sigma_x**2) + np.sin(2*theta)/(4*sigma_y**2)
c = np.sin(theta)**2/(2*sigma_x**2) + np.cos(theta)**2/(2*sigma_y**2)
exp_term = a * (x-x_0)**2
exp_term += 2*b*(x-x_0)*(y-y_0)
exp_term += c * (y-y_0)**2
return amp * np.exp(-exp_term)

def GaussianFit(data):
for data_set in data:
y_0, x_0 = (np.shape(data_set)[0]//2, np.shape(data_set)[1]//2)
sigma_x, sigma_y = np.std(data_set, axis=1), np.std(data_set, axis=0)
fit = scipy.optimize.curve_fit(Gaussian2D(x, y, x_0, y_0, 0, sigma_x, sigma_y, amp), data_set)
return fit

我从来没有在代码中做过函数拟合,所以我感觉很迷茫。我的具体问题是:

  1. 如何正确定义参数?我是否需要按数组展平才能获取 sigma 参数?另外,我注意到在一些示例代码中,人们使用 linspace 创建了 xy 数组,所以我不确定是否需要这样做那个,而且我也不知道该用什么来表示振幅。

  2. 我如何处理每个图像有多个明亮光源但只想适合最接近中心的一个这一事实?我可以以某种方式指定查看图像中心附近吗?

  3. 拟合后我还需要中心源的坐标。我怎样才能确保它不会给我其他来源的坐标?

任何其他帮助或建议也将不胜感激。谢谢!

最佳答案

您可以使用 Gaussian Mixture Model 来执行此操作。我不认为SciPy中有一个函数,但scikit-learn中有一个函数

Here这是一个关于此的教程。

(来 self 对 this 问题的回答)

然后从图像中删除不需要的分布并适合它。

或者有skimage's blob detection .

关于拟合二维高斯,请阅读 here 。要使用它,您必须将数组展平为 scipy's curve_fit只需要一个一维数组。但效果很好。

描述了另一种方法 here 。使用其中已经包含三个高斯函数的拟合函数。如果您知道图像上始终存在三个(或在您的情况下为两个)峰值,则此方法将起作用。

关于python - 如何获得对带有噪声的图像进行二维高斯拟合的正确参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com