我有一个compare_images(k, a, b)
比较两个2d阵列a
和b
在funcion里面,我应用gaussian_filter
与sigma=k
于a
我的想法是估计有多少我一定要平滑图像a
,以便它是类似于图片b
问题是我的函数compare_images
只会在k
变量结束时返回不同的值0.5
,如果我这样做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
的半随机噪声.
我们正在接近B
通过应用高斯滤波器常数sigma
来A
.这sigma
是在视觉上选择的,但仅适用于某类图像.
我正在尝试sigma
为每个图像获得最佳,所以稍后我可以找到一些关系,sigma
并在每个图像中显示事件类.
无论如何,谢谢你的帮助!