Подтвердить что ты не робот

Какое использование Canny перед HoughLines (opencv)?

Я новичок в обработке изображений, и я работаю над обнаружением строк в документе. Я прочитал теорию преобразования линии Hough, но я не понимаю, почему я должен использовать Canny, прежде чем называть эту функцию в opencv, как говорится во многих учебниках. Какова точка поиска ребер в этом случае? Дело в том, что если я не использую Canny или порог перед HoughLines(), результаты будут очень грязными. Я надеюсь, что кто-то объяснит мне причину, почему.

2 учебных пособий, которые я прочитал:

4b9b3361

Ответ 1

Короткий ответ

cvCanny используется для обнаружения краев, а также для увеличения контраста и устранения шума изображения. HoughLines, использующий преобразование Hough, используется для определения того, являются ли эти ребра линиями или нет. Hough Transform требует, чтобы ребра были хорошо распознаны, чтобы быть эффективными и предоставлять результаты.

Длинный ответ

Ограничения Hough Transform описаны более подробно в Википедии.

Эффективность преобразования Hough зависит от того, что бункер accuctumated pixel отличается, например. прямой контраст между пикселем и окружающими его соседями или при использовании области маски область пикселей и ее окружающие области. Если бы все пиксели имели похожие значения, то ничто не выделялось бы как линия или круг. Это приводит к уменьшению цвета (цвет в оттенки серого, оттенки серого до черного и белого), чтобы увеличить контракт.

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

Края должны быть обнаружены задолго до запуска преобразования Хафа, иначе его эффективность будет еще больше. Также шумные изображения не очень хорошо работают с преобразованием Hough, если только шум не удаляется перед началом работы.

Ответ 2

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

HoughLines() Требование к правильной работе - иметь такой вид изображения в качестве входного. Это причина, по которой вам нужно использовать Canny или Treshold, чтобы преобразовать матрицу цветного изображения в логическую.

Преобразование hough

Линия на одном снимке на самом деле является краем. Преобразование Hough сканирует все изображение и использует преобразование, которое преобразует все белые пиксельные декартовы координаты в полярных координатах; черные пиксели не учитываются. Таким образом, вы не сможете получить строку, если сначала не обнаруживаете ребра, потому что HoughLines() не знает, как вести себя, когда есть оттенки серого.

Ответ 3

Теоретически, вы правы. Поиск ребер не является абсолютно необходимым для работы алгоритма Hough Line.

То, как работает Хью, в основном, берет каждую точку и связывает ее со всеми остальными точками, и в тех точках, которые имеют большинство линий, проходящих через них, эти линии остаются. Для этого нам нужны точки. The Canny создает эти точки. Теоретически вы можете использовать любой вид фильтра - изолировать все синие или фиолетовые точки и соединить их, что угодно, но края работают хорошо.

Хью также не взвешивает свои линии или точки. Для Hough изображение является двоичным - состоящим из 1 или 0 точек или точек. Нет необходимости в оттенках серого, и canny удобно возвращает двоичные изображения.

Таким образом, Canny всегда является частью Hough.

Ответ 4

все относится к обработке двоичных данных,

сложные данные → (двоичные данные, b двоичные данные, c двоичные данные,..) (с использованием canny(), sobel() и т.д.)

двоичные данные → function1() (используя houghlines())

b двоичные данные → function2()

c двоичные данные → function3()..

двоичные данные -X- > function2()..

сложные данные -X- > function1()..

НТН