170 likes | 360 Vues
Octave/Matlab: il package IMAGE. Analisi di Immagini e Dati Biologici. 21. L6. Il package Octave-Image. Package con funzioni per il trattamento delle immagini Suggerita versione > 2.0.0 (attuale 2.1.0)
E N D
Octave/Matlab: il package IMAGE Analisi di Immagini e Dati Biologici 21 L6
Il package Octave-Image • Package con funzioni per il trattamento delle immagini • Suggerita versione > 2.0.0 (attuale 2.1.0) • Sintassi delle funzioni derivata per compatibilità con quella dell'omologo package di Matlab • Funzioni • Lettura e scrittura file grafici in diversi formati • Funzioni di analisi di un immagine sia in forma RGB che come come 'grayscale' • Supporto per • Immagini Binarie • Immagini RGB • Immagini grayscale (scala di grigi) • Immagini indexed
Matrici e Immagini • In Octave/Matlab una matrice N x M (x 3) rappresenta un immagine • Ogni elemento della matrice corrisponde ad un pixel e il valore dell'elemento è l'intensità luminosa di quel pixel • La scala di intensità cambia dipendendo dalla classe (tipo) della matrice • Immagini a colori si ottengono come sovrapposizione di piani di colore in un modello additivo di generazione dei colori • Oppure come immagini indexed dove i pixel sono indici ad una tabella di colori rappresentati in tricromia (RGB)
Immagini Binarie • Immagini dove ogni pixel è rappresentato solo dai numeri 0,1 • Sono solitamente mappe logistiche che identificano una o più regioni di un immagine. • Spesso si ottengono studiando quando condizioni sono verificate • Esempio: Regioni dove luminosità > soglia • Il tipo dati di queste mappe è 'logical' cioè un numero di tipo Booleano • La rappresentazione 'naturale' di queste immagini è quella di mettere un pixel nero per 0 e bianco per 1
Immagini RGB • Rappresentate da 3 piani quindi da una matrice NxMx3. Esempio: immagine RGB nella matrice img • img(i,j,1) rappresenta il canale del rosso (Red) • img(i,j,2) rappresenta il canale del verde (Green) • img(i,j,3) rappresenta il canale del blu (Blue) • Se classe matrice è double allora il valore deve essere un numero decimale tra [0,1] • Se classe uint8 allora dev'essere un intero [0,255] • Talvolta alcuni formati di file (e.g. PNG) memorizzano l'alpha channel che va a costituire un ulteriore layer • In questi casi la struttura della matrice è NxMx4
Immagini Grayscale • Sono immagini dove ogni pixel è rappresentato da un valore con l'intensità luminosa totale che l'ha colpito • Sono importanti per la rappresentazione di base di immagini costruite a partire dalla rilevazione di segnali non ottici, per i quali quindi non esiste una rappresentazione naturale in termini di colori • Ammettono varie rappresentazioni interne. • uint8 • double • In ambito medico e in astronomia si usano anche uint16 e uint32
Immagini Indexed • Immagini indexed • Rappresentate da una coppia di matrici • Una matrice NxM contente numeri interi rappresentati gli indici alla tavolozza (palette) • Una matrice Tx3 dove T è il numero di colori nella tavolozza • Immagini RGB possono essere convertite in immagini indexed con la funzione rgb2ind • [img,cmap]=rbg2ind(rgbimg); • Un immagine indexed può ridurre la dimensione della rappresentazione se il numero di colori/grigi non è troppo grande.
Immagini Indexed • Non permette di fare elaborazioni pixel-oriented perché l'indice che rappresenta un pixed non può direttamente essere interpretato in termini di luminosità o cromaticità • Formato che non permette di essere elaborato direttamente con filtri o altre trasformazioni • Utile per manipolare le scale cromatiche cambiando la palette (tavolozza) dei colori senza dove manipolare la pixmap
File Input/Output • File I/O • Informazioni su file grafico: imfinfo('file') octave:3> imfinfo("trigs.png") Filename = /home/manghi/Documents/imaging/lezioni/trigs.png FileModDate = 1-Apr-2013 02:37:20 FileSize = 86725 Height = 900 Width = 1200 BitDepth = 8 Format = PNG LongFormat = Portable Network Graphics XResolution = 59.060 YResolution = 59.060 TotalColors = 415 TileName = AnimationDelay = 0 AnimationIterations = 0 ByteOrder = undefined Gamma = 0 Matte = 0 ModulusDepth = 8 Quality = 75 QuantizeColors = 256 ResolutionUnits = undefined ColorType = truecolor View =
File Input/Output • File I/O • Lettura da file: img=imread('file') • Il tipo di file supportati dipende dalle librerie ed utility esterne a Octave disponibili. • Stessi formati di immagini vengono letti e interpretati con strumenti differenti tra diversi OS e anche diverse distribuzioni di Linux • E.G: File .svg vengono letti, ma su Linux il rendering non è garantito funzioni adeguatamente
File Input/Output • File I/O • Scrittura su file di un immagine • Funzione (polimorfa) imwrite • imwrite(img, filename) • imwrite(img, filename,fmt) • imwrite(img, filename, fmt, p1, v1, …) • imwrite(img, map, filename, ...)
File Input/Output • Supporto formati grafici • L'argomento 'fmt' di imwrite è una stringa che specifica quale formato deve essere usato per salvare in un file un'immagine • Se non specificato l'estensione del nome del file viene usata per determinare implicitamente il formato • Alcuni dei formati supportati • Windows bitmap: 'bmp' • Graphics Interchange Format: 'gif' • Joint Photographic Experts Group: 'jpg' o 'jpeg' • Portable Graymap: 'pgm' • Portable Network Graphics: 'pgn' • Tagged Image File Format: 'tiff'
comandi fondamentali imshow • Un comando per il display di un immagine deve esistere! • → imshow • Si appoggia ad un programma esterno per mostrare le immagini • L'argomento è una variabile che contiene una rappresentazione valida di un immagine • Se l'argomento non è una rappresentazione valida l'output è indefinito, ma non viene generato un errore • Sintassi: imshow(img)
imshow • Costruiamo un immagine 'grayscale' di dimensione 8x8 • L'immagine sara costituita da pixel di valore compreso tra 0 e 1 proporzionale alla somma degli indici della matrice • Esercizio: modificare il codice in modo da costruire una immagine 256x256 con gli stessi vincoli • Spiegare cosa accade chiamando imshow con il secondo argomento (LIMITS) come [0 0.5] oppure [0.5 1] octave:1> x=y=[1:8]; octave:2> [xx,yy]=meshgrid(x,y); octave:3> img=(xx+yy-2)/(2*max(x)-2); octave:4> imshow(img);
Immagini RGB con imshow • Costruiamo un analogo esempio per esplorare la struttura di una immagine RGB • Creiamo una immagine 8x8 RGB composta da soli 0 della dimensione corretta (come apparirà una volta passata ad imshow?) • Costruiamo un'immagine grayscale 8x8 dove il valore del pixel è il minimo tra indice di riga e colonna • Assegniamo questa matrice al canale rosso (1) • Usiamo imshow per vedere il risultato • Ruotiamo la matrice di 90 gradi antiorari e l'assegnamo al canale verde (2) • Ruotiamo la matrice di 90 gradi orari e l'assegnamo al canale blu • Usiamo imshow per vedere il risultato: un immagine dove si ottengono varie combinazioni di colori a partire dai 3 colori fondamentali + nero
Immagini RGB con imshow • Codice dell'esempio octave:1> x=y=[1:8]; octave:2> [xx,yy]=meshgrid(x,y); octave:3> rgb=zeros(8,8,3); octave:4> img=min(xx,yy)/max(x); octave:5> rgb(:,:,1)=img; octave:6> imshow(rgb) octave:7> rgb(:,:,2)=rot90(img); octave:8> rgb(:,:,3)=rot90(img,-1); octave:9> imshow(rgb) Riprodurre questo esempio per un Immagine 256x256
Funzioni di Libreria Image Package • Le funzioni di libreria sono suddivise in capitoli • Alcuni capitoli • Analysis and Statistics • Arithmetics • Black and White image functions • Enhancement and Restoration • Filtering and Transforms • Morhophological Operations • Spatial transformations • Types and Type conversions