Come fare De-Houghing di un'immagine trasformata di Hough?


9

Sto lavorando con il codice trovato in Rosetta Code per creare una trasformazione di Hough. Ora voglio trovare tutte le linee in un'immagine. Per fare ciò ho bisogno dei valori ρ e θ di ciascuna delle vette nello spazio di Hough. Un output di esempio per un pentagono è simile al seguente:

Hough Space

Come posso trovare una singola coordinata [θ, ρ] per ciascuno dei "punti caldi" visibili nello spazio di Hough?

Risposte:


9

State trovando le coordinate dei picchi e quindi utilizzate l'asse per ridimensionarle in coordinate [θ, ρ].

A seconda della rumorosità dei dati, di quanti picchi falsi ti aspetti e di quanto tempo hai, ci sono alcuni modi per farlo. Il più semplice è scegliere un livello che sia un picco reale, tagliare tutti i dati sottostanti e quindi fare un baricentro su ciascun picco per ottenere il suo centro.

È inoltre possibile erodere / comporre l'immagine fino a quando ciascun picco è un singolo pixel.


1
+1 per una risposta precisa. Come definisci / calcoli center of gravity?
Dipan Mehta,

Per una maggiore precisione, trova il massimo, quindi adatta un paraboloide a quel punto e ai punti vicini, quindi trova il picco del paraboloide, che sarà generalmente tra i pixel.
endolito il

2
@endolith - generalmente con Hough trasforma l'accuratezza è limitata dall'identificazione dei bordi nell'immagine iniziale e dalla "discretizzazione" del risultato nello spazio di Hough. Se avete bisogno di un risultato più accurato è normale tornare indietro e rifare la trasformazione per una gamma più limitata di [θ, ρ] coordinate per ottenere una risoluzione Hough spazio maggiore intorno alla soluzione corso che hai trovato
Martin Beckett

@DipanMehta - somma semplicemente ( valore x di ogni pixel) e (y ..) quindi dividi per la larghezza X, Y della casella che stai cercando - ma vedi il commento all'endolito
Martin Beckett


2

3×3

Il secondo passo potrebbe essere il raffinamento della posizione di picco con la precisione del sub-pixel. Questo può essere fatto mediante il montaggio della parabola.

f(x)xpf(x+p)

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

Il vettore di correzione è quindi

p=f(x)1f(x)

I derivati ​​possono essere calcolati dall'immagine di Hough per differenza finita .

f(x)2×2f(x)p

L'equazione di cui sopra può occasionalmente produrre spostamenti di più di 1 pixel. In tal caso, il vicinato del massimizzatore non ha una forma parabolica e potresti non voler fare la correzione o anche perdere il massimizzatore candidato.


0

Esiste un'ottima tecnica sviluppata a metà degli anni 80 da Gerig e Klein. Si tratta di una procedura di backmapping che analizza lo spazio di Hough per identificare il punto più probabile associato a ciascun punto di spigolo e quindi costruisce un secondo spazio di Hough in cui la mappatura dei punti di spigolo ai parametri è uno a uno anziché uno a molti che è il solito primo stadio. Non ho il riferimento a portata di mano, ma guardo nel documento di revisione Hough di Illingworth e Kittler (circa 1987?)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.