В задачах обработки и анализа изображений часто появляется необходимость разбить исходное изображение на некоторое множество связных (в пространственном смысле) областей, пиксели которых близки по некоторому признаку.
В данной статье будет произведен небольшой анализ существующих методов выделения связных областей и будет предложен расширенный и модифицированный вариант алгоритма роста регионов (region growing).
Связное множество (область) - множество пикселей, у каждого пикселя которого есть хотя бы один сосед, принадлежащий данному множеству.
Виды связности:
4 связность - соседями для пикселя считаются 4 пикселя: сверху, слева, справа, снизу.
8 связность - соседями для пикселя считаются 8
пикселей, т.е. все к нему прилежащие, в том числе и по диагонали.
![]() 4-связность | ![]() 8-связность |
Хотя основной в статье является тема сегментации цветного и полутонового изображения, тем не менее, следует рассмотреть и случай бинарного изображения, т.к. многие задачи для цветных изображений можно свести к решению задачи для бинарного изображения.
Итак, пусть у нас имеется бинарное изображение, бинарным считается изображение, состоящее из точек двух типов: фоновых точек и точек интереса. Пусть 0 - фон, 1 - объект. В данном случае разметка является однозначной при фиксированном виде связности. Существует 2 известных метода разметки: рекурсивный и итеративный.
Рекурсивный алгоритм описывается следующим псевдокодом:
void Labeling(BIT* img[], int* labels[])
{
// labels должна быть обнулена
L = 1;
for(y = 0; y < H; y++)
for(x = 0; x < W; x++)
{
Fill(img, labels, x, y, L++);
}
}
void Fill(BIT* img[], int* labels[], int x, int y, int L)
{
if( (labels[x][y] = = 0) && (img[x][y] = = 1) )
{
labels[x][y] = L;
if( x > 0 )
Fill(img, labels, x - 1, y, L);
if( x < W - 1)
Fill(img, labels, x + 1, y, L);
if( y > 0 )
Fill(img, labels, x, y - 1, L);
if( y < H - 1 )
Fill(img, labels, x, y + 1, L);
}
}
Недостатком рекурсивного метода является медленная работа и большой расход памяти. Существует и итеративный метод, который в литературе часто встречается под названием "алгоритм последовательного сканирования". Опишем и его:
Начинаем обход изображения, для определённости, из левого верхнего угла сверху вниз, справа налево. При обходе пропускаем пиксели фона. Понятно, что при таком порядке обхода у текущего рассматриваемого пикселя верхний и левый сосед уже должны быть размечены.
if A = O |
Данная группа методов несёт в себе следующую идею - изображение следует привести к бинарному простыми методами, учитывая яркость/цвет пикселей, а далее применить известные для бинарных изображений алгоритмы.
Алгоритмы, использующие только априорные знания (заданный порог яркости, заданные пороги цветовой сегментации и т.д.) крайне негибки. При изменении яркости, контрастности или цветового баланса пороги алгоритма нужно настраивать заново (вручную). Алгоритмы, адаптирующие свое поведение, основываясь на статистиках обрабатываемого изображения, обладают большей устойчивостью к изменению характеристик изображения.
Разберём работу метода на основе алгоритма k-средних.
Алгоритм k-средних в общем виде записывается следующим образом:
Дано:
Набор векторов xi, i = 1,:,p;
k - число кластеров, на которые нужно разбить набор xi;
Найти:
k средних векторов mj, j = 1,:,k (центров кластеров);
отнести каждый из векторов xi к одному из k кластеров;
Применим алгоритм к одномерному пространству яркостей пикселей, положив к = 2. В данном случае каждому пикселю соответствует один вектор пространства - его яркость После разбиения на два кластера, всем пикселям с яркостью попавшей в первый кластер присвоим чёрный цвет, а другим - белый. Рассмотрим использование бинаризации с помощью метода k-средних для нахождения чёрных маркеров на белом участке с естественным фоном.
Главным достоинством этого подхода является скорость и простота. Однако такой подход не всегда дает положительные результаты - как видно на примере алгоритм отработал не достаточно хорошо - левая чёрная полоска слилась с фоном.
Остальные методы выделение связных областей можно разделить на две группы: алгоритмы, основанные на границах областей и алгоритмы, основанные на поиске регионов непосредственно.
Данная группа алгоритмов ищет регионы по их границам. Общая схема работы данной группы методов такова:
Рассмотрим туже задачу нахождения чёрных маркеров на белом участке с естественным фоном, что и в предыдущем случае.
Выше приведены картинки, иллюстрирующие работу алгоритма, основанного на поиске границ. В данном случае для выделения границ используется высокочастотный фильтр, для бинаризации используется К-кластеризация, а выделение регионов на бинарном изображении происходит с помощью алгоритма последовательного сканирования.
Данный пример хорошо иллюстрирует достоинства и недостатки данного подхода. Подход существенно более гибок, чем простая бинаризация: изменяя параметры фильтра выделения границ, мы можем изменять чувствительность метода (в зависимости от контрастности фона и объекта). Так же алгоритм более стабилен к изменениям характеристик изображения(средняя яркость, фон, шум и т.д.), т.к. использует не фиксированный порог, а разницу яркости/цвета соседних пикселей (в данном случае энергию высоких частот).
Недостатки подхода:
Многие из этих недостатков являются следствием многоступенчатости метода. На каждом этапе мы пытаемся отбросить лишнюю, на наш взгляд, информацию и выделить полезную. Следует понимать, что каждый этап работает с некоторой ошибкой: отбрасывается часть полезной информации и не вся лишняя уходит, при этом характер ошибки каждого этапа свой, но сильно зависящий от работы предыдущего.
Данная группа пытается отыскать регионы непосредственно, в отличие от предыдущих методов. Приведём пример метода, который был разработан в нашей лаборатории.
Обозначим I - исходное изображение, (x,y) - координаты в I. I и пара (x,y) образуют множество троек (I, (x,y)). Пусть
f(I, (x,y)) → Rn
- некоторая функция, отображающая картинку I и пару координат (x,y) в пространство Rn.
Пусть v ∈ Rn - вектор в Rn, а L(v) - норма в Rn.
Пусть C - класс элементов множества (I, (x,y)), а
g(C) → Rn - функция, отображающая класс C в Rn
Пусть v1 = g(C), v2 = f(I, (x,y)),
тогда L(v1 - v2) - мера близости класса C и вектора (I, (x,y)).
Ясно, что класс C задаёт область в изображении I.
Предположим, что у нас уже существует класс C, задающий связную областью в I. Тогда будем добавлять к классу C соседние (на изображении) ему элементы (I, (x,y)) если
L(f(I, (x,y)) - g(C)) < δ,
где δ - некий выбранный нами порог.
Разберём простой случай (разбиение по яркости) :
f(I, (x,y)) - яркость пикселя с координатой (x,y),
g(C) - средняя яркость пикселей класса,
L(Rn) (Rn = R1 - одномерное пространство яркостей) - есть модуль числа.
Тогда пиксель будет отнесён к классу, если его яркость отличается от средней по классу меньше чем на δ. Такой выбор мер и отображений вполне полезен на практике, однако, общий метод позволяет получить и более интересные результаты.
Для получения более интересных результатов в качестве можно выбрать пространство статистических характеристик пикселя, например, отклонение каждой из цветовых компонент от среднего значения по окрестности, дисперсия каждой цветовой компоненты в окрестности пикселя и т.д. Также вместо простого расстояния в качестве L можно выбрать какую либо другую норму.
Существуют известные рекурсивные алгоритмы для простого случая разбиения по яркости, так называемый алгоритм роста регионов(Region Growing), который по сути мало отличается от рекурсивного алгоритма разметки бинарного изображения. Этот алгоритм несложно обобщить для случая произвольных мер и отображений. Главный недостаток рекурсивного подхода - малая скорость и ошибка переполнение стека на больших картинках. Для преодоления данных проблем автором был разработан итеративный алгоритм применимый для общего случая.
Начинаем обход, для определённости, из левого верхнего угла.
Данный алгоритм допускает различные внутренние реализации классов и отображений, но является однозначным относительно их. Стоит заметить, что алгоритм использует 4 связность, но возможна и реализация и для 8 связных областей.
Рассмотрим туже задачу нахождения чёрных маркеров на белом участке с естественным фоном, что и в предыдущем случае.

Достоинствами такого подхода являются:
Существуют также и другие методы, основанные на поиске регионов. Подробно о них можно прочитать в других источниках, например: [1], я же приведу лишь их краткое описание.
Изображение первоначально разбивается на регионы некоторым простым методом. Далее, если регион не является однородным - разбиваем его на некоторое количество подрегионов. Когда все регионы однородны, сливаем те из них которые являются соседями и вместе образуют однородный регион. Проблемы: зачастую возникают ограничения на форму регионов, также часто
Метод рассматривает только полутоновое изображение. Полутоновое изображение можно воспринимать, как некий ландшафт - чем светлей пиксель, тем выше точка поверхности. Задача сегментации сводится к нахождению областей стабильного минимума отделенных друг от друга областями стабильного максимума. Подробней о методе можно прочитать по выше приведенной ссылке.
Комментарии
5+
Спасибо. Очень интересная статья. Краткий и ёмкий обзор основных алгоритмов. 5+
Отправить комментарий