exponenta event banner

водораздел

Преобразование водосбора

Описание

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

пример

L = watershed(A) возвращает матрицу меток L который идентифицирует области водосбора входной матрицы A.

L = watershed(A,conn) определяет связность, которая будет использоваться при расчете водосбора.

Примеры

свернуть все

Создайте двоичное изображение, содержащее два перекрывающихся круглых объекта. Отображение изображения.

center1 = -40;
center2 = -center1;
dist = sqrt(2*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
bw = bw1 | bw2;
imshow(bw)
title('Binary Image with Overlapping Objects')

Figure contains an axes. The axes with title Binary Image with Overlapping Objects contains an object of type image.

Вычислите преобразование расстояния дополнения двоичного изображения. Значение каждого пикселя в выходном изображении - это расстояние между этим пикселем и ближайшим ненулевым пикселем из bw.

D = bwdist(~bw);
imshow(D,[])
title('Distance Transform of Binary Image')

Figure contains an axes. The axes with title Distance Transform of Binary Image contains an object of type image.

Возьмите дополнение изображения с преобразованным расстоянием так, чтобы светлые пикселы представляли высокие отметки, а темные - низкие отметки для преобразования водосбора.

D = -D;
imshow(D,[])
title('Complement of Distance Transform')

Figure contains an axes. The axes with title Complement of Distance Transform contains an object of type image.

Вычислите преобразование водосбора. Установить пикселы, находящиеся за пределами ROI, в значение 0.

L = watershed(D);
L(~bw) = 0;

Отображение результирующей матрицы меток в виде изображения RGB.

rgb = label2rgb(L,'jet',[.5 .5 .5]);
imshow(rgb)
title('Watershed Transform')

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

Создайте 3-D двоичное изображение, содержащее две перекрывающиеся сферы.

center1 = -10;
center2 = -center1;
dist = sqrt(3*(2*center1)^2);
radius = dist/2 * 1.4;
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];
[x,y,z] = meshgrid(lims(1):lims(2));
bw1 = sqrt((x-center1).^2 + (y-center1).^2 + ...
           (z-center1).^2) <= radius;
bw2 = sqrt((x-center2).^2 + (y-center2).^2 + ...
           (z-center2).^2) <= radius;
bw = bw1 | bw2;
figure, isosurface(x,y,z,bw,0.5), axis equal, title('BW')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

Figure contains an axes. The axes with title BW contains an object of type patch.

Вычислите преобразование расстояния.

D = bwdist(~bw);
figure, isosurface(x,y,z,D,radius/2), axis equal
title('Isosurface of distance transform')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

Figure contains an axes. The axes with title Isosurface of distance transform contains an object of type patch.

Дополните преобразование расстояния, принудительно увеличьте пикселы, не являющиеся объектами Inf, а затем вычислить преобразование водосбора.

D = -D;
D(~bw) = Inf;
L = watershed(D);
L(~bw) = 0;
figure
isosurface(x,y,z,L==1,0.5)
isosurface(x,y,z,L==2,0.5)
axis equal
title('Segmented objects')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud

Figure contains an axes. The axes with title Segmented objects contains 2 objects of type patch.

Входные аргументы

свернуть все

Входное изображение, указанное как числовой или логический массив любого измерения.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Пиксельная связность, указанная как одно из значений в этой таблице. Подключение по умолчанию: 8 для 2-D изображений, и 26 для 3-D изображений.

Стоимость

Значение

Двумерные связи

4-подключенные

Пикселы соединяются, если их края соприкасаются. Окрестностью пикселя являются соседние пиксели в горизонтальном или вертикальном направлении.

8-подключенных

Пикселы соединяются, если их края или углы соприкасаются. Окрестностью пикселя являются соседние пиксели в горизонтальном, вертикальном или диагональном направлении.

Трехмерные связи

6-подключенных

Пиксели соединяются, если их лица соприкасаются. Окрестностью пикселя являются соседние пиксели в:

  • Одно из этих направлений: внутрь, наружу, влево, вправо, вверх и вниз

18-подключенных

Пикселы соединяются, если их грани или края соприкасаются. Окрестностью пикселя являются соседние пиксели в:

  • Одно из этих направлений: внутрь, наружу, влево, вправо, вверх и вниз

  • Комбинация двух направлений, например, вправо вниз или вверх

26-подключенных

Пикселы соединяются, если их грани, края или углы соприкасаются. Окрестностью пикселя являются соседние пиксели в:

  • Одно из этих направлений: внутрь, наружу, влево, вправо, вверх и вниз

  • Комбинация двух направлений, например, вправо вниз или вверх

  • Комбинация трех направлений, таких как «справа вверх» или «слева вниз»

Для более высоких размеров watershed использует значение по умолчанию conndef(ndims(A),'maximal').

Связность также можно определить более общим образом для любого измерения, указав 3 на 3 -... -по-3 матрицы 0s и 1с. 1-значимые элементы определяют расположения окрестностей относительно центрального элемента conn. Обратите внимание, что conn должен быть симметричным относительно его центрального элемента. Дополнительные сведения см. в разделе Определение пользовательских подключений.

Примечание

Если указать связность, не используемую по умолчанию, пикселы на краю изображения могут не считаться пикселями границы. Например, если conn = [0 0 0; 1 1 1; 0 0 0]элементы в первой и последней строках не считаются пограничными пикселями, поскольку в соответствии с этим определением связности они не связаны с областью вне изображения.

Типы данных: double | logical

Выходные аргументы

свернуть все

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

Совет

  • Алгоритм преобразования водосбора, используемый этой функцией, изменился в версии 5.4 (R2007a) программного обеспечения Toolbox™ обработки изображений. Предыдущий алгоритм иногда создавал помеченные водосборные бассейны, которые не были смежными. Если необходимо получить те же результаты, что и предыдущий алгоритм, используйте функцию watershed_old.

  • Чтобы предотвратить избыточную сегментацию, удалите незначительные минимумы из изображения с помощью imhmin перед использованием watershed функция.

Алгоритмы

watershed использует алгоритм Фернана Мейера [1].

Ссылки

[1] Мейер, Фернан, «Топографическое расстояние и линии водораздела», обработка сигналов, том 38, июль 1994 года, стр. 113-125.

Расширенные возможности

..

См. также

| | | |

Представлен до R2006a