activecontour

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

Описание

Метод active contours, также названный snakes, является итеративным выращивающим область алгоритмом сегментации изображений. Используя активный алгоритм контура, вы задаете начальные кривые на изображении и затем используете activecontour функция, чтобы развить кривые к границам объекта.

пример

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

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) задает аргументы пары "имя-значение", которые управляют различными аспектами сегментации.

Примеры

свернуть все

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

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

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

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

Сегментируйте изображение при помощи activecontour функция. По умолчанию функция развивает сегментацию через 100 итераций.

bw = activecontour(I,mask);

Отобразите результат. После 100 итераций объекты не полностью сегментируются происхождения, потому что исходный контур не близко к границам объекта.

imshow(bw)
title('Segmented Image, 100 Iterations')

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

bw = activecontour(I,mask,300);
imshow(bw)
title('Segmented Image, 300 Iterations')

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

I = imread('toyobjects.png');
imshow(I)

Чертите начальный контур близко к предмету интереса при помощи drawrectangle функция. После рисования контура создайте маску при помощи createMask функция.

r = drawrectangle;

mask = createMask(r);

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

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

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

hold on;
visboundaries(bw,'Color','r'); 

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

figure
imshow(labeloverlay(I,bw));

Загрузите 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.

Можно создать маску в интерактивном режиме при помощи объектов ROI. Например, чертите многоугольный ROI при помощи drawpolygon функция, затем создайте маску из ROI при помощи createMask функция.

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

Максимальное количество итераций, чтобы выполнить в эволюции сегментации в виде положительного целого числа. 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' и положительное число. Более высокие значения производят более сглаженные контуры области, но могут также сгладить более прекрасные детали. Нижние значения производят больше неисправностей (меньше сглаживания) в контурах области, но позволяют более прекрасным деталям быть полученными. Значением гладкости по умолчанию является 0 для 'Chan-Vese' метод и 1 для 'edge' метод.

Пример: 'SmoothFactor',1.5

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

Тенденция контура вырасти за пределы или уменьшиться внутрь в виде разделенной запятой пары, состоящей из 'ContractionBias' и числовой скаляр. Положительные значения смещают контур, чтобы уменьшиться, внутрь (сокращаются). Отрицательные величины смещают контур, чтобы вырасти, за пределы (расширяются). Этот параметр не гарантирует, что контур сокращается или расширяется. Возможно, что даже с положительным значением для этого параметра, контур мог на самом деле расшириться. Однако путем определения смещения, вы замедляете расширение когда по сравнению с несмещенным контуром. Типичные значения для этого параметра между-1 и 1. Смещением сокращения по умолчанию является 0 для 'Chan-Vese' метод и 0.3 для '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, стр 203-231, 1998.

Введенный в R2013a