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, заданными векторами CR, и P, которые содержат столбец, строку и плоские индексы. CR, и P должен содержать значения, которые являются допустимыми пиксельными индексами в W.

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

Примеры

свернуть все

В этом примере показано, как сегментировать объект в изображении, использующем Быстро идущий Метод на основе различий в полутоновой интенсивности по сравнению с местоположениями 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 имеет класс singleD имеет класс single.

Советы

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

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

Ссылки

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

Введенный в R2014b