2010-02-27 5 views
5

Ho una situazione abbastanza semplice. Solo non conosco termini specifici da cercare. Ho una singola immagine, in quell'immagine ho molte altre immagini che seguono uno schema di base. Sono rettangoli e probabilmente avranno un'immagine punto di riferimento su cui basare le cose. Una parte importante, è che ho bisogno di rilevare sub-immagini ruotate/scalate.Trovare immagini secondarie in un'immagine

Fondamentalmente quello che devo essere in grado di fare è dividere i 'biglietti da visita' da una singola immagine in immagini singole correttamente allineate.

Per favore scusate le mie cattive abilità di pittura! http://yfrog.com/eaproblemjj Come sto progettando anche le carte da scansionare posso inserire qualsiasi simbolo o qualcosa che possa rendere più facile il rilevamento (come ho detto un punto di riferimento)

+0

Sono tessere uniformi o stai cercando di rilevare più o meno immagini rettangolari di varie dimensioni e proporzioni? – Josh

+1

Aggiungi un'immagine di esempio alla tua domanda! Inoltre, ho capito correttamente che queste sotto-immagini sono già note in precedenza? Se no, cosa sai di loro? – AVB

+0

ho tentato di chiarire la mia domanda e ho aggiunto un orribile esempio di dolore, per favore scusate l'arte schifosa. Non so ESATTAMENTE cosa c'è nella sotto-immagine in quanto avranno alcune modifiche dell'utente, che dovrò analizzare pragmaticamente. Ma questo è facile dopo averli divisi e orientati correttamente. – Lex

risposta

2

Se il tuo esempio è rappresentativo (che dubito per qualche motivo) quindi Hough transform è tuo amico (google, ci sono un sacco di spiegazioni e codice in giro). Con esso sarai in grado di rilevare i rettangoli.

Alcuni esempi di Hough trasformano in C# sono http://www.koders.com/csharp/fid3A88BC1FF95FCA9D6A182698263A40EE7883CF26.aspx e http://www.shedletsky.com/hough/index.html

Se ciò che effettivamente accade è che la scansione di alcune carte, e si ha un certo controllo sul processo, quindi suggerirei che ci si assicura non c'è si sovrappongono tra le carte e forniscono uno sfondo a contrasto (qualcosa di molto diverso dalle carte). Quindi qualsiasi rilevamento dei bordi ti avvicina abbastanza a ciò che hai disegnato nel tuo esempio e, successivamente, puoi utilizzare la trasformazione di Hough.

In alternativa, è possibile implementare la carta http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.59.4239 che utilizza la trasformazione di Hough per rilevare direttamente i rettangoli, senza rilevamento dei bordi.

Se non ho capito il tuo problema, o hai bisogno di chiarimenti, ti preghiamo di modificare ulteriormente la tua domanda e postare un commento su questa risposta.

+0

Devo essere davvero sfortunato, ma non riesco a trovare alcun codice di esempio usando la trasformazione di Hough, ho trovato l'articolo wiki ovviamente, ma non mi sembra che mi giri attorno. In realtà non sarà in grado di controllare il processo di scansione, ad eccezione del design delle schede fisiche. Se questo aiuta, pensa solo a me che voglio prendere un'immagine scansionata di un guazzabuglio di biglietti da visita standard (possiamo supporre che siano tutti rettangoli e abbiano un logo in alto a sinistra), e li separi in carte singole orientate correttamente. – Lex

+0

Le carte saranno bianche, su sfondo nero e avranno testo/simboli neri. – Lex

+0

Vedere la risposta aggiornata. Con il bianco su nero dovresti essere OK con quasi tutti i metodi. Non sono riuscito a trovare una buona spiegazione della trasformazione di Hough online; probabilmente un libro di elaborazione delle immagini è la soluzione migliore se riesci a capirlo da ciò che è in giro per Internet. Non è una cosa banale, ma nemmeno complicata. – AVB

1

Provare AForge.NET (se si utilizza C#). Ha DocumentSkewChecker che calcolerà l'angolo dell'immagine ruotata.