图像分析中用于感兴趣区域绘制的工具(Python实现)

7
为了不再使用IDL和Matlab,我正在探索需要在Python/Scipy等中实现的工具。其中一个常见的功能是显示医学图像并勾画感兴趣区域(例如IDL中的defroi或其GUI版本xroi)。在Chaco和Matplotlib中,有LassoSelection工具的示例,但并不完全符合我的需求(我想要点击-点击-点击一个多边形,而不是拖动光标)。
是否存在可以完成此任务的现有工具,还是需要扩展和自定义现有类?无论哪种情况,指向正确方向的指针都将非常有帮助。
5个回答

7

看起来matplotlib在进行包括感兴趣区域绘制等交互式数据可视化方面并不是很适合。当然,它确实处理了事件处理等问题。

到目前为止,我能想到的最好的选择是一个名为guiqwt的令人印象深刻的工具。它基于PyQwt,并且还有一些(相当易于满足)依赖项列表。快速浏览他们的图像可视化测试示例展示了一个方便的工具集来构建。安装和运行这些示例非常容易。时间将会告诉我它是否容易集成到我的工作中。


4
现在,matplotlib有一个称为"LassoSelector"的漂亮小部件,使得自由绘制多边形变得非常容易。
示例代码在这里: http://matplotlib.org/examples/widgets/lasso_selector_demo.html 我的简化版本:
from pylab import *
from matplotlib.widgets import LassoSelector

fig, ax = plt.subplots()
ax.imshow(np.random.randint(0,255,(255,255)), cmap='gray')

def onselect(verts):
    print verts

lasso = LassoSelector(ax, onselect)

subplots_adjust(left=0.1, bottom=0.1) 

3

我认为您可以使用PyQTGraph来实现这个目的,https://launchpad.net/pyqtgraph。我只是偶尔使用它,因为它比matplotlib的选项更少,但它非常快速,并且具有一些内置小部件,适用于您感兴趣的ROI选择。然而,您可能会发现自己需要构建将matplotlib与PyQTGraph合并的自定义绘图程序,这可能会导致格式不同等问题产生困扰。虽然这可能需要更多的记录,但可能会解决您的问题。


谢谢你的建议:我已经看了一下,但是有些例子 test_* 在某些情况下似乎有点脆弱。有点担心依赖这个。我想我可能只能用 matplotlib+pyQt 自己动手了。 - DrSAR
我开始重新考虑我在2011年3月的评论:我现在正在尝试将pyqtgraph纳入我们的操作中。它已经从0.9.3升级到了0.9.7,似乎更加稳定和功能丰富(也许我没有仔细看)。感谢@EMS和+1。 - DrSAR

2

2023年:您一定要看看mpl_interactions

您想要的在这里。它也可以很好地与jupyter-notebooks一起使用。

来自官方网站的示例:

图像分割 GIF

参考: https://mpl-interactions.readthedocs.io(最后访问时间:2023年2月28日)


你知道如何在像PyCharm这样的IDE中使用“display”注释吗?示例似乎是在使用ipynotebooks。 - banikr

1

有一个很好的工具可以满足您的需求,jdoepfert在github上提供了该工具。

在我的机器上性能有点慢,但是如果您注释掉motion_notify_event,它就能完美运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接