Jump to content

Маркировка подключенных компонентов

Маркировка связанных компонентов ( CCL ), анализ связанных компонентов ( CCA ), извлечение больших двоичных объектов , маркировка областей , обнаружение больших двоичных объектов или извлечение областей — это алгоритмическое применение теории графов , где подмножества связанных компонентов помечаются уникальным образом на основе заданной эвристики . Маркировку связанных компонентов не следует путать с сегментацией .

Маркировка связанных компонентов используется в компьютерном зрении для обнаружения связанных областей в двоичных цифровых изображениях , хотя цветные изображения и данные с более высокой размерностью. также можно обрабатывать [1] [2] При интеграции в систему распознавания изображений или интерфейс взаимодействия человека с компьютером маркировка подключенных компонентов может обрабатывать различную информацию. [3] [4] Извлечение больших двоичных объектов обычно выполняется на результирующем двоичном изображении на этапе определения порога, но оно также может быть применимо к полутоновым и цветным изображениям. Большие двоичные объекты можно подсчитывать, фильтровать и отслеживать.

Извлечение больших двоичных объектов связано с обнаружением больших двоичных объектов, но отличается от него .

4-связность
8-подключение

Граф, содержащий вершины и соединяющие ребра , строится на основе соответствующих входных данных. Вершины содержат информацию, необходимую для эвристики сравнения, а ребра указывают на связанных «соседей». Алгоритм обходит граф, маркируя вершины на основе связности и относительных значений их соседей. Возможность подключения определяется средой; графы изображений, например, могут быть 4-связными окрестностями или 8-связными окрестностями . [5]

После этапа разметки граф может быть разбит на подмножества, после чего исходная информация может быть восстановлена ​​и обработана.

Определение

[ редактировать ]

Использование термина «маркировка связанных компонентов» (CCL) и его определения вполне единообразно в академической литературе, тогда как анализ связанных компонентов (CCA) различается как с точки зрения терминологии, так и с точки зрения определения проблемы.

Розенфельд и др. [6] определяют маркировку связанных компонентов как «создание помеченного изображения, в котором позиции, связанные с одним и тем же связным компонентом двоичного входного изображения, имеют уникальную метку». Шапиро и др. [7] определить CCL как оператор, «входные данные которого представляют собой двоичное изображение, а [...] выходные данные — символическое изображение, в котором метка, присвоенная каждому пикселю, представляет собой целое число, однозначно идентифицирующее подключенный компонент, которому принадлежит этот пиксель». [8]

В научной литературе нет единого мнения по поводу определения CCA. Его часто используют как взаимозаменяемый с CCL. [9] [10] Более обширное определение дано Шапиро и др.: [7] «Анализ связанных компонентов состоит из маркировки связанных компонентов черных пикселей с последующим измерением свойств областей компонентов и принятием решений». Представленное здесь определение анализа связанных компонентов является более общим и учитывает мысли, выраженные в [7] [9] [10] во внимание.

Алгоритмы

[ редактировать ]

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

Один компонент за раз

[ редактировать ]

Это быстрый и очень простой для реализации и понимания метод. Он основан на методах обхода графов в теории графов. Короче говоря, как только первый пиксель связанного компонента найден, все связанные пиксели этого подключенного компонента помечаются, прежде чем перейти к следующему пикселю изображения. Этот алгоритм является частью алгоритма сегментации водораздела Винсента и Сойля . [11] существуют и другие реализации. [12]

Для этого формируется связанный список , в котором будут храниться индексы пикселей, связанных друг с другом (шаги (2) и (3) ниже). Метод определения связанного списка определяет использование в глубину или в ширину поиска . Для этого конкретного приложения нет никакой разницы, какую стратегию использовать. Самый простой вид очереди «последним пришел — первым обслужен» , реализованный в виде односвязного списка, приведет к стратегии поиска в глубину.

Предполагается, что входное изображение представляет собой двоичное изображение , в котором пиксели являются либо фоновым, либо передним планом, и что желательны связанные компоненты в пикселях переднего плана. Шаги алгоритма можно записать так:

  1. Начните с первого пикселя изображения. Установите текущую метку на 1. Перейдите к (2).
  2. Если этот пиксель является пикселем переднего плана и он еще не помечен, присвойте ему текущую метку и добавьте его в качестве первого элемента в очереди, затем перейдите к (3). Если это фоновый пиксель или он уже был помечен, повторите (2) для следующего пикселя изображения.
  3. Извлеките элемент из очереди и посмотрите на его соседей (на основе любого типа подключения). Если сосед является пикселем переднего плана и еще не помечен, присвойте ему текущую метку и добавьте в очередь. Повторяйте (3), пока в очереди не останется элементов.
  4. Перейдите к (2) для следующего пикселя изображения и увеличьте текущую метку на 1.

