为了摆脱IDL和Matlab,我正在探索我需要在python / scipy等人中实现什么样的工具。一个共同的特征是显示医学图像和轮廓感兴趣的区域(例如IDL中的defroi,或者它的GIU版本,xroi)。在chaco和matplotlib中有一些LassoSelection工具的例子很接近但不太适合我的需求(我想点击一下多边形而不是拖动光标)。
是否存在可以执行此操作的现有工具,还是需要扩展和自定义现有类?在任何一种情况下,正确方向的指针都会有所帮助。
答案 0 :(得分:7)
在拍摄包含感兴趣区域绘图等功能的交互式数据时,似乎matplotlib不适用。虽然它当然会处理事件处理等。
到目前为止,我能想出的最好成绩是以guiqwt为名的令人印象深刻的努力。它基于PyQwt,另外还有一个(相当容易满足的)依赖项列表。快速浏览一下他们的test examples of image visualization,可以看到一个方便的工具集。安装和运行这些示例很容易。时间将证明融入我自己的工作是多么容易。
答案 1 :(得分:3)
我认为您可以将PyQTGraph用于此目的,https://launchpad.net/pyqtgraph。我只是谨慎地使用它,因为它比matplotlib具有更少的先天选项,但它非常快,并且它确实有一些内置的小部件用于您感兴趣的ROI选择。您可能会发现自己构建自定义然而,绘制将matplotlib与PyQTGraph合并的例程,如果格式不同会导致令人头疼,等等。这会导致更多的簿记,但可能会解决您的问题。
答案 2 :(得分:2)
现在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 :(得分:0)
有一个很好的工具,可以通过github上的jdoepfert完全满足您的需求。
我的机器上的性能有点慢,但是如果你注释掉motion_notify_event
它就像魅力一样。