Как сделать De-Houghing Hough Transform'ed Image?

9

Я работаю с кодом из Rosetta Code для создания преобразования Хафа. Теперь я хочу найти все линии на изображении. Для этого мне нужны значения ρ и θ каждого из пиков в пространстве Хафа. Пример вывода для пятиугольника выглядит следующим образом:

Hough Space

Как я могу найти единственную [θ, ρ] координату для каждой из «горячих точек», видимых в пространстве Хафа?

Оспинатор
источник

Ответы:

9

Вы находите координаты пиков, а затем используете ось для масштабирования их в [θ, ρ] координаты.

В зависимости от того, насколько шумны данные, сколько ложных пиков вы ожидаете и сколько времени у вас есть, есть несколько способов сделать это. Проще всего выбрать некоторый уровень, который является реальным пиком, вырезать все данные ниже этого уровня, а затем сделать центр тяжести на каждом пике, чтобы получить его центр.

Вы также можете размыть / набрать изображение, пока каждый пик не станет одним пикселем.

Мартин Беккет
источник
1
+1 за точный ответ. Как вы определяете / вычисляете center of gravity?
Дипан Мехта
Для большей точности найдите максимум, затем подгоните параболоид к этой точке и соседним с ней точкам, затем найдите пик параболоида, который обычно будет между пикселями.
эндолит
2
@endolith - как правило, с преобразованиями Хафа точность ограничивается идентификацией краев исходного изображения и «дискретизацией» результата в пространстве Хафа. Если вам нужен более точный результат, нормально вернуться назад и повторить преобразование для более ограниченного диапазона [θ, ρ] координат, чтобы получить более высокое разрешение. Пространство вокруг выбранного решения для курса
Мартин Беккет,
@DipanMehta - просто сложите по ( значение x каждого пикселя) и (y ..), затем разделите на ширину X, Y поля, которое вы ищете, - но посмотрите комментарий к эндолиту
Мартин Беккет
2

Этот код на файловой бирже поможет вам найти все локальные максимумы. http://www.mathworks.com/matlabcentral/fileexchange/14498-local-maxima-minima

Если у вас есть знания о том, сколько линий вы хотите найти (в данном случае пять), вы просто выбираете пять локальных максимумов с самыми высокими показателями Хафа.

мола
источник
2

3×3

Вторым этапом может быть уточнение положения пика с точностью до субпикселя. Это может быть сделано путем подгонки параболы.

е(Икс)Икспе(Икс+п)

е(Икс+п)е(Икс)+пTе'(Икс)+12пTе"(Икс)+п

Корректирующий вектор тогда

пзнак равно-е"(Икс)-1е'(Икс)

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

Обратите внимание, что представляет собой матрицу Гесса а представляет собой 2-вектор (горизонтальный и вертикальный градиент), следовательно, также является 2-вектором, определяющим сдвиг субпикселя для получения точное расположение локального максимизатора.е"(Икс)2×2е'(Икс)п

Вышеприведенное уравнение может иногда приводить к сдвигам более 1 пикселя. В этом случае окрестность максимизатора не имеет параболической формы, и вы, возможно, не захотите вносить исправления или даже должны сбросить максимизатор-кандидат.

ЛИБОР
источник
0

Существует очень хорошая техника, разработанная еще в середине 80-х Геригом и Кляйном. Это процедура обратного отображения, которая анализирует пространство Хафа для определения наиболее вероятной точки, связанной с каждой точкой ребра, а затем создает второе пространство Хафа, в котором сопоставление точек ребра с параметрами является взаимно-однозначным, а не одно-многим, которое это обычный первый этап. У меня нет упоминания о руке, но я загляну в основополагающую рецензируемую статью Хаулинга «Иллингворт и Киттлер» (около 1987 года?)

helpfulHougher
источник