Объясните Трансформацию Хафа - PullRequest
42 голосов
/ 17 января 2011

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

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

Ответы [ 4 ]

118 голосов
/ 24 ноября 2013

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

enter image description here

38 голосов
/ 17 января 2011

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

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

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

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

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

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

15 голосов
/ 17 января 2011

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

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

Для каждого пикселя, являющегося частью линии, рассчитываются все возможные комбинации параметров. Например, если пиксель с координатой (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, которая имеет наибольшее количество голосов, - это то, что возвращается в качестве параметров строки.

1 голос
/ 23 ноября 2016

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

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

...