Abbinamento dei contorni: ricerca dello spostamento dei contorni


17

Ho trovato contorni su due immagini con lo stesso oggetto e voglio trovare lo spostamento e la rotazione di questo oggetto. Ho provato con i riquadri di delimitazione ruotati di questi contorni e poi i suoi angoli e punti centrali, ma le rotazioni dei riquadri di delimitazione non descrivono correttamente la rotazione del contorno perché è lo stesso per gli angoli a + 0, a + 90, a + 180 ecc. gradi. C'è qualche altro buon modo per trovare la rotazione e lo spostamento dei contorni? Forse qualche uso di scafo convesso, difetti di convessità? In Apprendimento di OpenCv ho letto dei contorni corrispondenti, ma non ha aiutato. Qualcuno potrebbe fare qualche esempio?

Esempi:

1 2 3 4

Voglio rilevare ad esempio il quadrato rosa e nella seconda penna del caso. Altri esempi potrebbero essere quadrati con alcuni buchi, stelle, ecc. Come ho detto, voglio fare qualcosa di unico. Tutti i suggerimenti sono apprezzati perché voglio testare quanti più metodi possibile.


L'immagine sarebbe d'aiuto qui
mirror2image

Voglio fare una funzione universale. Quindi, come immagine di prova può essere qualsiasi cosa. Elemento a forma semplice come rettangolo o forma leggermente più complessa.
Krzych,

2
Bene, non puoi adattare il metodo singolo a tutti i casi. Il metodo pratico dipende dalla gamma di contrasto, dalla stima del rumore, dallo sfondo e dalla forma stessa - è scorrevolezza, topologia ecc. Ecco perché l'immagine potrebbe aiutare.
mirror2image

Risposte:


4

Devi preoccuparti di una differenza di scala tra i contorni? Altrimenti puoi semplicemente trovare il centroide di ogni contorno e calcolare lo spostamento sottraendo l'uno dall'altro. Quindi è possibile calcolare gli assi principali dei contorni e trovare l'angolo di rotazione tra di essi.

Se è coinvolto il ridimensionamento, è possibile calcolare il fattore di scala prendendo il rapporto degli assi principali corrispondenti.


Sì, la scala può anche differire. Ho anche pensato a qualcosa di simile alle catene da freeman di Opencv che crea catene da freeman per ogni contorno e poi le confronta e cerca di trovare la traduzione in qualche modo, ma non riesco a trovare un buon algoritmo per questo.
Krzych,

È come creare un rettangolo di selezione minimo ruotato e prenderne la rotazione e lo spostamento. Ho provato questo approccio e i risultati non sono soddisfacenti. Quindi penso che questo metodo non sia affatto buono.
Krzych,

Puoi essere più specifico sul perché non ha funzionato? I contorni sono correlati solo da traslazione, rotazione e ridimensionamento o possono essere deformati in altri modi? Alcune immagini sarebbero davvero d'aiuto. Se è necessario gestire trasformazioni non affine o rumore casuale, è possibile provare il contesto della forma. Fammi sapere, posso indicarti alcuni documenti.
Dima,

Sono collegati solo da traslazione, rotazione e ridimensionamento, le deformazioni sono collegate al rilevamento di contorni leggermente diversi su foto diverse. Modellare il contesto? Potresti espandere questo?
Krzych,

1
@kzych Sembra che il tuo problema più grande qui sia il rumore nel rilevamento dei bordi. Come si trova la casella ruotata minima? Non sono ancora chiaro perché non funzioni bene. Il contesto della forma è un modo di rappresentare un contorno. I dettagli sono qui: en.wikipedia.org/wiki/Shape_context
Dima

2

Se non devi preoccuparti di ridimensionamenti o distorsioni proiettive, i codici a catena possono essere utili qui. Se hai codici a catena approssimativamente della stessa forma con la stessa scala puoi trovare una traduzione con correlazione di fase FFT monodimensionale http://en.wikipedia.org/wiki/Phase_correlation

Se si deve tener conto della distorsione proiettiva, è possibile considerare anche la possibilità di utilizzare punti funzione (come gli angoli) anziché i contorni.


Qualche consiglio su come costruire un buon codice catena? Forse qualcosa da OpenCv (per quanto ne so ha solo catene da freeman)? Per ora sto costruendo codici a catena usando ogni punto di contorno e calcolando l'angolo rispetto all'asse x dei punti vicini, ma forse c'è qualche idea migliore? Se si fa riferimento a qualche buon documento sulle catene, sarebbe apprezzato.
Krzych,

2

Nella domanda che dici

Come ho detto, voglio fare qualcosa di unico

ma temo sia abbastanza difficile trovare una soluzione "universale" al problema.

Puoi acquistare un software di localizzazione dei modelli disponibile in commercio e integrarlo nella tua applicazione, di solito funzionano abbastanza bene per una vasta gamma di applicazioni. Giusto per darvi un'idea, questo è il manuale di riferimento per un prodotto del genere http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf

Inoltre, è possibile sviluppare una soluzione ad hoc per alcuni casi particolari (ad esempio per la penna nell'immagine).

Altrimenti puoi studiare sodo il problema, partendo dalle basi molto elementari radicate nella geometria computazionale ( http://www.cs.sunysb.edu/~algorith/files/shape-similarity.shtml ), dove vengono chiamati i tuoi "contorni" "poligono", leggendo cose come:

M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf e M. Teillaud. Calcolo della massima sovrapposizione di due poligoni convessi in fase di traduzione. Teoretical Computer Science, 31: 613–628, 1998.

e

H. Ahn, O. Cheong, C. Park, C. Shin e A. Vigneron. Massimizzare la sovrapposizione di due insiemi convessi planari con movimenti rigidi. Geometria computazionale: teoria e applicazioni, 37: 3–15, 2007.

e termina con "Gerarchical Real-Time Recognition of Compound Objects in Images" di Markus Ulrich che collabora con MVTec , un'altra software house che vende strumenti software per il riconoscimento di oggetti.

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.