водораздел

Водораздел преобразовывает

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

Синтаксис

L = watershed(A)
L = watershed(A,conn)

Описание

пример

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

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

Примеры

свернуть все

Вычислите водораздел, преобразовывают и отображают получившуюся матрицу метки как изображение RGB. Этот пример работает с 2D изображениями.

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

center1 = -10;
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;
figure
imshow(bw,'InitialMagnification','fit'), title('bw')

Вычислите преобразование расстояния дополнения двухуровневого изображения.

D = bwdist(~bw);
figure
imshow(D,[],'InitialMagnification','fit')
title('Distance transform of ~bw')

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

D = -D;
D(~bw) = Inf;

Вычислите водораздел, преобразовывают и отображают получившуюся матрицу метки как изображение RGB.

L = watershed(D);
L(~bw) = 0;
rgb = label2rgb(L,'jet',[.5 .5 .5]);
figure
imshow(rgb,'InitialMagnification','fit')
title('Watershed transform of D')

Сделайте 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

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

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

Дополните расстояние, преобразовывают, обеспечивают необъектные пиксели, чтобы быть 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

Входные параметры

свернуть все

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

Пример: RGB = imread('pears.png'); I = rgb2gray(RGB);

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический

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

Значение

Значение

Двумерные возможности соединения

4

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

8

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

3D возможности соединения

6

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

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

18

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

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

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

26

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

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

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

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

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

Возможность соединения может также быть задана более общим способом к любой размерности путем определения 3-by-3-by-... Матрица-by-3 0 s и 1 s. 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] Мейер, Фернан, "Топографическое расстояние и строки водораздела”, Обработка сигналов, Издание 38, июль 1994, стр 113-125.

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

Смотрите также

| | | |

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