Я работаю с кодом из Rosetta Code для создания преобразования Хафа. Теперь я хочу найти все линии на изображении. Для этого мне нужны значения ρ и θ каждого из пиков в пространстве Хафа. Пример вывода для пятиугольника выглядит следующим образом:
Как я могу найти единственную [θ, ρ] координату для каждой из «горячих точек», видимых в пространстве Хафа?
center of gravity
?Этот код на файловой бирже поможет вам найти все локальные максимумы. http://www.mathworks.com/matlabcentral/fileexchange/14498-local-maxima-minima
Если у вас есть знания о том, сколько линий вы хотите найти (в данном случае пять), вы просто выбираете пять локальных максимумов с самыми высокими показателями Хафа.
источник
Вторым этапом может быть уточнение положения пика с точностью до субпикселя. Это может быть сделано путем подгонки параболы.
Корректирующий вектор тогда
Производные могут быть вычислены по изображению Хафа методом конечных разностей .
Обратите внимание, что представляет собой матрицу Гесса а представляет собой 2-вектор (горизонтальный и вертикальный градиент), следовательно, также является 2-вектором, определяющим сдвиг субпикселя для получения точное расположение локального максимизатора.е''( х ) 2 × 2 е'( х ) п
Вышеприведенное уравнение может иногда приводить к сдвигам более 1 пикселя. В этом случае окрестность максимизатора не имеет параболической формы, и вы, возможно, не захотите вносить исправления или даже должны сбросить максимизатор-кандидат.
источник
Существует очень хорошая техника, разработанная еще в середине 80-х Геригом и Кляйном. Это процедура обратного отображения, которая анализирует пространство Хафа для определения наиболее вероятной точки, связанной с каждой точкой ребра, а затем создает второе пространство Хафа, в котором сопоставление точек ребра с параметрами является взаимно-однозначным, а не одно-многим, которое это обычный первый этап. У меня нет упоминания о руке, но я загляну в основополагающую рецензируемую статью Хаулинга «Иллингворт и Киттлер» (около 1987 года?)
источник