analisi di immagini e dati biologici intensity transformations 58 l3-1
TRANSCRIPT
Analisi di Immagini e Dati Biologici
Intensity Transformations
58L3-1
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> clfoctave: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 octaveoctave:14> clfoctave:15> imread('cameraman.tif')octave:16> imshow(img)octave:18> class(img)ans = uint8octave: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; endforendfor
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 a
maxdovrebbe 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