2013-12-16 4 views
5

я следовал за 2-D Watershed example в Mathworks.com, чтобы отделить подключенные объекты, как показано ниже:Чрезмерная сегментации Уотершед алгоритма

Imgur

код является суммировать следующим образом:

bw = imread('some_binary_image.tif'); 

D = -bwdist(~bw); 

D(~bw) = -Inf; 

L = watershed(D); 

В результате:

Imgur

Частица в центре разделена на две части. Есть ли способы избежать чрезмерной сегментации здесь?

Спасибо, lennon310, chessboard действительно хорошо работает для большинства моих изображений, но все же есть случаи, когда этого не происходит. Например, следующее бинарное изображение: Imgur

Использование шахматной доски приведет: Imgur

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

+0

Какова ваша цель для сотен обработки изображений? нет необходимости использовать водораздел для извлечения объектов. Так как между двумя кругами на вашем изображении есть крошечные связи, базовый метод маркировки подключенных компонентов может также не работать. На самом деле в наборе инструментов обработки изображений Matlab есть круглые детекторы (hough, imfindcircles, ...). – lennon310

+0

@ lennon310: На самом деле это снимки, сделанные рентгеновской томографией. Я хочу создать маску для частицы моего интереса. В настоящее время я использую Connected Threshold Grower в ImageJ, который может найти связанную область из начальной точки.Установив начальную точку в интересующей частице, Connected Threshold Grower может дать результат, который содержит только эту частицу, если она не касается других частиц. Теперь я вручную удаляю трогательную границу для сотен изображений, что требует много времени. Я пытаюсь использовать водораздел для автоматического отделения этих частиц. – shapeare

+0

Рентгеновские изображения не являются бинарными изображениями, не так ли? Я думаю, что подключенный компонент может быть обнаружен, или даже алгоритм кластеризации стоит попробовать необработанные изображения, основанные на разности интенсивностей. Для двоичного изображения, особенно вашего обновленного, сложно сегментировать два фактически связанных круга. – lennon310

ответ

7

Используйте max(abs(x1-x2),abs(y1-y2)) как расстояние метрики (шахматная доска), а также использовать восемь-связная окрестность в watershed функции:

bw=im2bw(I); 

D = -bwdist(~bw,'chessboard'); 
imagesc(D) 
D(~bw) = -Inf; 

L = watershed(D,8); 
figure,imagesc(L) 

Результат: enter image description here

3

Я занимаюсь с той же проблемой на некоторое время. Для меня решение заключалось в том, чтобы вместо этого использовать метод водоразделов на основе маркеров. Смотрит примеры по водоразделу методы, заданных на Matlab Блог Стив: http://blogs.mathworks.com/steve/ Этого метод дал им работало лучше для меня: http://blogs.mathworks.com/steve/2013/11/19/watershed-transform-question-from-tech-support/

Теперь, в идеальном мире, мы сможем сегментировать все правильно, используя один метод , Но водораздел делает более или частично сегмент частиц, независимо от того, какой метод вы используете (если только вы не вручную указали маркеры). Итак, в настоящее время я использую полуавтоматический метод сегментации; то есть использовать водораздел для максимально возможного сегмента изображения, а затем перенести это изображение в MSPaint и отредактировать его вручную, чтобы исправлять все, что находится под/над сегментацией.

Рост территории, по-видимому, использовался некоторыми людьми в прошлом. Но мои навыки обработки изображений ограничены, поэтому я не могу помочь вам в этом. Было бы здорово, если бы кто-нибудь мог опубликовать что-то о том, как использовать региональный рост для сегмента такого изображения.

Надеюсь, это поможет.