exponenta event banner

activecontour

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

Описание

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

пример

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

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

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

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

пример

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

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

BW = activecontour(___,Name,Value) указывает аргументы пары имя-значение, которые управляют различными аспектами сегментации.

Примеры

свернуть все

Чтение и отображение изображения в градациях серого.

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

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

Укажите начальный контур, окружающий интересующие объекты. Отображение контура.

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

Figure contains an axes. The axes with title Initial Contour Location contains an object of type image.

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

bw = activecontour(I,mask);

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

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

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

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

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

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

Чтение и отображение изображения в градациях серого.

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

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

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

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

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

mask = zeros(size(A));
mask(:,:,seedLevel) = 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

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

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

свернуть все

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

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

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

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

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

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

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

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

Метод активного контура, используемый для сегментации, указанный как 'Chan-Vese' или 'edge'. Энергетическая модель на основе региона Чан-Весе описана в [1]. Модель на основе ребер, аналогичная геодезическим активным контурам, описана в [2].

Для изображений RGB метод должен быть 'Chan-Vese'.

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

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

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

Пример: '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. Передний план белый (логическое значение true), а фон черный (логическое значение false).

Совет

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

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

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

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

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

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

Алгоритмы

activecontour использует метод набора уровней Sparse-Field, аналогичный описанному в [3], для реализации активной эволюции контура.

Ссылки

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

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

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

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