Как реализовать преобразование Хафа? - PullRequest
7 голосов
/ 07 марта 2012

Как реализовать преобразование Хафа в текстовом изображении? Я ищу псевдокод (в конечном итоге это будет в Java).

Вот некоторая справочная информация:

По заданному изображению определить уравнение для линии y = mx + b. Обычно преобразование Хафа представляется в полярных координатах, таких что Rho = y*sin(theta) + x*cos(theta). (Я не совсем уверен, что значения X и Y соответствуют обратно к изображению).

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

Проблема, которую я не понимаю, заключается в том, как найти rho и theta, которыми вы бы обновили аккумулятор.

1 Ответ

5 голосов
/ 07 марта 2012

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

Так что это говорит вам, что xи y соответствуют оборотной стороне изображения.

В преобразовании Хафа основная идея состоит в том, чтобы рассматривать характеристики прямой линии не как точки изображения (x1, y1), (x2,y2), ..., но вместо этого, в терминах его параметров, таких как параметр наклона m и параметр перехвата b.

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

Параметр rho представляет расстояние между линией и началом координат, в то время кактета - это угол вектора от начала координат до этой ближайшей точки.

Это говорит о том, что rho и theta соответствуют: они являются представлением в полярных координатах наклона и пересеченияСтрока, которую вы пытаетесь описать в своем изображении.


На SourceForge вы можете найти C++ реализацию грубого преобразования.

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

Алгоритм преобразования Хафа использует массив, называемый аккумулятором, для обнаружения существования строки y= mx + b.

Например, задача линейного преобразования Хафа имеет два неизвестных параметра: m и b.

ДляАлгоритм преобразования Хафа определяет, что для каждого пикселя и его окрестности достаточно данных о наличии края в этом пикселе.Если это так, он вычислит параметры этой линии, а затем найдет ячейку аккумулятора, в которую попадают параметры, и увеличит значение этой ячейки.

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

...