Обратите внимание, что пиксели помечаются перед помещением в очередь. В очереди будет храниться только пиксель для проверки его соседей и добавления их в очередь при необходимости. Этот алгоритм должен проверять соседей каждого пикселя переднего плана только один раз и не проверяет соседей пикселей заднего плана.

Псевдокод :

     algorithm OneComponentAtATime(data)
     input : imageData[xDim][yDim]
     initialization : label = 0, labelArray[xDim][yDim] = 0, statusArray[xDim][yDim] = false, queue1, queue2;
     for i = 0 to xDim do 
           for j = 0 to yDim do
                 if imageData[i][j] has not been processed do
                      if imageData[i][j] is a foreground pixel do
                           check it four neighbors(north, south, east, west) :
                           if neighbor is not processed do
                                if neighbor is a foreground pixel do
                                      add it to the queue1
                                else 
                                       update its status as processed
                                end if
                                labelArray[i][j] = label (give label)
                                statusArray[i][j] = true (update status)
                                While queue1 is not empty do
                                        For each pixel in the queue do :
                                        check it fours neighbors 
                                        if neighbor is not processed do
                                             if neighbor is a foreground pixel do
                                                  add it to the queue2
                                             else
                                                    update its status as processed
                                             end if
                                             give it the current label
                                             update its status as processed
                                             remove the current element from queue1
                                             copy queue2 into queue1
                                end While
                                increase the label
                                end if
                        else
                               update its status as processed
                        end if
                 end if
               end if
             end for
     end for

Двухпроходной

[ редактировать ]

Относительно простой в реализации и понимании двухпроходный алгоритм. [13] (также известный как алгоритм Хошена-Копельмана ) выполняет итерацию по двумерным двоичным данным. Алгоритм выполняет два прохода по изображению: первый проход для присвоения временных меток и записи эквивалентности, а второй проход для замены каждой временной метки наименьшей меткой ее класса эквивалентности.

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

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

Условия проверки:

  1. Имеет ли пиксель слева (запад) то же значение, что и текущий пиксель?
    1. Да , мы находимся в одном регионе. Присвойте ту же метку текущему пикселю
    2. Нет – проверьте следующее условие
  2. Оба пикселя к северу и западу от текущего пикселя имеют то же значение, что и текущий пиксель, но не ту же метку?
    1. Да . Мы знаем, что северный и западный пиксели принадлежат одному региону и должны быть объединены. Назначьте текущему пикселю минимум меток севера и запада и запишите их отношение эквивалентности.
    2. Нет – проверьте следующее условие
  3. Имеет ли пиксель слева (запад) другое значение, а пиксель севернее — то же значение, что и текущий пиксель?
    1. Да – назначить метку северного пикселя текущему пикселю.
    2. Нет – проверьте следующее условие
  4. Имеют ли северные и западные соседи пикселя значения пикселей, отличные от значений текущего пикселя?
    1. Да – создайте новый идентификатор метки и присвойте его текущему пикселю.

Алгоритм продолжает работать в том же духе и при необходимости создает новые метки регионов. Однако ключом к быстрому алгоритму является то, как осуществляется это слияние. Этот алгоритм использует структуру данных объединения-поиска , которая обеспечивает превосходную производительность для отслеживания отношений эквивалентности. [14] Функция Union-find по сути хранит метки, соответствующие одному и тому же BLOB-объекту, в структуре данных с непересекающимся набором , что позволяет легко запомнить эквивалентность двух меток с помощью метода интерфейса. Например: findSet(l). findSet(l) возвращает минимальное значение метки, эквивалентное аргументу функции «l».

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

Ниже представлен более быстрый алгоритм сканирования для извлечения связанных областей. [15]

При первом проходе:

  1. Перебирать каждый элемент данных по столбцу, а затем по строке (растровое сканирование).
  2. Если элемент не является фоном
    1. Получить соседние элементы текущего элемента
    2. Если соседей нет, уникально пометить текущий элемент и продолжить.
    3. В противном случае найдите соседа с наименьшей меткой и присвойте его текущему элементу.
    4. Сохраните эквивалентность между соседними метками

