Функции Image Toolbox / watershed.php
.htmСписок функций Image Processing Toolbox. Описание функции WATERSHED Семинары Обучение Лицензирование Разработка Подписка Форум Регистрация Matlab Toolboxes Simulink Blocksets Femlab Полезное Вход Обработка сигналов и изображений\image Processing ToolboxСписок функций Image Processing Toolbox: Сегментация изображений
В оглавление \ К следующему разделу \ К предыдущему разделу
WATERSHED Алгоритм маркерного водораздела Синтаксис:
L=watershed(A)
L=watershed(A,CONN)
Описание:
Функция L=watershed(A) вычисляет матрицу меток, которая идентифицирует области водораздела исходной матрицы A. Матрица А может быть любой размерности. Элементы матрицы L – это целые числа, которые больше или равны 0. Элементы, помеченные нулями не принадлежат никакой области водораздела. Они называются пикселами водораздела. Элементы помеченные единицами принадлежат области водораздела, элементы помеченные двойкой принадлежат другой области водораздела и т.д.
По умолчанию, реализованный алгоритм маркерного водораздела использует 8-связные окрестности для двумерных и 26-связные окрестности для трехмерных изображений. Для –мерных изображений, алгоритм маркерного водораздела использует связность, которая определяется как conndef(ndims(A),'maximal').
Функция L=watershed(A,CONN) определяет связность для использования в алгоритме маркерного водораздела. Параметр CONN принимает одно из приведенных ниже значений.
Значение параметра
CONN Описание Двумерная связность 4 4–связная окрестность 8 8–связная окрестность Трехмерная связность 6 6–связная окрестность 18 18–связная окрестность 26 26–связная окрестность Связность может быть определена, в большинстве случаев, для любой размерности при использовании для параметра CONN матрицы нулей и единиц размерности 3х3х...х3. Значение 1 определяет местоположение окрестности относительно центрального элемента CONN. Запись значений параметра CONN должна быть симметрична относительно центрального элемента.
Требования к исходным данным.
Массив A может быть числовым или логическим массивом любой размерности. Также он должен быть не разреженным. Выходной массив L принадлежит классу double.
Примеры:
Пример для двумерных массивов:
1.Создать бинарное изображение, содержащее два перекрывающихся круглых объекта.
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,'n'), title('bw')
2.Вычисление преобразования расстояний в дополнение к бинарному изображению.
D=bwdist(~bw);
figure, imshow(D,[],'n'), title('Distance transform of ~bw')
3.Дополнительное преобразование расстояний и обработка пикселов, которые принадлежат объектам и имеют значение -Inf.
D=-D;
D(~bw)=-Inf;
4.Вычисление алгоритма маркерного водораздела и визуализация результата в виде индексного изображения.
L=watershed(D);
rgb=label2rgb(L,'jet',[.5 .5 .5]);
figure, imshow(rgb,'n'), title('Watershed transfrom of D');
Пример для трехмерных массивов:
1.Создать трехмерное бинарное изображение, которое содержит две перекрывающиеся сферы.
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
2.Вычисление преобразования расстояний.
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
3.Дополнительное преобразование расстояний и обработка пикселов, которые не принадлежат объектам и имеют значение -Inf, вычисление алгоритма маркерного водораздела.
D=-D;
D(~bw)=-Inf;
L=watershed(D);
figure, isosurface(x,y,z,L==2,0.5), axis equal
title('Segmented object')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud
figure, isosurface(x,y,z,L==3,0.5), axis equal
title('Segmented object')
xlabel x, ylabel y, zlabel z
xlim(lims), ylim(lims), zlim(lims)
view(3), camlight, lighting gouraud
Алгоритм
маркерного водораздела использует разновидность алгоритма Vincent-Soille [1]. Для более детальной информации смотрите toolbox/images/images/private/watershed_vs.h.
Сопутствующие функции: BWLABEL, BWLABELN, BWDIST, REGIONPROPS.
Ссылки:
1. Luc Vincent and Pierre Soille, "Watersheds in Digital Spaces: An Efficient lgorithm Based on Immersion Simulations," IEEE Transactions of Pattern Analysis nd Machine Intelligence, vol. 13, no. 6, June 1991, pp. 583-598.
В оглавление \ К следующему разделу \ К предыдущему разделу
I Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
II Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2004 г.) На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro E-mail: matlab@exponenta.ru Информация на сайте была обновлена 14.05.05 Copyright 2001-2005 SoftLine Co
Наши баннеры hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=58396&im=33&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("") >