exponenta event banner

imsegfmm

Сегментация двоичного изображения методом быстрого марша

Описание

пример

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

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

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

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

Примеры

свернуть все

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

Чтение изображения.

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

Figure contains an axes. The axes with title Original Image contains an object of type image.

Создайте маску и укажите начальное местоположение. Также можно использовать 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')

Figure contains an axes. The axes with title Segmented Image contains an object of type image.

Можно задать пороговое значение для матрицы геодезических расстояний D использование различных пороговых значений для получения различных результатов сегментации.

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

Figure contains an axes. The axes with title Geodesic Distances contains an object of type image.

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

Загрузите данные МРТ.

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

Figure contains an axes. The axes with title Original contains 3 objects of type surface.

Задайте начальные местоположения.

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;

Figure contains an axes. The axes contains an object of type patch.

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

свернуть все

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

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

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

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

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

Пример: 0.5

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

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

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

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

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

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

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

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

Пример: [2 4 7]

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

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

свернуть все

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

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

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

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

Совет

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

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

Ссылки

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

Представлен в R2014b