На втором проходе:

  1. Перебирать каждый элемент данных по столбцу, затем по строке.
  2. Если элемент не является фоном
    1. Переименуйте элемент с наименьшей эквивалентной меткой.

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

Графический пример двухпроходного алгоритма

[ редактировать ]

1. Массив, из которого необходимо извлечь связанные регионы, приведен ниже (на основе 8-связности).

Сначала мы присваиваем элементам графика разные двоичные значения. Значения «0~1» в центре каждого элемента на следующем графике — это значения элементов, тогда как значения «1,2,...,7» на следующих двух графиках — это метки элементов. Эти два понятия не следует путать.

2. После первого прохода генерируются следующие метки:

Всего создается 7 меток в соответствии с указанными выше условиями.

Создаваемые отношения эквивалентности меток:

Установить идентификатор Эквивалентные этикетки
1 1,2
2 1,2
3 3,4,5,6,7
4 3,4,5,6,7
5 3,4,5,6,7
6 3,4,5,6,7
7 3,4,5,6,7

3. Массив, сформированный после проведения объединения меток. Здесь значение метки, которое было наименьшим для данного региона, «растекается» по всему подключенному региону и дает две разные метки и, следовательно, две разные метки.

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

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

Псевдокод :

algorithm TwoPass(data) is
    linked = []
    labels = structure with dimensions of data, initialized with the value of Background
    NextLabel = 0

    First pass
  
    for row in data do
        for column in row do
            if data[row][column] is not Background then
  
                neighbors = connected elements with the current element's value
  
                if neighbors is empty then
                    linked[NextLabel] = set containing NextLabel
                    labels[row][column] = NextLabel
                    NextLabel += 1
  
                else
  
                    Find the smallest label
  
                    L = neighbors labels
                    labels[row][column] = min(L)
                    for label in L do
                        linked[label] = union(linked[label], L)
  
    Second pass
  
    for row in data do
        for column in row do
            if data[row][column] is not Background then
                labels[row][column] = find(labels[row][column])
  
    return labels

Алгоритмы поиска и объединения реализованы, как описано в Union find .

Последовательный алгоритм

[ редактировать ]

Создать счетчик региона

Сканируем изображение (в следующем примере предполагается, что сканирование производится слева направо и сверху вниз):

  • Для каждого пикселя проверьте северный и западный пиксель (при рассмотрении 4- связности ) или северо-восточный , северный , северо-западный и западный пиксели на 8-связность для данного критерия региона (т. е. значение интенсивности 1 в бинарном изображении или интенсивность, аналогичную связанных пикселей в полутоновом изображении).
  • Если ни один из соседей не соответствует критерию, присвойте региону значение счетчика региона. Увеличение счетчика региона.
  • Если только один сосед соответствует критерию, назначьте пиксель этой области.
  • Если несколько соседей совпадают и все являются членами одного региона, назначьте пиксель их региону.
  • Если несколько соседей совпадают и являются членами разных регионов, назначьте пиксель одному из регионов (неважно, какому). Укажите, что все эти области эквивалентны.
  • Сканируйте изображение еще раз, присвоив всем эквивалентным регионам одно и то же значение региона.

Некоторые шаги, присутствующие в двухпроходном алгоритме, могут быть объединены для повышения эффективности, что позволяет выполнить один проход по изображению. Также существуют многопроходные алгоритмы, некоторые из которых работают за линейное время относительно количества пикселей изображения. [16]

В начале 1990-х годов существовал значительный интерес к распараллеливанию алгоритмов связанных компонентов в приложениях анализа изображений из-за узких мест, связанных с последовательной обработкой каждого пикселя. [17]

Интерес к алгоритму вновь возникает при широком использовании CUDA.

Псевдокод для покомпонентного алгоритма

[ редактировать ]

