Маркер-управляемая сегментация водосбора

В этом примере показано, как использовать сегментацию водосбора для разделения касающихся объектов на изображении. Преобразование водораздела находит "водосборные умывальные раковины и" водоразделный хребет линий "на изображении путем обработки его как поверхности, где светлые пиксели высоки, а темные пиксели низки.

Сегментация с помощью преобразования водосбора работает лучше, если можно идентифицировать или «пометить» объекты переднего плана и местоположения фона. Сегментация водосбора, контролируемая маркером, выполняется в соответствии с этой основной процедурой:

  1. Вычислите функцию сегментации. Это изображение, темные области которого являются объектами, которые вы пытаетесь сегментировать.

  2. Вычислите маркеры переднего плана. Это соединенные пятна пикселей в каждом из объектов.

  3. Вычислите маркеры фона. Это пиксели, которые не являются частью какого-либо объекта.

  4. Измените функцию сегментации так, чтобы она имела минимумы только в расположениях основных и фоновых маркеров.

  5. Вычислите преобразование водораздела измененной функции сегментации.

Шаг 1: Прочитайте в цветном изображении и преобразуйте его в полутоновый

rgb = imread('pears.png');
I = rgb2gray(rgb);
imshow(I)

text(732,501,'Image courtesy of Corel(R)',...
     'FontSize',7,'HorizontalAlignment','right')

Figure contains an axes. The axes contains 2 objects of type image, text.

Шаг 2: Используйте Градиентную величину в качестве функции сегментации

Вычислите величину градиента. Градиент высокий на границах объектов и низкий (в основном) внутри объектов.

gmag = imgradient(I);
imshow(gmag,[])
title('Gradient Magnitude')

Figure contains an axes. The axes with title Gradient Magnitude contains an object of type image.

Можно ли сегментировать изображение при помощи преобразования водораздела непосредственно на величине градиента?

L = watershed(gmag);
Lrgb = label2rgb(L);
imshow(Lrgb)
title('Watershed Transform of Gradient Magnitude')

Figure contains an axes. The axes with title Watershed Transform of Gradient Magnitude contains an object of type image.

Нет. Без дополнительной предварительной обработки, такой как приведенные ниже расчеты маркера, использование преобразования водораздела непосредственно часто приводит к «переэгментации».

Шаг 3: Отметьте объекты переднего плана

Здесь можно применять различные процедуры для поиска маркеров переднего плана, которые должны быть соединены пятнами пикселей внутри каждого из объектов переднего плана. В этом примере вы будете использовать морфологические методы, называемые «открытие за реконструкцией» и «закрытие за реконструкцией», чтобы «очистить» изображение. Эти операции создадут плоские максимумы внутри каждого объекта, который может быть расположен с помощью imregionalmax.

Открытие является эрозией с последующим расширением, в то время как открытие за реконструкцией является эрозией с последующей морфологической реконструкцией. Давайте сравним эти два. Во-первых, вычислите открытие с помощью imopen.

se = strel('disk',20);
Io = imopen(I,se);
imshow(Io)
title('Opening')

Figure contains an axes. The axes with title Opening contains an object of type image.

Затем вычислите открытие путем реконструкции с помощью imerode и imreconstruct.

Ie = imerode(I,se);
Iobr = imreconstruct(Ie,I);
imshow(Iobr)
title('Opening-by-Reconstruction')

Figure contains an axes. The axes with title Opening-by-Reconstruction contains an object of type image.

Следуя открытию с закрытием, можно удалить темные пятна и метки стебля. Сравните регулярное морфологическое закрытие с закрытием за реконструкцией. Сначала попробуйте imclose:

Ioc = imclose(Io,se);
imshow(Ioc)
title('Opening-Closing')

Figure contains an axes. The axes with title Opening-Closing contains an object of type image.

Теперь используйте imdilate далее следуют imreconstruct. Заметьте, что вы должны дополнить входы изображения и выход imreconstruct.

