Analisi di Immagini e Dati Biologici Intensity Transformations L3-1 58
Analisi di Base Assumiamo che le nostre immagini siano Immagini di intensità di luminosità (grayscale) Rappresentate da Interi senza segno [0...255] (uint8) Oppure virgola mobile doppia precisione (double) [0...1]
Conversione a grayscale Octave/Matlab usano la funzione rgb2gray → rgb2gray accetta come argomento una matrice RGB (NxMx3) → Il risultato preserva la rappresentazione binaria (uint8->uint8 etc.) → Il risultato è una matrice NxM dove per ogni pixel la terna (R,G,B) è sostituito da un unico valore di luminosità rappresentato dalla luminanza di quel colore ottenuta con la funzione rgb2ntsc La luminanza è definita da una formula che tiene in considerazione la struttura del nostro sistema percettivo Y = 0.299*R+0.587*G+0.114*B
Conversione a 'double' → mat2gray: accetta una matrice come argomento Esegue una redifinizione di scala e rappresentazione binaria restituisce una matrice di identica dimensione con rappresentazione binaria 'double' i valori di intensità sono compresi nell'intervallo [0...1] La funzione accetta un secondo argomento per immagini che hanno un range non standard e lo prende come riferimento Se l'argomento è una matrice RGB (NxMx3) mat2gray opera indipendentemente su ciascun piano di colore
Caratterizzazione di Base della Qualità: istogrammi L'istogramma Metodo basilare di caratterizzazione di un'immagine L'istogramma mostra la distribuzione all'interno del range di luminosità dello strumento dei valori dei pixel Applicazione: Esposizione: per immagini fotografiche l'istogramma permette di capire se l'immagine sarà sovraesposta o sottoesposta Contrasto: analisi, correzione Analisi della dinamica
Histograms L'istogramma si calcola percorrendo tutti i pixel e contando quanti pixel hanno un determinato valore
Image Histogram La somma dei valori dell'istogramma (integrale) è NxM (=numero di pixel dell'immagine) Semplice da calcolare per immagini uint8 Per immagini in con bit depth 16 o superiore si ricorre al binning
Image Histogram L'istogramma non è l'equivalente di un impronta digitale di un immagine Immagini completamente diverse possono avere istogrammi simili Si può costruire ad arte immagini con identico istogramma
Image Histogram Problemi con l'esposizione: Settori di un istogramma inutilizzati, altri con frequenza di valori troppo alta Soprattutto per i valori di luminosità elevata l'istogramma rileva problemi di sovraesposizione
Image Histogram
Imagine Histogram Contrasto Range effettivamente usato dei valori di un immagine Differenza tra valore massimo e valore minimo dell'intensità
Image Histogram
Image Histogram Dinamica di un immagine (Dynamic Range) La dinamica di un'immagine è data dal numero di valori di pixel distinti usati nell'immagine Maggiore è la dinamica allora maggiore... La capacità di risoluzione di differenze (in linea di principio) La capacità di miglioramento della qualità in caso di difetti di esposizione o mancanza di contrasto La possibilità di preservare qualità dell'immagine anche dopo compressione o altre elaborazioni
Image Histogram Contrasto vs. Dinamica Il contrasto può essere modificato alterando opportunamente i valori dei pixel La dinamica è una caratteristica costitutiva di un'immagine Il miglioramento della dinamica richiede tecniche di manipolazione che introducono 'nuovi' valori di pixel
Alterazione della Dinamica
Image Histogram Saturazione La saturazione avviene quando i valori di pixel agli estremi della dinamica della fotocamera sono eccessivamente popolati Inevitabile se il range di luminosità della scena/oggetto sono più grandi della dinamica del sensore
Image Histogram: alterazioni L'istogramma è un metodo semplice per rivelare alterazioni dovute a processing Effetto dell'espansione/riduzione del contrasto
Image Histogram: alterazioni Alterazioni legate alla compressione Esempio: immagine compressa dopo essere stata salvata in un file GIF
Image Histogram: alterazioni Alterazione dovute a compressione Esempio: immagine 'semplice' alterata dalla compressione interna al formato JPEG
Image Histogram La funzione imhist di Octave/Matlab octave:5> img=imread('cameraman.tif'); octave:6> imshow(img) octave:7> clf octave:8> imhist (img)
Istogramma da Immagine di microscopia AF L'istogramma di un immagine può dipendere dal tipo di tecnica usata per la raccolta di informazioni
Istogramma da Immagine di microscopia AF Istogramma logaritmico img=imread('afpict.tiff'); [counts,x]=imhist(img); stem(x,log10(counts))
Point Operation Ogni valore di pixel viene trasformato secondo una legge che dipende dal valore del pixel stesso dalle coordinate del pixel (legge non-omogenea) L'effettiva forma della trasformazione può dipendere dal primo o entrambi i criteri
Point Operation Inversione di un immagine Nell'inversione di un immagine ogni valore di pixel viene trasformato nel suo 'complementare' Per eseguire correttamente l'operazione si deve conoscere amax che dipende dal formato interno (double, unit8, unit16) Il package octave-image ha la funzione imcomplement
Inversione della luminosità Codice octave octave:14> clf octave:15> imread('cameraman.tif') octave:16> imshow(img) octave:18> class(img) ans = uint8 octave:19> invimg=255-img; octave:20> imshow(invimg)
Inversione della luminosità Il nostro occhio non ha sensibilità costante alle differenze a tutte le luminosità La capacità di discriminazione dell'occhio umano è più alta quando le intensità sono più basse
Alterazione della luminosità/contrasto Usando le operazione scalare-matrice Moltiplicazione: modifica del contrasto perchè cambia in modo diverso valori di pixel diversi Addizione: modifica della luminosità perché 'sposta' tutti i pixel dello stesso valore Se applicate usando la formula algebrica si deve tenere conto dei limiti imposti dalla rappresentazione
Manipolazione luminosità Limiti specifici dei valori di intensità di un pixel imposti dalla rappresentazione interna Le operazioni di moltiplicazione e addizione di uno scalare in generale non garantiscono il rispetto di questi limiti Octave forza gli elementi di variabili e matrici uint8 ad essere all'interno del range [0...255] Sulle matrici di intensità in formato double invece i vincoli all'interno dell'intervallo [0,1] devono essere forzati
Manipolazione Luminosità Esercizio: codice per manipolazione della luminosità di un'immagine Strategia: percorrere tutti i pixel e applicare a ciascuno di essi la trasformazione di intensità Approccio: usare due cicli for...endfor annidati Un ciclo per l'indice di riga Un ciclo per l'indice di colonna I cicli for...endfor definiscono un blocco di linee di codice che devono essere eseguite N volte
% leggiamo l'immagine dal file img=imread('afmicro.tiff'); % convertiamo l'immagine in un immagine grayscale imggr=rgb2gray(img); % questa operazione modifica la classe di imggr da uint8 a double imggr=mat2gray(imggr); % fattore di alterazione dell'intensità fattore= 1.2; % creiamo una matrice di identica dimensione imgnuova=zeros(size(imggr)); % Si procede con la modifica di ogni pixel verificando % che il risultato sia vincolato all'interno dell'intervallo % dei valori propri della rappresentazione di questa immagine (clamping) [righe colonne] = size(imggr); for riga=1:righe for colonna=1:colonne nuovo_pixel = fattore * imggr(riga,colonna); if (nuovo_pixel > 1) nuovo_pixel = 1; endif % se il fattore fosse negativo si dovrebbe verificare % anche il caso nuovo_pixel < 0 e imporre che sia uguale a zero. % In questo esempio senza pretese di generalità sappiamo che % fattore > 0 imgnuova(riga,colonna) = nuovo_pixel; endfor
Manipolazione Luminosità Secondo approccio Applicare la formula a tutta la matrice dell'immagine Selezionare gli indici degli elementi che escono dal range ammesso Assegnare ad essi il valore limite
Manipolazione luminosità % leggiamo l'immagine dal file, la convertiamo in un immagine 'grayscale' % e quindi fissiamo il valore del fattore di alterazione dell'intensità % luminosa img=imread('picts/afmicro.tiff'); imggr=rgb2gray(img); % questa operazione modifica la classe di imggr % da uint8 a double imggr=mat2gray(imggr); fattore= 1.2; imgnuova = fattore * imggr; % immagine binaria dei pixel che eccedono i valori tra [0...1] overshoots = imgnuova > 1; % la sintassi di octave accetta una matrice binaria come argomento % delle parentesi di una matrice, eseguendo un assegnazione solo % agli elementi corrispondenti agli 1 imgnuova(overshoots) = 1;
Trasformazione Logaritmica Più interessante la trasformazione logaritmica Iout=C*ln(1+a*Iin(u,v)) Regioni a luminosità più bassa acquistano dinamica a scapito delle regioni più luminose La costante a determina la curvatura La costante C determina la normalizzazione in base al valore massimo di I(u,v)
Trasformazione Logaritmica
Trasformazione Esponenziale Iout=C*((1+a)Iin(u,v) -1) Regioni a luminosità più alta acquistano dinamica a scapito delle regioni meno luminose
Trasformazione Esponenziale
Thresholding Selezione di regioni di un immagine in base ad un valore di soglia (threshold) di luminosità Determinazione 'manuale': composizione di una immagine binaria a partire da un confronto tra la matrice dell'immagine e un valore di soglia La soglia determina cosa è da considerare sfondo (background) oppure oggetto Determinazione in base a vari criteri tramite la funzione graythresh
Thresholding: Otsu method Default per graythresh Assumiamo che l'istogramma abbia un solo massimo Ogni valore di intensità definisce 2 regioni dell'istogramma La soglia calcolata con il metodo di Otsu è il valore di intensità che massimizza la varianza interclasse (e minimizza la varianza intraclasse)
Thresholding con il Metodo di Otsu im = imread('rice.png'); im = mat2gray(im); level = graythresh(im); imb = im2bw(im,level); imshow(imb)
Thresholding: confronto di vari metodi Confronto tra immagine originaria e thresholding con Otsu Intermodes Intermeans MaxEntropy
Modifica del Contrasto
Modifica automatica del Contrasto Il valori dei pixel vengono modificati in modo che il contrasto occupi tutto il range di valori disponibili Idealmente il valore amin dovrebbe essere riportato a 0, mentre il valore amaxdovrebbe essere riportato a 255 per un immagine uint8 con una legge di proporzionalità
Modifica Automatica Contrasto
Modifica Automatica del Contrasto
Modifica del Contrasto La formula di modifica automatica è sensibile singoli pixel troppo luminosi o troppo scuri Si prende quindi una frazione di tutti i pixel e si fa in modo che essa venga saturata entro 2 limiti ragionevoli di valore dell'intensità Si applica su una distribuzione così modificata la trasformazione proporzionale del contrasto
Modified Auto-Contrast
Modified Auto-Contrast img=imread(...); imgadj=imadjust(img); La funzione imadjust 'satura' l'1% dei pixel ad entrambe le code della distribuzione ed mappa il resto dell'immagine sull'intervallo [0...1]. L'immagine deve essere quindi rappresentata con questa scala e in formato double
Modified Auto-Contrast
Histogram equalization Confronto accurato di immagini analoghe Ricalcolare istogrammi in modo che sia paragonabili Analoga struttura Stesso contrasto Varie tecniche a disposizione Equalizzazione: riportare ad un andamento dato Uniforme Iperbolica Specificazione: imporre l'istogramma di una immagine data
Equalizzazione Strategia: si parte dal presupposto che una immagine di buona qualità ha un istogramma con una distribuizione (quasi) uniforme la distribuizione dei pixel non essendo continua non è possibile realizzare una distribuzione realmente Si usa una soluzione approssimata dove l'istogramma finale ha una distribuzione quasi uniforme solo “in media”
Equalizzazione Uniforme
Equalizzazione Uniforme
Equalizzazione Uniforme Function File: J = histeq (I, n) Histogram equalization of a gray-scale image. The histogram contains n bins, which defaults to 64. I: Image in double format, with values from 0.0 to 1.0 J: Returned image, in double format as well See also: imhist Package: image
Manipolazione Contrasto: altri approcci Histogram specification L'istogramma di un immagine è rimodulato in modo che abbia un andamento dato Gli istogrammi cumulativi servono a rimappare i valori
Manipolazione Contrasto: altri approcci Imposizione dell'istogramma (cumulativo) secondo un andamento linare a tratti
Manipolazione Contrasto: altri approcci
Manipolazione Contrasto: altri approcci
Manipolazione Contrasto: altri approcci Aggiustamento secondo un istogramma dato: l'istogramma della funzione originale viene collocato all'interno della funzione cumulativa di un istogramma dato