Necessaria ImageLibrary
per eseguire questo software. Download
it from here
Firma
eseguibile SHA256 ImageLibrary
f61aa7f206d1dd11f6b31b030cb8695226c6d47c77964a6835e5f5ea045a3d60
Firma
eseguibile SHA256 RGBestract 3.0
1fed6878515459a07a256ee9fd0300cc088cfae4651df10044f93fdefb963212
Questo software è un tool
per lo studio delle tecniche di base per l’estrazione dei contorni
di un immagine.
Si tratta di codice datato scritto in VB6.0 che non ha certamente la
pretesa di competere con le potenti librerie Open CV (open Computer
Vision) ma, sicuramente può rappresentare il punto di partenza
per chi volesse approfondire l’argomento.
pict 1
L’estrazione dei contorni è una
delle operazioni fondamentali che spesso è necessario implementare
in un software OCR.
Il contorno di un'immagine può essere
visto come la linea di separazione tra due zone a contrasto “elevato”
ovvero tra zone in cui i pixel hanno una marcata differenza di intensità
luminosa.
Ma vediamo meglio questo concetto.
In un’immagine in scala di grigi ogni pixel
(che compone l’immagine) è acceso con un intensità
luminosità proporzionale ad un valore numerico su di una scala
prestabilita. Assumeremo questo valore da 0 a 255
Nel caso di un'immagine a colori il discorso
è analogo poiché ogni punto può essere “acceso”
miscelando adeguatamente le tre componenti di base RGB (Red –
Green - Blue) in funzione del colore che si vuole ottenere. Ognuna di
queste componenti avrà pertanto un intensità proporzionale
ad un valore tra 0 e 255. L’immagine in pratica può essere
vista come la somma di tre immagini; una in scala del red , una in scala
del blu ed una in scala del green.
Vedere l’articolo sulla risoluzione
video per una trattazione più esaustiva sulle immagini.
L’algoritmo che useremo
Le immagini saranno rappresentate da matrici
tre matrici Mr , Mg, Mb rispettivamente per i colori Red, Green e Blue
dove ad ogni elemento in posizione x,y sulle tre matrici sono associate
le intensità del luminose del pixel Irxy, Igxx, Ibxy
Consideriamo per semplicità solo la matrice
Mr. Per le altre due il discorso sarà analogo.
Sia Mr associata all’immagine iniziale.
Sia Fr una sottomatrice 3x3 (detta finestra) il cui contenuto dipende
dalla posizione che Fr occupa su Mr. Fig.1 illustra
il concetto.
Fig 2
e Fig 3 riportano due posizioni diverse di Fr. In
Fig2 troviamo una zona uniforme dove tutti i pixel assumono
“circa lo stesso” valore di intensità. In
Fig1 invece esiste una differenza “marcata” di
intensità tra i pixel rossi (cioè accessi) e quelli grigi
perché siamo in presenza di un contorno.
Se nella matrice Fr assumiamo :
(1) D = Pi_max –
Pi_min , dove:
Pi_max è il pixel con intensità
massima
Pi_min quello con intensità minima
allora :
D sarà circa 0 nel caso di Fig2
(perché tutti i pixel hanno circa la stessa intensità)
Viceversa D sarà diverso da zero nel caso Fig1
Nel valutare D si è usata la parola “circa”.
Nell’algoritmo “traduciamo” questa parola cosi:
Sia teta la soglia
al disotto del quale la differenza di luminosità nelle finestra
Fr tra il pixel con luminosità massima e quello con luminosità
minima è ritenuta trascurabile.
Sia Pxy il pixel nell’immagine di uscita
associato alla posizione x,y della finestra Fr
(2)
se D è maggiore o uguale a teta ==> Pu=255 (caso di Fig3)
se D è minore di teta ==> Pu=0 (caso di Fig1)
Se spostiamo avanti (di un punto alla volta) la finestra Fr dalla posizione
di inizio matrice Mr fino a fine colonna per poi ricominciare con la
riga successiva e così via fino a raggiunge la posizione finale
sostituendo ogni volta ai nove pixel che la finestra cattura un pixel
con intensità ottenuta secondo le (2), avremo una matrice di
uscita ridotta di 1/3 i cui punti accesi sono solo quelli dei contorni.
Il software in oggetto esegue questa operazione
sull’immagine per estrarre i contorni. Esistono delle migliorie
per questo algoritmo che si possono implementare (come quella di andare
a vedere la direzione di max crescita dell’intensità) ma,
questa trattazione diverrebbe più complessa quindi, non ce ne
occuperemo.
Il tool permette di selezionare per Pu oltre
a quello con intensità D anche il Max , il Min. o quello con
intensità Media.
Il Software – Guida Rapida
bottone Load
:
carica la foto con dimensioni Lx H settando la dimensione max (tra L
ed H) al valore riportato nel ListBox adiacente al bottone
bottone RGB
:
produce le tre immagini RGB applicando l’algoritmo sopra illustrato
in base al valore selezionato in TypePixellSelection ma, senza applicare
la soglia ; ovvero applicando l’equazione (1)
Si possono campionare i valori R,G ,B muovendo il mouse nei riquadri
immagine relativi al fine di definire la soglia da applicare con il
bottone successivo
bottone THERESHOLD
SCAN:
produce le tre immagini RGB applicando l’algoritmo sopra illustrato
in base al valore selezionato in TypePixellSelection ed alla soglia
impostata Min Thereshold
Impostando anche il valore Max Thereshold le
relazioni (2) vengono così modificate :
se Di è compreso tra MinThereshold
e MaxThereshold ==> Pu=255
altrimenti ==> Pu=0
E’ possibile effettuare lo zoom della tre immagini Red,Green e
Blue spuntando la rispettiva casella R, G e B
E’ possibile aumentare le dimensioni delle
matrice Fr aumentando conseguentemente il il rapporto di riduzione dell’immagine
mediante i SchrollBar rate x e rate y
Considerazioni ed esempi e scelta della soglia teta
La probabilità che il processo di estrazione
del contorno vada a buon fine dipende fondamentalmente dalla scelta
del valore di soglia in relazione al tipo di immagine da analizzare.
Un valore troppo basso porta ad esaltare tutte le minime differenze
tra le
intensità luminose dei pixel; viceversa con un valore troppo
alto si rischia di
sopprimere il contorno di interesse. Vanno pertanto analizzate le zone
dell’immagine al fine di definire la soglia migliore da applicare.
Resta comunque il fatto che se questo algoritmo da un lato è
semplice dall’altro non sempre riesce da solo a raggiungere l’obiettivo
prefissato. Vediamo alcuni esempi per chiarire la questione.
Nella Pict.1 è difficoltoso
isolare i contorni della ragazza da quelli dello sfondo perché
i valori delle soglie dell’una e dell’altro sono molto simili.
Pict. 2
Si riesce invece bene nella Pict.2
perché lo sfondo è luminoso ed uniforme (con contrasti
netti e ben definiti) con un colore che differisce dai quello dei contorni
della ragazza.
Con un’opportuna soglia si riesce
sulla stesa Pict.2 ad isolare anche lo sfondo ed il
PC . Vedi Pict.3.
Pict. 3
Nella successiva Pict.4 si riescono
a mettere in evidenza i contorni delle scritte ma, anche in questo caso
non si riesce ad isolarle dallo sfondo.
Pict.4
In casi come questi si possono combinare diverse
operazioni di filtraggio preventive prima di passare all’estrazione
dei contorni. Si può provare ad esempio ad estrarre (invece che
la differenza tra il max ed il min) il pixel min, il max o il medio
della finestra Fr rispetto ad una soglia specificata.
Nella Pict.5 abbiamo effettuato questa operazione con
il risultato di uniformare il colore del corpo della ragazza.
Pict.5
Analizziamo la Pict.6. In questo
la lettera “s” della parola “Montains” cade
in una zona delle sfondo in cui i colori sono molto vicini a quelli
delle stessa lettera.
Non si riesce pertanto ad estrarre il contorno di questa lettera e neppure
parte della “n”
Pict.6
Uno ingrandimento della lettera "s" mostra ciò che
accade. Il contrasto in alcuni zone attorno alla lettera "s"
rispetto allo sfondo è praticamente nullo. In questi casi D è
circa zero. Vedi Pict.7 seguente
Pict.7
La soluzione può essere quella di filtrare
preliminarmente l’immagine estraendo la media, il max o il minimo
dei pixel. Nel caso di Pict.8 la soglia scelta con
filtro medio mette in risalto lo sfondo mentre nel caso di Pict.9
la soglia scelta con il filtro minimo evidenziano i contorni delle parole
(inclusi quelli delle lettere “n” ed “s” della
parola “Montains”)
Pict. 8
Pict.9
Riduzione del rumore
La sostituzione dei pixel nella finestra Fr con
un solo pixel rappresentativo, da una parte introduce un errore perché
elimina i dettagli all’interno della finestra ma, dall’altro
riduce il “rumore” dell’immagine perché tende
ad eliminare i punti (o insieme di punti) isolati in una misura tanto
maggiore quanto maggiore e la dimensione della finestra Fr.
L’articolo è finito. Ci sarebbero
tutta una serie di questioni da trattare circa le dimensioni della finestra
Fr in relazione alla distanza tra i contorni, al livello del dettaglio
che si vuole estrarre ed il contesto del contorno ma, questa trattazione
esula dal semplice scopo illustrativo per il quale questo articolo è
pensato.
Se siete interessati a chiarimenti potete farlo scrivendo al mio indirizzo
email.
Vi ringrazio l’attenzione ed arrivederci al prossimo articolo.