2012-09-09 15 views
6

Desidero identificare i quadrati/i rettangoli all'interno del mio UIImageView (o UIImage).Xcode, iOS - Riconoscimento linea/forma immagine

Ho guardato "Very simple image recognition on iOS", ma non è proprio quello che sto cercando.

Al momento ho uno UIImageView che viene dato un UIImage di volta in volta.

La maggior parte degli UIImage ha riquadri neri/rettangoli come questo: img. Ma gli angoli possono (o non possono) avere bordi arrotondati.

Come posso identificare la prima dimensione del quadrato/rettangolo nero? Il risultato finale sarebbe ridimensionare il mio UIImageView per rendere il primo quadrato nero nel UIImage riempire lo schermo. In questo modo: img With iPhone

+0

Puoi semplicemente chiarire la classe di immagini che utilizzerai nella pratica? Utilizzerai letteralmente sempre riquadri neri con tutto il resto bianco o saranno, ad esempio, scatole con contenuti arbitrari circondati da un bordo nero su bianco o qualcos'altro? – Tommy

+2

per "quadrato" si intende veramente "rettangolo"? per favore chiarire ... – Felix

+0

fare un visualizzatore di fumetti? Probabilmente dovrai fare qualche riconoscimento di pattern, ma non dovrebbe essere troppo brutto se cerchi solo linee di separazione del genere. – TomSwift

risposta

10

Se le immagini saranno sempre nere nitide in una riga orizzontale, è possibile utilizzare il rilevamento degli angoli per identificare i rettangoli, quindi selezionare i quattro angoli più a sinistra. Ho tre varianti di rivelatori d'angolo nel mio framework open source GPUImage basato sui metodi di rilevamento d'angolo Harris, Noble e Shi-Tomasi.

Esecuzione di un GPUImageHarrisCornerDetectionFilter contro i tuoi scatole con una soglia di 0,4 e la sensibilità di 4,0 produce il seguente risultato:

Harris corner detection results

sono un po 'difficile da vedere, ma mirino rosso segnare in cui il rilevatore trovato gli angoli delle tue scatole. Ancora una volta, devi solo prendere i quattro punti più a sinistra per trovare il rettangolo di destinazione, quindi ridimensionare semplicemente l'immagine o la vista in modo che questo rettangolo ora riempia la tua vista.

Un esempio di come eseguire tale rilevamento di funzionalità può essere trovato nell'esempio FilterShowcase o FeatureExtractionTest all'interno del framework. Descrivo il processo con cui eseguo questo in this answer su Signal Processing.

+0

Ottima soluzione! +1 da me. Purtroppo la domanda è stata modificata per contenere anche angoli arrotondati ... –

+0

Grazie per un quadro fantastico! Tuttavia, non riesco a farlo funzionare. Ho persino provato l'esempio FeatureExtractionTest e non ha trovato alcun angolo. Ho postato la mia domanda qui (prima di vedere questo) http://stackoverflow.com/questions/18914461/gpuimage-how-to-chain-filters-with-gpuimagepicture – Mikael

+0

Sembra essere un problema iOS 7.0 ... – Mikael

-2

Da quello che ho capito sulla tua domanda, è necessario implementare lo Canny Edge Detection Algorithm per rilevare i bordi dei bordi neri nell'immagine.

Per questo è necessario utilizzare il framework di elaborazione delle immagini disponibili ai seguenti link

Utilizzare la funzione ImageWrapper *Image::cannyEdgeExtract(float tlow, float thigh) dal file Image.m.

+0

Il rilevamento dei bordi Canny non ti aiuterà in questo caso, perché dovrai definire le caselle di delimitazione definite da questi bordi. Inoltre, raccoglierà due bordi: uno per l'esterno della scatola e uno per l'interno. Un filtro di cresta sarebbe probabilmente più appropriato, ma dovrai comunque determinare le caselle da questo. –

0

Sembra soluzione più semplice sarebbe:

  1. riassumono tutti i pixel in verticale alla riga più in alto (come una tabella di Excel)
  2. righe con il più piccolo più grande valore/sono la vostra regione "gap"

larghezza può essere derivata da (2).

Problemi correlati