我有一个图像处理问题,我想我可以用它来学习更多关于PyMC3的实验。我花了很多时间摆弄非线性求解器和蛮力方法,至今没有任何东西让我开心。使用PyMC3进行多图像处理
我遇到的问题涉及到一个复杂的方法,用于共同注册同一场景的两幅图像,但以不同的形式记录。想想试图将常规黑白可见图像与热红外图像进行匹配。或者,从医学成像的角度来看,试图将MRI数据与X射线数据相匹配。
只是为了让事情变得简单,我可以代表我用下面的函数数据处理工作流程:
def process_and_compare(image_src, image_dst, parameters):
"""
Parameters
----------
image_src : 2D array
image_trg : 2D array
parameters : sequence of 7 scalars defining image transform
Output
------
metric : Scalar value indicating how well the transformed source image
matches up with the target image.
"""
image_src_warp = image_warper(image_src, parameters)
metric = compare_two_images(image_src_warp, image_trg)
return metric
这个函数作为输入两个图像和模型参数的向量。内部发生一些复杂的数字运算。完成后,会返回一个标量,指示模型(仅由参数矢量定义)对齐两个图像的效果。现在,关于源图像如何变形或如何比较两幅图像的细节是黑盒子。最后,我最终想要得到的主要结果是对应于模型的扭曲图像,从而获得最佳匹配。但是现在,当我仍在玩我的算法时,我想我可以通过可视化我的模型参数的后验分布来学习一些简单的测试用例图像。我最初认为PyMC会让这个变得简单,但是一旦我开始研究实际的实现细节时,我有点困惑。
我查看了Thomas Wiecki最近的PyMC3 presentations,并通过Cam Davidson-Pilon阅读了很多伟大的在线书籍。到目前为止,在我看来,PyMC3与PyMC2的巨大新功能(部分)是时髦的模型规范syntax和自动使用Theano来处理加速。
在我迄今为止所看到的例子中,现在看起来数据模型通常是使用新的语法系统完全指定的。但在我的情况下,我有这个更复杂的功能。
这里是我的问题:
有人能指出我涉及的用户功能实现的黑匣子数据模型中的现有PyMC例子吗? PyMC2或PyMC3会很棒!
一旦我弄清楚如何使PyMC3工作,我能在Python数据模型函数中深入了解Theano的好处吗?