Як зробити De-Houghing з Хоф трансформованого зображення?


9

Я працюю з кодом, знайденим у коді Rosetta, щоб створити перетворення Хаффа. Тепер я хочу знайти всі рядки в зображенні. Для цього мені потрібні значення ρ і θ кожної з вершин у просторі Хаффа. Вибірка зразка для п’ятикутника виглядає приблизно так:

Хаф Космос

Як я можу знайти одну координату [θ, ρ] для кожної з «гарячих точок», видимих ​​у просторі Хауфа?

Відповіді:


9

Ви знаходите координати вершин, а потім використовуєте вісь, щоб масштабувати їх у [θ, ρ] координати.

Залежно від того, наскільки галасливі дані, скільки помилкових піків ви очікуєте і скільки часу у вас є, існує кілька способів зробити це. Найпростіше вибрати якийсь рівень, який є справжнім піком, вирізати всі дані нижче цього, а потім зробити центр ваги на кожному піку, щоб отримати його центр.

Ви також можете стирати / набрати зображення, поки кожен пік не буде одиничним пікселем.


1
+1 для точної відповіді. Як визначити / обчислити center of gravity?
Діпан Мехта

Для більшої точності знайдіть максимум, а потім прилаштуйте параболоїд до цієї точки та сусідніх точок, а потім знайдіть пік параболоїда, який, як правило, знаходиться між пікселями.
ендоліт

2
@endolith - як правило, з перетвореннями Хоуга точність обмежена ідентифікацією ребер у вихідному зображенні та «дискретизацією» результату в просторі Хауфа. Якщо вам потрібен більш точний результат, нормально повертатися назад і повторювати перетворення для більш обмеженого діапазону координат [θ, ρ], щоб отримати більш високу роздільну здатність. Досить простору навколо знайденого рішення курсу
Мартін Бекетт

@DipanMehta - просто підсумовуйте (x значення кожного пікселя) та (y ..), тоді розділіть на X, Y ширину вікна, яке ви шукаєте, - але дивіться коментар до ендоліту
Мартін Бекетт

2

Цей код на File Exchange допоможе вам знайти всі локальні максимуми. http://www.mathworks.com/matlabcentral/fileexchange/14498-local-maxima-minima

Якщо у вас є деякі знання про те, скільки рядків ви хочете знайти (в даному випадку - п’ять), ви просто вибираєте п'ять локальних максимумів з найвищими балами Хоф.


2

Ви можете знайти локальні максимуми для заданого радіусу. Наприклад, ви скануєте зображення Хофа, приймаючи піки як максимуми лише тоді, коли вони є максимальними в а3×3 вікно.

Другим кроком може бути уточнення положення піку до точності субпікселя. Це можна зробити, встановивши параболу.

Припустимо, що значення у зображенні Хоффа дорівнює де - 2D-положення. Тепер ви хочете знайти коригуючий вектор який максимізує . Це можна написати за допомогою розширення Тейлора:f(x)xpf(x+p)

f(x+p)f(x)+pTf(x)+12pTf(x)+p

Коригуючий вектор тоді

p=f(x)1f(x)

Похідні можна обчислити з зображення Хога шляхом кінцевої диференціації .

Зауважимо, що - матриця а - 2-вектор (горизонтальний і вертикальний градієнт), отже, також є 2-вектором, що визначає зсув пікселя для отримання точне положення локального максимізатора.f(x)2×2f'(х)p

Вищенаведене рівняння може періодично давати зсуви більш ніж на 1 піксель. У такому випадку околиця максимізатора не має параболічної форми, і ви, можливо, не захочете робити корекцію або навіть повинні скинути кандидат-максимізатор.


0

Існує дуже хороша техніка, розроблена ще в середині 80-х Герігом і Кляйн. Це процедура зворотного картографування, яка аналізує простір Хауфа для виявлення найбільш ймовірної точки, пов'язаної з кожною крайовою точкою, а потім будує другий простір Хаффа, де відображення крайових точок до параметрів є один-до-одного, а не один-до-багатьох - це звичайний перший етап. Я не маю посилання на руку, але дивіться у наглядному оглядовому документі Hough Illingworth і Kittler (про 1987 рік?)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.