Home  About me  Rubriche Links

RGBestract per windows XP, 7, 8.1, 10

Developer :
Fabio Pacioni

Data inserimento:
30/05/2021

RGBestract 3.0 (without installation)

Download RGBestract 3.0 source code - file Rar

Download sample pictures file rar

 

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.

 

< Altri software di questo tipo .... >