Лучший способ сегментации легочных узлов в Matlab

Я работаю с обработкой изображений в Matlab. Я пытаюсь выделить только злокачественные (раковые) узелки в легких. Первоначально мне удалось сегментировать легкое и все возможные узелки.

введите здесь описание изображения

Я использовал следующий код Matlab:

segM = % Segmented Lung 
% Segment nodules
BW = im2bw(segM, 0.55);

Теперь я хочу применить фильтр, который отфильтрует все доброкачественные (нераковые) узелки. Я давно ищу решение, но я не нашел способа продолжить его.

Вот сегментированное легкое:

введите здесь описание изображения

Обновление:

Узел размером более 3 мм считается злокачественным (раковым). Как рассчитать размер в мм по изображению?


person Sunil Kumar    schedule 19.04.2014    source источник
comment
Как определить злокачественную область? Ваша фильтрация зависит от этого момента.   -  person buzjwa    schedule 19.04.2014
comment
@Naveh, пожалуйста, проверьте рассматриваемое обновление.   -  person Sunil Kumar    schedule 19.04.2014
comment
У меня нет никакого опыта в медицинской визуализации. Вы имеете в виду, что светлые пятна являются злокачественными участками? Вы должны знать перевод между пикселями и длиной (мм) из свойств вашего устройства обработки изображений.   -  person buzjwa    schedule 19.04.2014
comment
@SunilKumar Не могли бы вы опубликовать еще одно изображение segmented Lung с узелками в легких, обведенными каким-либо цветом?   -  person Divakar    schedule 19.04.2014


Ответы (1)


После того, как вы запустите это:

% Segment nodules
BW = im2bw(segM, 0.55);

У вас есть узелки на черно-белом изображении. Теперь, чтобы отфильтровать узлы по размеру, вы можете подогнать эллипс к каждому узлу и проверить длину главной оси. Для этого вы можете использовать regionprops и запросить MajorAxisLength.

Реквизиты региона обнаружат все группы пикселей (связанные компоненты) вашего бинарного изображения и вернут информацию о каждой группе в массиве структур.

Попробуйте назвать это так:

nodules = regionprops(BW, 'MajorAxisLength');

Он вернет массив структур nodules, где вы можете получить доступ к каждому узлу следующим образом:

>> nodules(1)

ans = 

    MajorAxisLength: 4.6188

>> nodules(1).MajorAxisLength

ans =

    4.6188

Это означает, что первый узелок имеет основную длину 4,6188 пикселей. Вы можете преобразовать этот размер в миллиметры, если знаете пропорцию вашего изображения к реальным данным. Например, предположим, что вы знаете, что в реальном мире каждый пиксель равен 0,4 мм. Затем вам просто нужно умножить это значение на MajorAxisLength, чтобы получить значение в миллиметрах (и отфильтровать нужные узелки).

Также было бы полезно знать, где находится узелок, который вы только что отфильтровали. Вы можете запросить у regionprops дополнительные данные, например Centroid или BoundingBox. Возможно, также стоит взглянуть на MinorAxisLength, чтобы избежать обнаружения «линий» как узелков, или на значение Eccentricity, которое говорит вам, «насколько похожа на круг» группа пикселей. Дополнительные сведения см. в документации.

Также взгляните на этот другой вопрос, это может быть полезно:

person Rafael Monteiro    schedule 19.04.2014