activecontour

Изображение сегмента в передний план и фон с помощью активных контуров (змеи)

Описание

пример

bw = activecontour(A,mask) сегментирует изображение A в передний план (объект) и фоновые области памяти с помощью активных контуров. Используя активный алгоритм контура, также названный snakes, вы задаете кривые на изображении, которые перемещаются, чтобы найти границы объекта. activecontour функция развивает сегментацию с помощью итеративного процесса и, по умолчанию, activecontour выполняет 100 итераций.

mask аргумент является двухуровневым изображением, которое задает начальное состояние активного контура. Контуры объектных областей (белых) в mask задайте начальное положение контура, используемое в эволюции контура, чтобы сегментировать изображение. Выходное изображение bw двухуровневое изображение, где передний план является белым (логическая истина), и фон является черным (логическая ложь).

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

bw = activecontour(A,mask,n) сегментирует изображение путем развития контура для максимума n итерации.

пример

bw = activecontour(A,mask,method) задает активный метод контура, используемый в сегментации, любом 'Chan-Vese' или 'edge'.

пример

bw = activecontour(A,mask,n,method) сегментирует изображение путем развития контура для максимума n итерации с помощью заданного method.

bw = activecontour(___,Name,Value) задает параметры, которые управляют различными аспектами сегментации. Названия параметра могут быть сокращены, и случай не имеет значения.

Примеры

свернуть все

В этом примере показано, как сегментировать изображение с помощью настроек по умолчанию activecontour функция.

Считайте полутоновое изображение и отобразите его.

I = imread('coins.png');
imshow(I)
title('Original Image')

Задайте начальный контур и отобразите его.

mask = zeros(size(I));
mask(25:end-25,25:end-25) = 1;
figure
imshow(mask)
title('Initial Contour Location')

Сегментируйте изображение с помощью метода по умолчанию и 300 итераций.

bw = activecontour(I,mask,300);

Отобразите результат.

figure
imshow(bw)
title('Segmented Image')

Считайте изображение и отобразите его.

I = imread('toyobjects.png');
imshow(I)
hold on
title('Original Image');

Задайте начальное местоположение контура близко к объекту, который должен быть сегментирован.

mask = false(size(I));
mask(50:150,40:170) = true;

Отобразите начальный контур на оригинальном изображении синего цвета.

visboundaries(mask,'Color','b');

Сегментируйте изображение с помощью 'edge' метод и 200 итераций.

bw = activecontour(I, mask, 200, 'edge');

Отобразите итоговый контур на оригинальном изображении красного цвета.

visboundaries(bw,'Color','r'); 
title('Initial contour (blue) and final contour (red)');

Отобразите сегментированное изображение.

figure, imshow(bw)
title('Segmented Image');

Считайте изображение в рабочую область и отобразите его. Отобразите инструкции задать начальное местоположение контура.

I = imread('toyobjects.png');
imshow(I)
  
str = 'Click to select initial contour location. Double-click to confirm and proceed.';
title(str,'Color','b','FontSize',12);
disp(sprintf('\nNote: Click close to object boundaries for more accurate result.'))

Задайте начальный контур в интерактивном режиме.

mask = roipoly;
  
figure, imshow(mask)
title('Initial MASK');

Сегментируйте изображение, задав 200 итераций.

maxIterations = 200; 
bw = activecontour(I, mask, maxIterations, 'Chan-Vese');
  
% Display segmented image
figure, imshow(bw)
title('Segmented Image');

Загрузите 3-D объемные данные изображения, удалив одноэлементную размерность.

D = load('mri.mat');
A  = squeeze(D.D);

Создайте 2D маску для начальных точек seed.

seedLevel = 10;
seed = A(:,:,seedLevel) > 75;
figure
imshow(seed)

Создайте пустую 3-D маску seed и поместите точки seed в нее.

mask = zeros(size(A));
mask(:,:,seedLevel) = seed;

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

bw = activecontour(A,mask,300);

Отобразите 3-D сегментированное изображение.

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

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

свернуть все

Отобразите к сегментированному, заданному как неразреженный, 2D или 3-D, числовой массив.

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

Начальный контур, в котором эволюция сегментации начинается, заданный как двухуровневое изображение тот же размер как A.

Для 2D и 3-D полутоновых изображений, размера mask должен совпадать с размером изображения A. Для цвета и многоканальных изображений, mask должен быть 2D логический массив, где первые две размерности совпадают с первыми двумя размерностями изображения A.

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

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

