imsegfmm

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

Описание

пример

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

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

Figure contains an axes object. The axes object with title Original Image contains an object of type 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')

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

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

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

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

Этот пример сегментирует мозг из данных 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")

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

Установите местоположения 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);

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

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

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

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

свернуть все

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

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

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

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

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

Пример: 0.5

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

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

Советы

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

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

Ссылки

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

Введенный в R2014b