用于图像分析的兴趣区域绘图工具(Python)

7 投票
5 回答
13952 浏览
提问于 2025-04-16 12:06

为了摆脱IDL和Matlab,我正在研究在python/scipy等工具中需要哪些功能。其中一个常见的需求是显示医学图像并标出感兴趣的区域(比如在IDL中叫defroi,或者它的图形用户界面版本xroi)。在chaco和matplotlib中,有一些LassoSelection工具的例子,虽然它们有点接近,但还是不完全符合我的需求(我希望能通过点击来画出一个多边形,而不是拖动光标)。

有没有现成的工具可以做到这一点,还是说我需要扩展和定制现有的类?无论哪种情况,能给我一些指引会很有帮助。

5 个回答

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) 
7

看起来,matplotlib在做互动数据可视化方面不是特别合适,尤其是像区域绘制这样的功能。虽然它确实可以处理事件响应等。

到目前为止,我找到的最好的选择是一个叫做 guiqwt 的工具。它是基于 PyQwt 开发的,并且有一长串(相对容易满足的)依赖项。快速浏览他们的 图像可视化示例,可以看到这是一个很方便的工具集,可以用来构建自己的项目。安装和运行这些示例都很简单。至于它能多容易地融入我的工作中,时间会告诉我们。

3

我觉得你可以试试用PyQTGraph来实现这个功能,https://launchpad.net/pyqtgraph。我自己用得不多,因为它的选项比matplotlib少一些,但速度挺快的,而且里面有一些现成的工具,可以帮助你选择感兴趣的区域。你可能会发现自己需要把matplotlib和PyQTGraph结合起来写一些自定义的绘图程序,不过这可能会让你头疼,因为它们的数据格式可能不一样等等。这会增加一些管理上的麻烦,但可能会解决你的问题。

撰写回答