watershed

Преобразование Водораздела

Описание

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

пример

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.

Вычислите преобразование водосбора. Установите пиксели, которые находятся вне информация только для чтения, в 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-соединенный

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

  • Одно из следующих направлений: в, вне, слева, справа, вверх и вниз

  • Комбинация двух направлений, таких как right-down или in-up

26-соединенный

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

  • Одно из следующих направлений: в, вне, слева, справа, вверх и вниз

  • Комбинация двух направлений, таких как right-down или in-up

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

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

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

Примечание

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

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

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

свернуть все

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

Совет

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

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

Алгоритмы

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

Ссылки

[1] Meyer, Fernand, «Topographic distance and watershed lines», Signal Processing, Vol. 38, July 1994, pp. 113-125.

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

..

См. также

| | | |

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