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

В OpenCV 3.0 есть функция под названием connectedComponent.

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


person user7209199    schedule 22.12.2016    source источник
comment
@Miki В opencv 3.0 есть функция connectedComponent, и я хочу знать, как это сделано и как работает. Я знаю, что он принимает входное изображение метки двоичного изображения, которое возвращается, и возможность подключения, и возвращает количество подключенных компонентов, но поскольку мне нужно написать отчет, мне нужно знать, как это работает. Спасибо   -  person user7209199    schedule 22.12.2016
comment
Не могли бы вы попытаться расширить свой вопрос. Меня особенно смущает, если кому-то вроде этого была реализована функция connectedComponent, предоставляемая библиотекой. Если вы заметите здесь явную опечатку, это прекрасно! Если нет, вы можете попробовать повторить это другими словами? В любом случае, отредактируйте свой вопрос, чтобы устранить проблему.   -  person Martin Bonner supports Monica    schedule 22.12.2016
comment
Правильно. Я разместил свой комментарий, пока вы писали свой. Как я уже сказал: пожалуйста, отредактируйте вопрос, включив в него эту информацию.   -  person Martin Bonner supports Monica    schedule 22.12.2016
comment
@MartinBonner ты понял мой комментарий?   -  person user7209199    schedule 22.12.2016
comment
Комментарий намного лучше. Совет: при общении на иностранном языке предпочитайте говорить слишком много, а не слишком мало, и повторяйте себя - это дает другим людям больше шансов догадаться, что вы имеете в виду. (Выучил, общаясь на немецком с коллегами.)   -  person Martin Bonner supports Monica    schedule 22.12.2016
comment
@MartinBonner спасибо за этот совет, но вы можете мне помочь или нет?   -  person user7209199    schedule 22.12.2016
comment
@ user7209199 Ваш комментарий довольно ясный, а текст вопроса довольно странный. Стоит отредактировать вопрос, используя содержание комментария.   -  person MBo    schedule 22.12.2016
comment
Сначала вы должны задать четкий вопрос. Вы должны изменить сам вопрос, чтобы уточнить, что вы хотите сделать. Комментарии могут быть очищены.   -  person Martin Bonner supports Monica    schedule 22.12.2016
comment
Я изменил свой вопрос. теперь кто-нибудь может ответить?   -  person user7209199    schedule 22.12.2016
comment
connectedComponents вычисляет связанные компоненты, помеченные изображением логического изображения изображения с 4- или 8-сторонней связью - возвращает N, общее количество меток [0, N-1], где 0 представляет фоновую метку. ltype указывает тип изображения выходной метки, что является важным соображением, основанным на общем количестве меток или, альтернативно, общем количестве пикселей в исходном изображении. C ++: int connectedComponents (изображение InputArray, метки OutputArray, int connectivity = 8, int ltype = CV_32S)   -  person user7209199    schedule 22.12.2016
comment
это функция, о которой я говорю, но не могу найти другой   -  person user7209199    schedule 22.12.2016


Ответы (2)


OpenCV имеет открытый исходный код. См. документацию и исходный код.

Вы можете выбрать 2 алгоритма для выполнения маркировка подключенного компонента:

  • # P3 #
    # P4 #
  • # P5 #
    # P6 #
    # P7 #

По умолчанию в OpenCV> = 3.2 (CCL_DEFAULT) используется алгоритм Ву для 4-подключений и алгоритм Граны для 8-подключений.

В OpenCV 3.0.0 вы используете алгоритм Ву как для 4, так и для 8 подключений, а в OpenCV> = 3.2 вы можете выбрать один из 3 вариантов в соответствии с полями connectivity и ccltype:

       \  connectivity   4    |   8
        \                     |
type     \                    |
                              |
CCL_DEFAULT              Wu   |  Grana
CCL_WU                   Wu   |  Wu
CCL_GRANA                Wu   |  Grana
person Miki    schedule 22.12.2016
comment
Спасибо за ответ. У вас должна быть документация по кейсу, в которой рассказывается об этом алгоритме? Я пытался поискать в Интернете, но ничего не нашел - person user7209199; 22.12.2016
comment
Вам нужно поискать лучше. Я отредактировал ответ со ссылками на статьи - person Miki; 22.12.2016
comment
еще один глупый вопрос: имея обе стратегии, как мне узнать, что было использовано? Мне очень жаль, но я новичок в этой области - person user7209199; 22.12.2016
comment
В OpenCV 3.0.0 вы используете алгоритм Ву как для 4, так и для 8 подключений. В OpenCV ›= 3.2 вы можете выбрать, какой из них использовать с полями - person Miki; 22.12.2016
comment
потому что я использовал параметры по умолчанию и в качестве подключения 4 используемый алгоритм является правильным SAUF? прости еще раз - person user7209199; 22.12.2016

Об алгоритмах маркировки подключенных компонентов можно прочитать в многочисленных источниках.

Реализация OpenCV находится здесь и содержит эту подсказку :

 //Based on "Two Strategies to Speed up Connected Components Algorithms", 
 //the SAUF (Scan array union find) variant
 //using decision trees
 //Kesheng Wu, et al

Статья

person MBo    schedule 22.12.2016
comment
Спасибо за ответ. У вас должна быть документация по кейсу, в которой рассказывается об этом алгоритме? Я пытался поискать в Интернете, но ничего не нашел - person user7209199; 22.12.2016
comment
Добавлена ​​ссылка на статью. Это было легко погуглить - person MBo; 22.12.2016
comment
еще один глупый вопрос: имея обе стратегии, как мне узнать, что было использовано? Мне очень жаль, но я новичок в этой области - person user7209199; 22.12.2016
comment
Я не знаю. Исходник 80 КБ :) - person MBo; 22.12.2016