我有一个函数compare_images(k, a, b)
,用于比较两个2d-数组a
和b
在这个函数中,我对a
应用了σ=k的高斯滤波器。我的想法是估计必须平滑图像a
多少才能使其类似于图像b
问题是,如果k
变化超过0.5
,那么我的函数compare_images
只会返回不同的值;如果我使用fmin(compare_images, init_guess, (a, b))
,它通常会卡在init_guess
值上。
我认为问题在于fmin
(和minimize
)倾向于从非常小的步骤开始,这在我的情况下将重复compare_images
的完全相同的返回值,因此该方法认为它已经找到了最小值。它只会尝试几次。
是否有一种方法可以强制fmin
或任何其他从scipy
最小化函数采取更大的步骤?或者是否有任何更适合我的需要的方法?
编辑:
我找到了一个临时解决方案。
首先,建议使用xtol=0.5
或更高作为fmin
的参数。
即使这样,我仍然遇到了一些问题,有几次fmin
会返回init_guess
。
然后,我创建了一个简单的循环,以便如果fmin == init_guess
,我将生成另一个随机的init_guess
并再次尝试。
当然,这非常缓慢,但现在我已经让它运行起来了。对于所有我的数据,它将需要大约20小时才能运行完成,但我不需要再次运行它。
无论如何,为了更好地解释仍然有兴趣找到更好解决方案的人们的问题:
- 我有2张图片,
A
和B
,包含一些科学数据。 A
看起来像是一些具有变量值的点 (它是一个矩阵,其中每个值代表事件发生的位置和强度)B
看起来像是一个平滑后的热图 (它是观察到的事件密度)B
看起来就像是对A
应用了高斯滤波器,并添加了一些半随机噪声。- 我们通过将常数为
sigma
的高斯滤波器应用于A
来逼近B
。这个sigma
是通过视觉选择得出的,但只适用于某些类型的图片。 - 我试图为每张图片获取最优的
sigma
,以便稍后可以找到每张图片中显示的事件类型与sigma
的关系。
不管怎样,感谢您的帮助!
compare_images()
中使用不同的相似度度量方法,以便即使k
的变化小于0.5,它也返回不同的相似度值。如果您展示您的函数compare_images()
,人们可能会有建议? - Simon