Iobrd = imdilate(Iobr,se);
Iobrcbr = imreconstruct(imcomplement(Iobrd),imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
imshow(Iobrcbr)
title('Opening-Closing by Reconstruction')

Figure contains an axes. The axes with title Opening-Closing by Reconstruction contains an object of type image.

Как вы можете видеть, сравнивая Iobrcbr с Iocоснованные на реконструкции открытие и закрытие являются более эффективными, чем стандартные открытие и закрытие, при удалении небольших дефектов, не затрагивая общих форм объектов. Вычислите региональные максимумы Iobrcbr для получения хороших маркеров переднего плана.

fgm = imregionalmax(Iobrcbr);
imshow(fgm)
title('Regional Maxima of Opening-Closing by Reconstruction')

Figure contains an axes. The axes with title Regional Maxima of Opening-Closing by Reconstruction contains an object of type image.

Чтобы помочь интерпретировать результат, наложите изображение маркера переднего плана на оригинальное изображение.

I2 = labeloverlay(I,fgm);
imshow(I2)
title('Regional Maxima Superimposed on Original Image')

Figure contains an axes. The axes with title Regional Maxima Superimposed on Original Image contains an object of type image.

Заметьте, что некоторые из преимущественно окклюдированных и затененных объектов не помечены, что означает, что эти объекты не будут сегментированы должным образом в конечном результате. Кроме того, маркеры переднего плана в некоторых объектах идут прямо до ребра объектов. Это означает, что вы должны очистить ребра маркеров и затем сжать их бит. Можно сделать это путем закрытия с последующей эрозией.

se2 = strel(ones(5,5));
fgm2 = imclose(fgm,se2);
fgm3 = imerode(fgm2,se2);

Эта процедура имеет тенденцию оставлять некоторые бродячие изолированные пиксели, которые должны быть удалены. Вы можете сделать это с помощью bwareaopen, который удаляет все blobs, которые имеют меньше, чем определенное количество пикселей.

fgm4 = bwareaopen(fgm3,20);
I3 = labeloverlay(I,fgm4);
imshow(I3)
title('Modified Regional Maxima Superimposed on Original Image')

Figure contains an axes. The axes with title Modified Regional Maxima Superimposed on Original Image contains an object of type image.

Шаг 4: Вычисление фоновых маркеров

Теперь нужно пометить фон. На очищенном изображении Iobrcbrтемные пиксели относятся к фону, поэтому можно начать с операции порогового значения.

bw = imbinarize(Iobrcbr);
imshow(bw)
title('Thresholded Opening-Closing by Reconstruction')

Figure contains an axes. The axes with title Thresholded Opening-Closing by Reconstruction contains an object of type image.

Пиксели фона выполнены в черном цвете, но в идеале мы не хотим, чтобы маркеры фона были слишком близки к ребрам объектов, которые мы пытаемся сегментировать. Мы «прорежем» фон, вычисляя «скелет по зонам влияния», или SKIZ, переднего плана bw. Это может быть сделано путем вычисления преобразования водосбора преобразования расстояния bw, а затем ищет линии гребня водораздела (DL == 0) результата.

D = bwdist(bw);
DL = watershed(D);
bgm = DL == 0;
imshow(bgm)
title('Watershed Ridge Lines')

Figure contains an axes. The axes with title Watershed Ridge Lines contains an object of type image.

Шаг 5: Вычислите преобразование водораздела функции сегментации.

Функция imimposemin может использоваться для изменения изображения так, чтобы оно имело региональные минимумы только в определенных желаемых местах. Здесь можно использовать imimposemin чтобы изменить градиент изображения величины так, чтобы его единственные региональные минимумы происходили в пикселях переднего и фонового маркеров.

gmag2 = imimposemin(gmag, bgm | fgm4);

Наконец, вычислите сегментацию на основе водосбора.

L = watershed(gmag2);

Шаг 6: Визуализация результата

Одним из методов визуализации является наложение маркеров переднего плана, маркеров фона и сегментированных контуров объектов на оригинальное изображение. Вы можете использовать расширение по мере необходимости, чтобы сделать некоторые аспекты, такие как контуры объекта, более видимыми. Контуры объекта расположены где L == 0. Двоичные маркеры переднего и заднего плана масштабируются до различных целочисленных значений, так что им назначаются различные метки.

labels = imdilate(L==0,ones(3,3)) + 2*bgm + 3*fgm4;
I4 = labeloverlay(I,labels);
imshow(I4)
title('Markers and Object Boundaries Superimposed on Original Image')

Figure contains an axes. The axes with title Markers and Object Boundaries Superimposed on Original Image contains an object of type image.

Эта визуализация иллюстрирует, как местоположения маркеров переднего и заднего плана влияют на результат. В нескольких местоположениях частично окклюдированные более темные объекты были объединены с более яркими соседними объектами, поскольку окклюдированные объекты не имели маркеров переднего плана.

Другой полезный метод визуализации - отображение матрицы метки в виде цветного изображения. Маркируйте матрицы, такие как произведенные watershed и bwlabel, может быть преобразован в изображения truecolor в целях визуализации при помощи label2rgb.

Lrgb = label2rgb(L,'jet','w','shuffle');
imshow(Lrgb)
title('Colored Watershed Label Matrix')

Figure contains an axes. The axes with title Colored Watershed Label Matrix contains an object of type image.

Можно использовать прозрачность, чтобы наложить эту псевдокрасочную метку матрицу на верхнюю часть исходного изображения интенсивности.

figure
imshow(I)
hold on
himage = imshow(Lrgb);
himage.AlphaData = 0.3;
title('Colored Labels Superimposed Transparently on Original Image')

Figure contains an axes. The axes with title Colored Labels Superimposed Transparently on Original Image contains 2 objects of type image.

См. также

| | | | | | | | | | | |

Для просмотра документации необходимо авторизоваться на сайте