Объясните преобразование Хафа

Я просто предприимчив и делаю свой первый маленький шаг к компьютерному зрению. Я пытался реализовать преобразование Хафа самостоятельно, но я просто не понимаю всей картины. Я прочитал запись в Википедии и даже оригинальное «использование преобразования Хафа для обнаружения линий и кривых на изображениях» Ричарда Дуды и Питера Харта, но это не помогло.

Может кто-нибудь помочь объяснить мне на более дружелюбном языке?




Ответы (4)


Чаще всего линию представляют в виде прямоугольника, т. е. y = mx + b. Как говорится в статье Википедии, линия также может быть выражена в полярной форме. Преобразование Хафа использует это изменение представления (во всяком случае, для линий. Обсуждение также может быть применено к кругам, эллипсам и т. д.).

Первым шагом в преобразовании Хафа является сокращение изображения до набора ребер. Детектор краев Canny часто выбирают. Полученное изображение края служит входом для процесса Хафа.

Подводя итог, можно сказать, что пиксели, "освещенные" на краевом изображении, преобразуются в полярную форму, т. е. их положение представляется с использованием направления theta и расстояния r - вместо х и у. (Центр изображения обычно используется в качестве точки отсчета для этого изменения координат.)

Преобразование Хафа по сути представляет собой гистограмму. Предполагается, что краевые пиксели, сопоставленные с теми же значениями тета и r, определяют линию на изображении. Чтобы вычислить частоту появления, theta и r дискретизируются (разделяются на несколько бинов). После преобразования всех краевых пикселей в полярную форму бины анализируются для определения линий в исходном изображении.

Обычно ищут N наиболее часто встречающиеся параметры или пороговые параметры, значения которых меньше некоторого n игнорируются.

Я не уверен, что этот ответ лучше, чем источники, которые вы изначально представили - есть ли какой-то конкретный момент, на котором вы застряли?

person Throwback1986    schedule 17.01.2011
comment
Ваш ответ хорош. Это подтверждает то, что я читал в другом месте. Ответ Ray H, представленный ниже, также сказал то, что мне было трудно представить: рассчитываются все возможные комбинации параметров. Так что моя голова проясняется просто благодаря тому, что я слушаю ее по-разному. - person Haoest; 17.01.2011
comment
Существует классный инструмент javascript для просмотра пространства для голосования по адресу http://gmarty.github.io/hough-transform-js/ - person dooderson; 03.10.2013

Вот очень простое визуальное объяснение того, как работает преобразование Хафа для обнаружения линий на изображении:

введите здесь описание изображения

person mlai    schedule 24.11.2013
comment
Отличный пример! Там может понадобиться немного, вы упомянули о рисовании линий вдоль краев и показали эти края как точки, это нормально, но на самом деле эти линии являются лишь касательными к этим краям. - person SIslam; 06.05.2016
comment
@mlai, ты создал этот образ? Если да, то могу ли я использовать его для своих магистерских диссертаций, если нет, можете ли вы показать мне, где вы его взяли, мне это нравится?!?! Спасибо - person Scott Alistair; 17.06.2016
comment
@ScottAlistair Спасибо! Да, я создал его сам. Пожалуйста, не стесняйтесь использовать его для вашей диссертации. - person mlai; 26.07.2016
comment
Блестящее объяснение. - person Hlynur Davíð Hlynsson; 07.01.2017
comment
Это было невероятно, млаи, спасибо, что собрали это вместе. - person dward4; 26.10.2017
comment
это меняет жизнь для начинающих. - person shivam thakur; 09.02.2019

Преобразование Хафа — это способ найти наиболее вероятные значения, которые представляют линию (или круг, или многое другое).

Вы даете преобразованию Хафа изображение линии в качестве входных данных. Это изображение будет содержать два типа пикселей: те, которые являются частью линии, и те, которые являются частью фона.

Для каждого пикселя, входящего в состав строки, вычисляются все возможные комбинации параметров. Например, если пиксель с координатой (1, 100) является частью линии, то это может быть часть линии, где градиент (m) = 0, а точка пересечения с осью y (c) = 100. быть частью m = 1, c = 99; или m = 2, с = 98; или m = 3, с = 97; и так далее. Вы можете решить линейное уравнение y = mx + c, чтобы найти все возможные комбинации.

Каждый пиксель дает по одному голосу каждому из параметров (m и c), которые могли бы его объяснить. Итак, вы можете себе представить, если ваша строка содержит 1000 пикселей, то правильная комбинация m и c будет иметь 1000 голосов.

Комбинация m и c, набравшая наибольшее количество голосов, возвращается в качестве параметров строки.

person Ray Hidayat    schedule 17.01.2011

Вот еще один ракурс (использованный в пилотном эпизоде ​​телешоу Numbers): представьте, что раньше где-то на лужайке стоял похожий на фонтан дождеватель, разбрасывающий вокруг себя капли воды. Теперь разбрызгивателя нет, а капли остались. Представьте себе, что каждая капля превращается в собственный разбрызгиватель, который сам разбрасывает капли вокруг себя во всех направлениях, потому что капля не знает, откуда она пришла. Это разбросает много воды по земле, за исключением того, что будет место, где сразу много воды попадет из всех капель. Это место, где был оригинальный разбрызгиватель.

Приложение к (например) обнаружению линии аналогично. Каждая точка на изображении — это одна из исходных капель; когда он действует как разбрызгиватель, он посылает свои собственные капли, отмечая все линии, которые могут проходить через эту точку. Места, где приземляется большое количество вторичных капель, представляют собой параметры линии, проходящей через множество точек изображения — ВУАЛЯ! Линия обнаружена!

person PMar    schedule 23.11.2016