Инструмент рисования интересующей области для анализа изображений (на питоне)

Пытаясь уйти от IDL и Matlab, я изучаю, какие инструменты мне нужно реализовать в python/scipy и др. Одной из общих функций является отображение медицинских изображений и выделение областей интереса (например, defroi в IDL или, в версии GIU, xroi). В chaco и matplotlib есть примеры инструмента LassoSelection, который подходит близко, но не совсем подходит для моих нужд (я хотел бы щелкнуть-щелкнуть-щелкнуть многоугольник, а не перетаскивать курсор).

Существуют ли существующие инструменты, которые могут это сделать, или мне нужно будет расширить и настроить существующие классы? В любом случае указатели в правильном направлении были бы полезны.


person DrSAR    schedule 18.02.2011    source источник


Ответы (4)


Я думаю, вы могли бы использовать для этой цели PyQTGraph, https://launchpad.net/pyqtgraph. Я использовал его очень экономно, так как у него меньше встроенных опций, чем у matplotlib, но он довольно быстрый и имеет несколько встроенных виджетов для выбора интересующего вас типа ROI. Вы, вероятно, обнаружите, что создаете собственные подпрограммы построения графиков, которые объединяют matplotlib с PyQTGraph, что может вызвать головную боль, если форматы разные, и т. д. Это может привести к увеличению учета, но может решить вашу проблему.

person ely    schedule 22.02.2011
comment
Спасибо за совет: я посмотрел, но примеры test_* в некоторых случаях кажутся немного хрупкими. Немного опасаюсь полагаться на это. Я думаю, что мне, возможно, просто придется пойти по доморощенному маршруту с matplotlib + pyQt. - person DrSAR; 03.03.2011
comment
Я начинаю переосмысливать свой комментарий от марта 2011 года: сейчас я пытаюсь включить pyqtgraph в нашу работу. Он перешел с 0.9.3 на 0.9.7 и кажется намного более стабильным и многофункциональным (может быть, я недостаточно внимательно искал). Спасибо @EMS и +1 - person DrSAR; 13.03.2013

Похоже, что matplotlib не очень подходит для интерактивной визуализации данных, которая включает в себя такие функции, как рисование интересующей области. Хотя, конечно, он имеет дело с обработкой событий и т.д.

Лучшее, что мне удалось придумать, — это впечатляющая работа под названием guiqwt. Он основан на PyQwt и, кроме того, имеет целый список зависимостей (достаточно простых в удовлетворении). Беглый взгляд на их тестовые примеры визуализации изображений показывает удобный набор инструментов для опираться на. Эти примеры было легко установить и запустить. Время покажет, насколько легко будет интегрироваться в мою собственную работу.

person DrSAR    schedule 05.04.2011

Теперь у 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) 
person otterb    schedule 22.04.2014

На github есть хороший инструмент, который делает именно то, что вам нужно. Производительность на моей машине была немного низкой, но если вы закомментируете motion_notify_event, это работает как шарм.

person lhcgeneva    schedule 05.04.2017