Académique Documents
Professionnel Documents
Culture Documents
N1:
Contrast Enhancement
Autore:
Valerio Colamatteo
Sommario:
Lesercitazione N 1 richiede lapplicazione dei primi rudimenti teorici appresi
dal corso afferente per la realizzazione, in ambiente di programmazione
C++/OpenCV, di alcune delle tecniche, al momento note, di trasformazione
puntuale dei valori di intensit dei pixel delle immagini.
Lambito di manovra dunque il dominio spaziale e il target operativo
dellesercitazione la manipolazione del contrasto (contrast enahncement)
dellimmagine fornita come riferimento iniziale.
Descrizione dellesercitazione
Lattivit di miglioramento (enhancement) dellimmagine trova pieno accoglimento unicamente se
relazionata alla specificit funzionale che muove lanalisi primordiale della stessa e, di riflesso, la
necessit di operare tali manipolazioni. Per quanto detto, le procedure qui applicate non vogliono e
non possono allora considerarsi come universalmente replicabili per altre tipologie di immagini. In
ragione di ci si comunque scelto di affidare allutente la scelta dei parametri coinvolti nelle
trasformazioni matematiche 1 affrontate nellesercitazione.
In tale prospettiva si intuisce immediatamente la valenza espressiva, nonch analitica, dello
strumento statistico dellistogramma. Lunge ovviamente dai presupposti redazionali di tale
elaborato unanalisi attenta delle propriet descrittive degli istogrammi nonch delle connessioni
teoriche di cui godono con la teoria della probabilit.
A motivare la scelta della visualizzazione dellistogramma come immediatamente successiva a
quella dellimmagine stessa da cui deriva, nonch come mezzo di comparazione dei risultati ottenuti
successivamente allapplicazione dellenhancement, basti dunque sapere quanto di seguito
brevemente argomentato.
Si intuisce, di fatto, sin da ora come questo lavoro sia interamente basato, in primo luogo,
sullanalisi degli istogrammi. Ci trova ragionevole causalit nelle constatazioni, di unanime
condivisione, appena formulate. La difficolt interpretativa intrinsecamente connessa ad una
valutazione oggettiva delle immagini post-trasformazione, trova per sostanziale moderazione
proprio nellanalisi degli istogrammi.
Sostanzialmente, unimmagine i cui valori di intensit dei rispettivi pixel tendano ad occupare in
maniera approssimativamente uniforme lintera gamma dei valori dellistogramma, pu essere
considerata come dotata di un elevato contrasto e dunque capace di mostrare una gamma diffusa di
tonalit di grigio 2.
Nota limmagine di partenza iniziale 3, listogramma della stessa appare immediatamente
comprensibile anche prima della sua visualizzazione. Limmagine di riferimento in scala di grigio
e presenta 256 livelli di intensit (8 bit). Dalla stessa si evincono per immediatamente due aree
cromatiche fortemente contrapposte:
-
Da tale situazione, listogramma derivante non pu dunque che presentare due picchi in
corrispondenza, rispettivamente, dei suddetti valori di intensit minima (0) e in un intorno di quello
di intensit massima (256). Si ad ogni modo deciso di escludere il valore zero 4 dalla
rappresentazione descrittiva dellistogramma, onde riuscire ad avere, per lo stesso, una maggiore
valenza qualitativa 5.
Banalmente, una valida definizione funzione di trasformazione, in questo contesto, da ritenersi sicuramente la
seguente:
(, ) = [(, )] , con: , , , 2 , 2 2
=0
=0
( 1)
= ( ) = ( 1) ==
: = 0, , 1
(1.0)
Un istogramma a valori normalizzati sarebbe dunque proprio corrispondente alla rappresentazione funzionale di
( ) rispetto a .
7
Nella sezione terza di questa relazione si trova uno specifico approfondimento sullalgoritmo determinativo
dellistogramma comulativo.
8
Allutente, ancora una volta, dunque affidato il compito di individuare, secondo una personale analisi, le coordinate
dei punti della funzione di trasformazione.
9
In particolare si implementata la formulazione implicita della retta: = + dove m il coefficiente angolare
della retta e q rappresenta il valore dellintercetta per x=0.
Per maggiori dettagli implementativi si rimanda alla sezione 3 di questa relazione e al codice
sorgente in allegato.
1) PowerLaw Transformation
Dal confronto con gli originali emergono subito delle evidenti differenze cromatiche. In
particolare una pi gamma di livelli di grigio in grado di mettere in evidenza alcune parti del
seno ex-ante completamente celati dal bianco intenso ed uniforme che contraddistingueva quella
sezione dellimmagine. Quanto gi intuitivamente evidenziabile gi alla prima occhiata diviene
invece una constatazione di fatto, rigorosa e fondata, gi anche ad una prima analisi superficiale
dellistogramma prodotto dalla trasformazione di potenza. Questultimo, infatti, a differenza
delloriginale, mostra una maggiore dispersione dei valori e un picco modale nella zona centrale
del dominio di appartenenza dei valori. Quindi il risultato sembra confermare in pieno le attese
illustrate nella sezione precedente.
2) Equalization
ben precisi, che ovviamente rifuggono da quelli che possono essere considerati i canoni estetici
e dunque dalle metriche di valutazione visiva propri di unimmagine tradizionale 11. Ci rimanda
allora, inevitabilmente, alla questione interpretativa che ha costituito il prologo concettuale di
tale relazione. C di fatto da considerare leventualit che le maggiori trasparenze
dellimmagine equalizzata, giudicate eccessive ad unanalisi prettamente estetica, siano in realt
fortemente funzionali allindividuazione di eventuali corpi estranei nel seno femminile,
motivo costituente unico e imprescindibile, questultimo, dellesistenza stessa dellimmagine in
questione.
3) Contrast - Stretching
11
******************************************************\n");
Procedura di equalizzazione dell'immagine avviata.\n");
******************************************************\n\n");
13
Le parti analizzate in questa sezione saranno semplicemente quelle parti di codice per cui si ritiene necessario fornire
un supplemento di spiegazione circa la loro fattiva implementazione. Non verranno ovviamente dibattute quelle aree di
codice ritenute di immediato recepimento funzionale per chiunque, di buon grado, posa mai voler porre attenzione su
questo lavoro per finalit e intenti che non siano ovviamente quelli direttamente riconducibili alla supervisione della
didattica.
14
Il listato delle due funzioni analogo. Lutilizzo delle stesse verr presumibilmente reiterato nelle esercitazioni a
venire, senza che per esse venga allegato alcun nuovo supplemento di notazione.
////comulative_histogram///////////////////////////////////////////////////////////////////
for ( int i=0; i < histo3.cols; i++ )
{
sum += histo3.at<float>(i);
sumhisto.at<float>(0,i) = sum;
cv::Mat imageComulativeHisto=sumhisto;
cv::Mat Image_Cum_Histo=eiid::p1::ComulativeHistogramImage(imageComulativeHisto);
eiid::imshow("Comulative Istogram",Image_Cum_Histo);
cv::imwrite("C:/Users/Valerio/Desktop/Dropbox/2014EIID/data/mammograms/Hologic/mcs/presegmentate/Image_Cum_Histo.png",Image_Cum_Histo);
//////////////////////////////////////////////////////////////////////////////////////////
for ( int i = 0; i < image.rows; i++ )
{
for ( int j = 0; j < image.cols; j++ )
{
result.at<uint8>(i,j) =
sumhisto.at<float>(image.at<uint8>(i,j)) * 255/MxN;
}
return result;
}
return histImg;
Lunica differenza rispetto alla funzione nativamente implementata nel file p0.cpp
(histogramImage()) riguarda la prima riga di codice in cui la funzione originale richiama la
funzione histogram() per la determinazione dello stesso. Nella circostanza attuale invece
listogramma di ingresso gi presente e viene fornito direttamente come parametro in ingresso
della funzione.
return (int)result;
}
prima semiretta esso risulta avere intercetta q nulla, in quanto essa ha sempre la coordinata x del
punto iniziale pari a zero. Le altre e due semirette hanno invece il parametro in questione q pari,
rispettivamente, allordinata del loro punto iniziale (s1) per la semiretta numero 2 e al punto finale
della stessa per la semiretta numero 3.
Tali considerazioni risultano (probabilmente) pi facilmente derivabili una volta operate le
immediate considerazioni geometriche del caso.
La funzione computeOutput() viene richiamata allinterno della procedura di Contrast-Stretching per
ogni valore dellistogramma dellimmagine campione.
Il listato completo della funzione in questione il seguente e con esso si chiude questa mia prima
relazione.
cv::Mat eiid::p1::ContrastStretching(const cv::Mat & image) throw (failure)
{
cv::Mat image_copy;
image.copyTo(image_copy);
std::cout<<"Inserire parametro r1.x: "<<std::endl; std::cin>>r1.x;
std::cout<<"Inserire parametro r1.y: "<<std::endl; std::cin>>r1.y;
std::cout<<"Inserire parametro s1.x: "<<std::endl; std::cin>>s1.x;
std::cout<<"Inserire parametro s1.y: "<<std::endl; std::cin>>s1.y;
// scorro i pixel dell'immagine e applico la trasformazione punto per punto,
riconducendo ogni valore dei pixel
// ad un valore specifico relativo alla semiretta di appartenenza
for(int y = 0; y < image.rows; y++){
for(int x = 0; x < image.cols; x++){
int output = computeOutput(image_copy.at<uint8>(y,x), r1.x,
s1.x, r1.y, s1.y);
image_copy.at<uint8>(y,x)= (output);
}
}
return image_copy;
}