Rilevamento della trama e proprietà della regione su un'immagine


9

Ho un problema interessante che sto cercando di risolvere. Quindi, ad esempio, se abbiamo un'immagine in bianco e nero contenente due trame (A e B), sono interessato a conoscere i valori dei pixel dei confini che coprirebbero completamente le singole trame.

Ho pensato di usare la correlazione incrociata, che mi darebbe un gruppo di posizioni, del modello (legende) sull'immagine, ma c'è un modo per usarlo per ottenere i valori in pixel dei confini (questi sono tipicamente irregolari)? Inoltre, c'è un altro modo migliore per farlo?

Un esempio del mondo reale sarebbe quello di rilevare le regioni di pioggia su una mappa che mostra tre livelli di pioggia in un anno. A ciascun livello viene assegnata una trama presente nella legenda, che viene utilizzata per la corrispondenza delle trame sulla stessa immagine.


4
Sarebbe utile se effettivamente condividessi esempi e forse alcune soluzioni preliminari che hai provato
Ivo Flipse,

3
Carica sicuramente alcune immagini di esempio in modo da capire cosa stai facendo. Come alcune regioni sono piene e altre tratteggiate? nps.gov/sagu/naturescience/images/...
endolith

Se hai matlab, puoi usare la casella degli strumenti di elaborazione delle immagini. In caso contrario, il loro sito Web offre comunque una buona panoramica degli algoritmi standard che potresti voler utilizzare, ad esempio la funzione bwconncomp .
Mr. White il

Risposte:


1

Ecco un semplice processo:

  1. Assegna misurazioni di trama a ciascuna regione dell'immagine.
  2. Utilizzare un algoritmo di etichettatura / connettività di regione (o algoritmo di espansione di regione) per unire regioni adiacenti con la stessa misura di trama.
  3. Implementa un semplice algoritmo che segue i bordi per tracciare il contorno di ogni regione.

Le misure della trama di Law sono una tecnica più vecchia ma ancora utile per determinare la trama in un'immagine e possono essere sufficienti per distinguere la trama A dalla trama B in tutta l'immagine. Vedi la sezione "Misure energetiche per la struttura delle leggi" nell'articolo di Wikipedia:

http://en.wikipedia.org/wiki/Image_texture

Come primo passo, calcola tutte le misure di trama e determina quale misura particolare (es. Bordo o spot) ti consente di distinguere una trama dall'altra più facilmente. (Se pubblichi alcune immagini, potrei aiutarti a identificare un indicatore di trama.)

Se hai solo due trame, A e B, puoi trattarle come primo piano e sfondo e funzionerà un algoritmo di etichettatura della regione standard. Per facilitare la visualizzazione di ciò che sta accadendo nell'elaborazione, è possibile generare una nuova immagine assegnando i tex A (elementi texture, piccoli pezzi di texture) al colore bianco e B tex al colore nero. Gli algoritmi di etichettatura e / o di contorno della regione troverebbero quindi le regioni bianche e nere collegate. La funzione findContours () in OpenCV funzionerà bene.

http://en.wikipedia.org/wiki/Connected-component_labeling

Lo stesso articolo di Wikipedia include sia l'algoritmo multipass tradizionale sia un algoritmo single-pass. Non ho implementato l'algoritmo single-pass qui descritto, ma ho lavorato con l'algoritmo single-pass descritto nel documento "Un algoritmo di etichettatura dei componenti usando la tecnica di tracciamento dei contorni" di Chen e Chang. L'articolo di Chen e Chang descrive anche un algoritmo standard che segue i contorni che può essere implementato rapidamente.

Se hai più di due trame, potresti usare uno spartiacque o un algoritmo di spostamento medio per raggruppare le regioni insieme dopo aver rimappato le trame ai colori. Sebbene questo rimappatura dalla trama al colore non sia necessario, semplifica il debug e la comprensione del processo.

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.