Если начальное положение контура (заданный mask) далеко от границ объекта, задайте более высокие значения n достигнуть желаемых результатов сегментации.

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

Активный метод контура используется в сегментации, заданной как 'Chan-Vese' или 'edge'. Chan и Vese находящаяся в области энергетическая модель описаны в [1]. Основанная на ребре модель, похожая на Геодезический Активный Контур, описана в [2].

Типы данных: char | string

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: bw = activecontour(I, mask, 200, 'edge','SmoothFactor',1.5);

Степень гладкости или регулярность контуров сегментированных областей, заданных как разделенная запятой пара, состоящая из 'SmoothFactor' и положительный числовой скаляр. Более высокие значения производят более сглаженные контуры области, но могут также сгладить более прекрасные детали. Нижние значения производят больше неисправностей (меньше сглаживания) в контурах области, но позволяют более прекрасным деталям быть полученными. Значение гладкости по умолчанию зависит от выбранного метода.

Пример: bw = activecontour(I, mask, 200, 'edge','SmoothFactor',1.5);

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

Тенденция контура вырасти за пределы или уменьшиться внутрь, заданный как разделенная запятой пара, состоящая из 'ContractionBias' и скаляр. Положительные значения смещают контур, чтобы уменьшиться, внутрь (сокращаются). Отрицательные величины смещают контур, чтобы вырасти, за пределы (расширяются). Этот параметр не гарантирует, что контур сокращается (или расширяется). Возможно, что даже с положительным значением для этого параметра, контур мог на самом деле расшириться. Однако путем определения смещения, вы замедляете расширение когда по сравнению с несмещенным контуром. Типичные значения для этого параметра между-1 и 1.

Пример: bw = activecontour(I, mask, 200, 'edge','ContractionBias',0.4);

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

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

свернуть все

Сегментированное изображение, возвращенное как двухуровневое изображение тот же размер как входное изображение A. Передний план является белым (логическая истина), и фон является черным (логическая ложь).

Советы

  • activecontour использует контуры областей в mask как начальное состояние контура от того, где эволюция запускается. mask области с отверстиями могут вызвать непредсказуемые результаты. Используйте imfill заполнять любые отверстия в областях в mask.

  • Если область касается цветов границы изображения, activecontour удаляет слой одно пикселя из области, перед последующей обработкой, так, чтобы область не касалась цвета границы изображения.

  • Чтобы получить более быстрые и более точные результаты, задайте начальное положение контура, которое является близко к контурам требуемого объекта, специально для 'edge' метод.

  • Для 'edge' метод, активный контур естественно склоняется к уменьшению внутрь (выходящий из строя). В отсутствие любого градиента изображений активный контур уменьшается самостоятельно. С другой стороны, с 'Chan-Vese' метод, где контур является несмещенным, контур, свободен или уменьшиться или расшириться на основе функций изображений.

  • Достигнуть точной сегментации с 'edge' метод, задайте начальный контур, который находится вне контуров объекта. Активный контур с 'edge' метод смещается, чтобы уменьшиться по умолчанию.

  • Если объектные области имеют существенно отличающуюся полутоновую интенсивность, 'Chan-Vese' метод [1] не может сегментировать все объекты в изображении. Например, если изображение содержит объекты, которые более ярки, чем фон и некоторые, которые являются более темными, 'Chan-Vese' метод обычно сегменты или темнота или объекты высокой яркости только.

Алгоритмы

activecontour использует метод установки уровня Разреженного Поля, похожий на метод, описанный в [3], для реализации активной эволюции контура.

Ссылки

[1] Т. Ф. Чан, Л. А. Везе, Активные контуры без ребер. Транзакции IEEE на Обработке изображений, Объем 10, Выпуск 2, стр 266-277, 2001

[2] В. Кэзелльз, Р. Киммел, Г. Сэпиро, Геодезические активные контуры. Международный журнал Компьютерного зрения, Объем 22, Выпуск 1, стр 61-79, 1997.

[3] Р. Т. Уитакер, установленный на уровень подход к 3-й реконструкции из данных об области значений. Международный журнал Компьютерного зрения, Объем 29, Выпуск 3, pp.203-231, 1998.

Смотрите также

| | | | |

Введенный в R2013a