Инструмент для рисования областей интереса для анализа изображений (в Python) - PullRequest
6 голосов
/ 19 февраля 2011

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

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

Ответы [ 4 ]

7 голосов
/ 06 апреля 2011

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

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

3 голосов
/ 23 февраля 2011

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

2 голосов
/ 22 апреля 2014

Теперь у 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) 
0 голосов
/ 05 апреля 2017

Существует хороший инструмент, который делает именно то, что вы хотите, с помощью jdoepfert, доступный на github . Производительность на моей машине была немного медленной, но если вы прокомментируете motion_notify_event, она работает как шарм.

...