imsegfmm

Сегментация двухуровневого изображения, использующая Быстро идущий Метод

Синтаксис

BW = imsegfmm(W,mask,thresh)
BW = imsegfmm(W,C,R,thresh)
BW = imsegfmm(W,C,R,P,thresh)
[BW,D] = imsegfmm(___)

Описание

пример

BW = imsegfmm(W,mask,thresh) возвращает сегментированное изображение BW, который вычисляется с помощью Быстрого идущего Метода. Массив W задает веса для каждого пикселя. mask является логическим массивом, который задает местоположения seed. thresh является неотрицательным скаляром в области значений [0 1], который задает пороговый уровень.

BW = imsegfmm(W,C,R,thresh) возвращает сегментированное изображение, с местоположениями seed, заданными векторами C и R, которые содержат индексы строки и столбец. C и R должны содержать значения, которые являются допустимыми пиксельными индексами в W.

BW = imsegfmm(W,C,R,P,thresh) возвращает сегментированное изображение, с местоположениями seed, заданными векторами C, R и P, которые содержат столбец, строку и плоские индексы. C, R и P должны содержать значения, которые являются допустимыми пиксельными индексами в W.

[BW,D] = imsegfmm(___) возвращается нормированное геодезическое расстояние сопоставляют вычисленное использование D Быстрого идущего Метода. BW является пороговой версией D, где все пиксели, которые нормировали геодезические значения расстояния меньше, чем thresh, рассматриваются приоритетными пикселями и устанавливаются в true. D может быть порогом на разных уровнях, чтобы получить различные результаты сегментации.

Примеры

свернуть все

Этот пример показывает, как сегментировать объект в изображении, использующем Быстро идущий Метод на основе различий в полутоновой интенсивности по сравнению с местоположениями seed.

Readimage.

I = imread('cameraman.tif');
imshow(I)
title('Original Image')

Создайте маску и задайте местоположение seed. Можно также использовать roipoly, чтобы создать маску в интерактивном режиме.

mask = false(size(I)); 
mask(170,70) = true;

Вычислите массив веса на основе полутоновых различий в интенсивности.

W = graydiffweight(I, mask, 'GrayDifferenceCutoff', 25);

Сегментируйте изображение с помощью весов.

thresh = 0.01;
[BW, D] = imsegfmm(W, mask, thresh);
figure
imshow(BW)
title('Segmented Image')

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

figure
imshow(D)
title('Geodesic Distances')

Этот пример сегментирует мозг от данных MRI человеческой головы.

Загрузите данные MRI.

load mri
V = squeeze(D);

Визуализируйте данные.

sizeO = size(V);
figure;
slice(double(V),sizeO(2)/2,sizeO(1)/2,sizeO(3)/2);
shading interp, colormap gray;
title('Original');

Установите местоположения seed.

seedR = 75; 
seedC = 60; 
seedP = 10;

Вычислите веса на основе полутоновых различий в интенсивности.

W = graydiffweight(V, seedC, seedR, seedP , 'GrayDifferenceCutoff', 25);

Сегментируйте изображение с помощью весов.

thresh = 0.002;
BW = imsegfmm(W, seedC, seedR, seedP, thresh);

Визуализируйте сегментированное изображение с помощью поверхности ISO.

figure;
p = patch(isosurface(double(BW)));
p.FaceColor = 'red';
p.EdgeColor = 'none';
daspect([1 1 27/64]);
camlight; 
lighting phong;

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

свернуть все

Массив веса, заданный как неразреженный, неотрицательный числовой массив. Используйте graydiffweight или функции gradientweight, чтобы вычислить этот массив веса. Высокие значения в W идентифицируют передний план (объект), и низкие значения идентифицируют фон.

Пример: W = graydiffweight(I, mask,'GrayDifferenceCutoff', 25);

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

Отберите маску местоположений, заданную как логический массив, тот же размер как W. Местоположения, где mask верен, являются местоположениями seed. Если вы использовали graydiffweight, чтобы создать матрицу веса W, рекомендуется, чтобы вы использовали то же значение mask с imsegfmm, который вы использовали с graydiffweight.

Пример: mask = false(size(I)); mask(170,70) = true;

Типы данных: логический

Пороговый уровень раньше получал двухуровневое изображение, заданное как неотрицательный скаляр в области значений [0 1]. Низкие значения обычно приводят к большим областям переднего плана (логическая истина) в BW, и высокие значения производят маленькие области переднего плана.

Пример: 0.5

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

Индекс столбца ссылочных пикселей, заданных как числовой вектор.

Пример: [50 75 93]

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

Индекс строки ссылочных пикселей, заданных как числовой вектор.

Пример: [48 71 89]

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

Плоский индекс ссылочных пикселей, заданных как числовой вектор.

Пример: ]

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

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

свернуть все

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

Пример:

Типы данных: логический

Нормированная геодезическая карта расстояния, возвращенная как массив double тот же размер как W. Если W имеет класс single, D имеет класс single.

Советы

  • imsegfmm использует операции плавающей точки двойной точности для внутренних вычислений для всех классов кроме класса single. Если W имеет класс single, imsegfmm использует операции с плавающей точкой с одинарной точностью внутренне.

  • imsegfmm устанавливает пиксели с 0, или значения веса NaN к Inf в геодезическом расстоянии отображают D. Эти пиксели являются частью фона (логическая ложь) в сегментированном изображении BW.

Ссылки

[1] Сифианин, Дж. А. Методы установки уровня и быстро идущие методы: развивая интерфейсы в вычислительной геометрии, гидроаэромеханике, компьютерном зрении, и материаловедении, издательстве Кембриджского университета, 2-м выпуске, 1999.

Введенный в R2014b

Для просмотра документации необходимо авторизоваться на сайте