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')

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Значение

Значение

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

4

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

8

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

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

6

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

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

18

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

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

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

26

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

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

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

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

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

Возможность соединения может также быть задана более общим способом к любой размерности путем определения 3-by-3-by-... Матрица-by-3 0s и 1s. 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