Алгоритм:

  1. Матрица связных компонентов инициализируется размером матрицы изображения.
  2. Метка инициализируется и увеличивается для каждого обнаруженного объекта на изображении.
  3. Счетчик инициализируется для подсчета количества объектов.
  4. Сканирование по строкам запускается для всего изображения.
  5. Если пиксель объекта обнаружен, то следующие шаги повторяются, пока (Индекс !=0)
    1. Установите для соответствующего пикселя значение 0 в изображении.
    2. Вектор (индекс) обновляется всеми соседними пикселями текущего набора пикселей.
    3. Уникальные пиксели сохраняются, а повторяющиеся пиксели удаляются.
    4. Установите пиксели, указанные индексом, для отметки в матрице связанных компонентов.
  6. Увеличьте маркер для другого объекта на изображении.
One-Component-at-a-Time(image)
    [M, N] := size(image)
    connected := zeros(M, N)
    mark := value
    difference := increment
    offsets := [-1; M; 1; -M]
    index := []
    no_of_objects := 0

    for i: 1:M do
        for j: 1:N do
            if (image(i, j) == 1) then
                no_of_objects := no_of_objects + 1
                index := [((j-1) × M + i)]
                connected(index) := mark
                while ~isempty(index) do
                    image(index) := 0
                    neighbors := bsxfun(@plus, index, offsets)
                    neighbors := unique(neighbors(:))
                    index := neighbors(find(image(neighbors)))
                    connected(index) := mark
                end while
                mark := mark + difference
            end if
       end for
   end for

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

Оценка эффективности

[ редактировать ]

За последние два десятилетия было предложено множество новых подходов к маркировке связанных компонентов, но почти ни один из них не подвергался сравнительной оценке эффективности с использованием одного и того же набора данных. ЯККЛАБ [18] [19] (аббревиатура от «Еще один эталон маркировки связанных компонентов») — это пример среды C++ с открытым исходным кодом, которая собирает, запускает и тестирует алгоритмы маркировки связанных компонентов.

Аппаратные архитектуры

[ редактировать ]

Появление FPGA с достаточной мощностью для выполнения сложных задач по обработке изображений также привело к появлению высокопроизводительных архитектур для маркировки связанных компонентов. [20] [21] В большинстве этих архитектур используется однопроходный вариант этого алгоритма из-за ограниченных ресурсов памяти, доступных на FPGA . Эти типы архитектур маркировки связанных компонентов могут обрабатывать несколько пикселей изображения параллельно, обеспечивая тем самым высокую пропускную способность и низкую задержку обработки.

См. также

