Riconoscimento semplice della forma (disegnata a mano)

1

Come input, il programma otterrebbe un set di punti (x, y), insieme al tempo in cui è stato disegnato un determinato punto. (supponiamo su un tablet).

Limitiamoci ai semplici poligoni.

Ho implementato Trasformazione di Hough , in coordinate polari.

Punti di mappatura da (x,y) spazio a curve (r,fi) spazio.

P:(x,y)->(r,y), Re->Re^2

Definisci la funzione F

F: (r,fi)->Re che prende ogni punto in (r,fi) di spazio e restituisce il numero di curve intersecanti in quel punto. Interpretare l'immagine di F come una superficie in 3space, costruiamo un insieme E, contenente i suoi "picchi".

Problema: quando l'input è disegnato, a causa dell'errore umano, le linee sono ondulate. Ciò causa "picchi" sparsi. Anche quando si disegna una linea, i casi si verificano, dove l'elemento massimo di E si avvicina scarsamente alla direzione generale della linea disegnata.

I miei modi per provare a risolverlo:

In primo luogo ho cercato di appianare l'input prima che l'algoritmo lo ottenesse.

- Point(i)=(Point(i-1)+Point(i)+Point(i+1))/3 - > facendo una media

- Ho provato a livellarlo incollando le curve di Besier, ho preso tutti i punti di input e poi trattando ogni due vicini come i punti di confine di una curva di Besier e calcolando i due mancanti. Sistema 2n by 2n. Il problema con questo è che dovrei ridurre i punti per avere effetto.

-Al momento sto scrivendo un'implementazione del flusso di curvatura media, per provare ad usarlo per il livellamento

Due foto. Il nero è prima che il rosso sia dopo

    
posta LeastSquaresWonderer 04.08.2015 - 02:34
fonte

2 risposte

1

In primo luogo, per favore pubblica alcune immagini e i loro grafici corrispondenti dalla tua implementazione della trasformazione di Hough. Senza immagini e le loro trame, è difficile dire cosa sta succedendo - specialmente perché non esiste un codice sorgente per la critica.

Il mio sospetto è che la tua comprensione della trasformazione di Hough potrebbe non essere corretta. Quando l'input è un singolo punto nello spazio (x, y) (spaziale), l'accumulo di trasformazione di Hough risultante dovrebbe essere un grafico sinusoidale.

Ricorda che la trasformazione di Hough non è semplicemente una trasformazione nello spazio delle coordinate. È una trasformazione integrale (nota che la trasformazione di Hough e la trasformazione di Radon sono correlati), quindi il valore in un singolo punto nello spazio trasformato dipende da un integrale che gira su ogni punto nello spazio di input (x, y) .

link

Una rivelazione positiva di una singola linea si presenta sempre come una forma di "bowtie" nella zona di trasformazione di Hough, quando viene resa come un'immagine in cui l'intensità del livello di grigio è proporzionale al numero di voti ricevuti (cioè l'integrale). Si prega di fare riferimento alla trama campione nell'articolo di Wikipedia linkato sopra.

Il tuo tentativo di appianare lo spazio di trasformazione di Hough è sulla strada giusta, ma la quantità di smoothing dipende da molti fattori. È necessario creare un grafico di immagine del diagramma di trasformazione di Hough per ottimizzare la quantità di levigatura necessaria. È molto probabile che il livellamento debba essere eseguito su una finestra più grande, ad es. a seconda delle caratteristiche di input, a volte è necessaria una funzione uniforme gaussiana con sigma di 5-10 pixel.

Puoi anche confrontare l'output della tua implementazione con quello di l'output di MATLAB o OpenCV's .

Assicurati che i raccoglitori usati per l'accumulo di Hough Transform abbiano una precisione sufficiente per evitare un eccesso di valore. In parole povere, se i valori di Hough Transform sono memorizzati in "interi senza segno a 8 bit", è molto probabile che si verifichi un overflow. Qualsiasi altro tipo di dati dovrebbe andare bene.

    
risposta data 04.08.2015 - 04:00
fonte
0

Una cosa importante che puoi fare è schelizzare o erodere le tue linee larghe per ottenere quelle strette. Guarda imageJ per alcune implementazioni di erode / skeletonize. Se lo fai, la quantità di variazione dell'angolo della linea sarà ridotta. Ciò seguito da una leggera sfocatura gaussiana può aiutare a rendere i picchi più facili da rilevare.

    
risposta data 04.08.2015 - 04:17
fonte

Leggi altre domande sui tag