[ редактировать ]
  1. ^ Самет, Х.; Тамминен, М. (1988). «Эффективная маркировка компонентов изображений произвольной размерности, представленных линейными двоичными деревьями». Транзакции IEEE по анализу шаблонов и машинному интеллекту . 10 (4): 579. дои : 10.1109/34.3918 . S2CID   15911227 .
  2. ^ Майкл Б. Дилленкур; Ханнан Самет; Маркку Тамминен (1992). «Общий подход к маркировке связных компонентов для произвольных представлений изображений». Журнал АКМ . 39 (2): 253. CiteSeerX   10.1.1.73.8846 . дои : 10.1145/128749.128750 . S2CID   1869184 .
  3. ^ Вейцзе Чен; Мэриеллен Л. Гигер; Ульрих Бик (2006). «Подход на основе нечетких C-средних (FCM) для компьютерной сегментации образований молочной железы на МР-изображениях с динамическим контрастированием». Академическая радиология . 13 (1): 63–72. дои : 10.1016/j.acra.2005.08.035 . ПМИД   16399033 .
  4. ^ Кешэн Ву; Венди Кеглер; Жаклин Чен; Арье Шошани (2003). «Использование растрового индекса для интерактивного исследования больших наборов данных» . ССДБМ.
  5. ^ Р. Фишер; С. Перкинс; А. Уокер; Э. Вольфарт (2003). «Маркировка подключенных компонентов» .
  6. ^ Розенфельд, Азриэль; Пфальц, Джон Л. (октябрь 1966 г.). «Последовательные операции цифровой обработки изображений». Дж. АКМ . 13 (4): 471–494. дои : 10.1145/321356.321357 . ISSN   0004-5411 . S2CID   7391071 .
  7. ^ Перейти обратно: а б с Шапиро, Линда Г. (1996). «Маркировка связанных компонентов и построение графа смежности». Топологические алгоритмы цифровой обработки изображений . Машинный интеллект и распознавание образов. Том. 19. стр. 1–30. дои : 10.1016/s0923-0459(96)80011-5 . ISBN  9780444897541 .
  8. ^ Клайбер, Майкл Дж. (2016). Параллельная и ресурсоэффективная архитектура анализа связанных компонентов с единым поиском для реконфигурируемого оборудования . Университет Штутгарта.
  9. ^ Перейти обратно: а б Фу, Ю.; Чен, X.; Гао, Х. (декабрь 2009 г.). «Новый алгоритм анализа связанных компонентов на основе Max-Tree». 2009 г. Восьмая международная конференция IEEE по надежным, автономным и безопасным вычислениям . стр. 843–844. дои : 10.1109/DASC.2009.150 . ISBN  978-1-4244-5420-4 . S2CID   6805048 .
  10. ^ Перейти обратно: а б Грана, К.; Боргесани, Д.; Сантинелли, П.; Куккьяра, Р. (август 2010 г.). «Высокопроизводительная маркировка подключенных компонентов на FPGA». 2010 Семинары по приложениям баз данных и экспертных систем . стр. 221–225. дои : 10.1109/DEXA.2010.57 . ISBN  978-1-4244-8049-4 . S2CID   6905027 .
  11. ^ Винсент, Люк; Сойль, Пьер (июнь 1991 г.). «Водоразделы в цифровых пространствах: эффективный алгоритм, основанный на моделировании погружения». Транзакции IEEE по анализу шаблонов и машинному интеллекту . 13 (6): 583. дои : 10.1109/34.87344 . S2CID   15436061 .
  12. ^ Абубакер, А; Кахваджи, Р; Ипсон, С; Салех, М (2007). «Техника маркировки соединенных компонентов за одно сканирование». 2007 Международная конференция IEEE по обработке сигналов и связи . п. 1283. дои : 10.1109/ICSPC.2007.4728561 . ISBN  978-1-4244-1235-8 . S2CID   10710012 .
  13. ^ Шапиро, Л.; Стокман, Г. (2002). Компьютерное зрение (PDF) . Прентис Холл. стр. 69–73.
  14. ^ Введение в алгоритмы , [1] , стр. 498.
  15. ^ Лифэн Хэ; Юян Чао; Сузуки, К. (1 мая 2008 г.). «Алгоритм маркировки с двумя сканированиями на основе прогона». Транзакции IEEE при обработке изображений . 17 (5): 749–756. Бибкод : 2008ITIP...17..749H . дои : 10.1109/TIP.2008.919369 . ПМИД   18390379 .
  16. ^ Кенджи Сузуки; Исао Хориба; Нобору Суги (2003). «Маркировка связанных компонентов в линейном времени на основе последовательных локальных операций». Компьютерное зрение и понимание изображений . 89 : 1–23. дои : 10.1016/S1077-3142(02)00030-9 .
  17. ^ Юджи Хан; Роберт А. Вагнер (1990). «Эффективный и быстрый алгоритм параллельно-связных компонентов» . Журнал АКМ . 37 (3): 626. дои : 10.1145/79147.214077 . S2CID   17867876 .
  18. ^ Грана, К.; Болелли, Ф.; Баральди, Л.; Веццани, Р. (2016). «YACCLAB — еще один эталон маркировки подключенных компонентов» (PDF) . 23-я Международная конференция по распознаванию образов . Канкун.
  19. ^ «Еще один эталон маркировки подключенных компонентов: Prittt/YACCLAB» . Гитхаб . 18 февраля 2019 г.
  20. ^ Бейли, генеральный директор; Джонстон, Коннектикут; Ма, Ни (сентябрь 2008 г.). «Анализ связанных компонентов потоковых изображений». Международная конференция 2008 г. по полевой программируемой логике и ее приложениям . стр. 679–682. дои : 10.1109/FPL.2008.4630038 . ISBN  978-1-4244-1960-9 . S2CID   6503327 .
  21. ^ М.Дж. Клайбер; Д.Г. Бэйли; Ю. Баруд; С. Саймон (2015). «Ресурсоэффективная аппаратная архитектура для анализа связанных компонентов». Транзакции IEEE по схемам и системам видеотехнологий . 26 (7): 1334–1349. дои : 10.1109/TCSVT.2015.2450371 . S2CID   10464417 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a3aeca93341d0a3194f9a224902019bd__1703651820
URL1:https://arc.ask3.ru/arc/aa/a3/bd/a3aeca93341d0a3194f9a224902019bd.html
Заголовок, (Title) документа по адресу, URL1:
Connected-component labeling - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)