Sei sulla pagina 1di 77

Esercitazione in Matlab Intelligenza Artificiale

06 Dicembre 2007 Ing. G. Scarciofalo

Introduzione a Matlab
I fondamenti & LImage Processing

A cura di: SPAMPINATO CONCETTO GIACOMO SCARCIOFALO


http://campusone.ing.unict.it

Informazioni:
Email: giacomo.scarciofalo@alice.it cspampin@diit.unict.it Sito web: www.campusone.ing.unict.it Orario di ricevimento: Gioved 16:00-18:00 Studio: Dip. di Ing. Informatica e delle Telecomunicazioni, stanza Prof.A.Faro tel. 095-7382372

Introduzione:
Il programma MATLAB Il programma nato principalmente come programma destinato alla gestione di matrici. Le versioni successive sono state completate con serie di funzioni che permettono le pi le pi complesse analisi numeriche, adatte ad esempio allanalisi e alla soluzione di problemi di controllo e allimage processing.

Introduzione:

La linea di comando di MATLAB indicata da un prompt come in DOS: >> Accetta dichiarazioni di variabili, espressioni e chiamate a tutte le funzioni disponibili nel programma. Tutte le funzioni di MATLAB non sono altro che files di testo, simili a quelli che lutente pu generare con un text editor e vengono eseguite semplicemente digitandone il nome sulla linea di comando. MATLAB permette inoltre di richiamare le ultime righe di comandi inseriti usando le frecce in alto e in basso.

Help di Matlab
MATLAB presenta un help in linea con informazioni sulla sintassi di

tutte le funzioni disponibili. Per accedere a queste informazioni, basta digitare: help nome_funzione
E anche possibile avere un help di tutte le funzioni della stessa

categoria; ad esempio per sapere quale sono le funzioni per lanalisi ed il controllo dei sistemi dinamici basta digitare: help control Per sapere quali sono le categorie dei toolbox disponibili basta digitare semplicemente help

Files in Matlab
I files interpretati dal programma sono file di testo ASCII con

estensione.m; sono generati con un text editor e eseguiti in MATLAB semplicemente digitandone il nome sulla linea di comando (senza senza estensione estensione!). E possibile inserire dei commenti al loro interno precedendo ogni linea di commento con il carattere speciale percento % Attenzione!:Pu essere utile andare nelle directories dove si trova il programma ed analizzare come le varie funzioni sono state implementate. Ci possibile perch ogni funzione ed ogni comando MATLAB richiama un file.m

Punteggiatura e variabili
Le istruzioni(siano esse contenute in un file.m lanciato da MATLAB,

oppure digitate direttamente dalla linea di comando) vanno sempre terminate con un punto e virgola, altrimenti verr visualizzato il risultato dellistruzione. Esempio: var1 = 6;

Nozioni generali(1)
Alcuni costrutti in MATLAB permettono la concatenazione di diverse

istruzioni;queste vanno separate dalla virgola; Esempio: if flag ==0 istruzioni separate da virgole; end;
Le variabili seguono le regole dei linguaggi di programmazione come

Pascal o il C. MATLAB case sensitive e accetta nomi di variabili lunghi fino ad un massimo di 19 caratteri alfanumerici, con il primo obbligatoriamente alfabetico.

Nozioni generali(2)
Per visualizzare il contenuto di una variabile sufficiente digitare il

nome senza il punto e virgola sulla linea di comando;


Tutti i calcoli effettuati in MATLAB sono eseguiti in doppia

precisione, ma si possono visualizzare in formato diverso usando i comandi: format short virgola fissa con 4 decimali format long virgola fissa con 15 decimali .. .. Il risultato dellultima operazione contenuto nella variabile ans.

Comandi di uso generale


who: elenco delle variabili definite in memoria; su tutte le variabili in whos: informazioni su tutte le variabili in memoria; clear: cancella tutte le variabili in memoria o una in particolare se

specificata; save: salva tutte le variabili in memoria sul file specificato, in vari formati; load: richiama in memoria le variabili salvate sul file specificato; diary: salva sul file di testo ASCII diary quanto da quel momento appare sulla linea di comando; what: elenco di tutte le funzioni MATLAB nellarea di lavoro(estensione.m) e dei file di dati che sono stati salvati(estensione.mat).

Operatori scalari
Gli operatori disponibili sono: +,-,*,/,^, sin,cos,tan asin,acos,atan exp,log(naturale),log10(in base 10) abs,sqrt,sign

Matrici ed il loro operatori(1)


Linserimento di un vettore o di una matrice in generale viene effettuato tra parentesi quadre, separando gli elementi delle righe con spazi o virgole, e le diverse righe con punti e virgola, oppure andando a capo ad ogni nuova riga. Es. di vett riga: x = [1,2,3]; Es. di vett colonna: y = [1;4;7]; Es. di matrice A = [1 2 3;4 5 6;7 8 9]; oppure A = [1 2 3 456 7 8 9]

Matrici ed il loro operatori(2)


Per fare riferimento agli elementi di una matrice A: Lelemento a_mn indirizzato come A(m,n); es. A(2,3) = 6; La riga m-esima indirizzata come A(m,:), dove tutte le colonne sono indicate con i due punti;
La colonna n-esima indirizzata come A(:,n), dove tutte le righe sono

indicate con i due punti;

Matrici ed il loro operatori(3)


Gli operatori applicabili a matrici sono: - +- * ^ - / Divisione a destra - \Divisione a sinistra - Trasposta

Attenzione! Ricordarsi sempre che quando si fanno operazioni tra matrici importante lordine dei fattori.

Matrici ed il loro operatori(4)


Altre funzioni operanti essenzialmente sui vettori riga o colonna sono:

max, min - sort - sum, prod - Median Esistono poi particolari operatori (.*, ./,.^) che permettono di effettuare operazioni su vettori elemento per elemento, senza ricorrere a cicli. Ad esempio, se x un vettore, per moltiplicare elemento per elemento i due vettori sin(x) e cos(x) basta fare: y = sin(x) .* cos(x);
-

Matrici ed il loro operatori(5)


Altre funzioni operanti essenzialmente matrici soo: -

Inv inversa di una matrice Det determinante di una matrice Size dimensioni della matrice Rank rango di una matrice Eig autovalori ed autovettori Attenzione!:tutte le funzioni che operano su matrici hanno dei vincoli sugli operandi introdotti. Ad esempio non si pu invertire una matrice non quadrata. Per ulteriori spiegazioni usare il comando help del MATLAB.

Matrici ed il loro operatori(6)


Esistono poi varie funzioni predefinite per la creazione di matrici:

- eye(n): matrice identit n righe ed n colonne; - zeros(m.n): matrice di zero con m righe ed n colonne; - ones: matrice di uno con m righe ed n colonne; - rand:(m,n): matrice casuale di valori tra zero e uno; - diag(x): se x un vettore con n elementi, produce una matrice quadrata diagonale di dimensione n x n con gli elementi di x sulla diagonale. Se invece X una matrice quadrata di dimensione n x n produce un vettore di n elementi pari a quelli sulla diagonale di X.

If Then - Else
La forma generale del costrutto if-then-else la stessa di un qualsiasi

linguaggio di programmazione: If condizione1, operazioni1; elseif condizione2, operazioni2; else operazioni3; end;

Condizione1,2 devono essere condizioni che restituiscono come risultato vero o falso. Gli operatori disponibili per tali confronti sono: <,>,<=,>=,==, ~=,&,|, ~

Istruzioni per i cicli


I cicli si possono fare con due diversi costrutti:

for k = 1:step:n operazioni, end Il ciclo esegue operazioni separate da virgole incrementando la variabile k da uno a n con il passo indicato da step.

While condizione operazioni; end Il ciclo esegue operazioni fino a quando la condizione verificata.

Grafici(1)
La funzione plot crea grafici bidimensionali;riceve in ingresso i due vettori

della stessa lunghezza e stampa i punti corrispondenti alle coordinate fornite dai due vettori. Ad esempio se si hanno due vettori x e y, il grafico corrispondente si ottiene come: plot(x,y);
Per tracciare il grafico di una qualsiasi funzione, perci necessario crearsi un

opportuno vettore da usare come ascisse, passarlo alla funzione per ricavare il vettore delle ordinate, ed usare la funzione plot sui due vettori cos ottenuti. Ad esempio per tracciare la funzione sin(x) tra -4 e +4 si pu usare la serie di comandi:
x = -4:0.01:4; y = sin(x); plot(x,y);

Grafici(2)
Per creare grafici di colori diversi o usando caratteri diversi dal punto

si pu specificare dopo le coordinate una stringa di due elementi. Il primo il colore del grafico, il secondo il simbolo usato per contrassegnare i punti. Ad esempio plot(x,y,g+); crea un grafico in verde usando dei + al posto dei punti. Questa opzione pu essere usata nei casi dei grafici sovrapposti da stampare(se la stampante a disposizione non a colori e se non si cambia il tipo di simbolo, le differenze non sono evidenti).

Grafici(3)
Altri comandi sono: -

grid: sovrappone al grafico un grigliato title: aggiunge un titolo al disegno xlabel: aggiunge una leggenda per lasse x ylabel: aggiunge una leggenda per lasse y axis: riscalagli assi del grafico clf: cancella il grafico corrente

Il comando figure crea una nuova finestra grafica in cui far comparire il

disegno; per spostarsi sulln-esima finestra grafica, basta digitare figure(n)

Grafici(4)
Per visualizzare pi grafici sulla stessa schermata si pu usare la funzione

subplot. La funzione vuole tre parametri: il primo indica in quante parti verticali dividere lo schermo, il secondo in quante parti orizzontali, il terzo in quale parte eseguire il plot successivo. subplot(2,1,1),plot(funz1); subplot(2,1,2),plot(funz2); Creiamo in tal modo 2 finestre divise da una linea orizzontale, e visualizza in quella alta il grafico di funzione1, e in quella bassa di funzione2. Il comando hold on permette di sovrapporre 2 o pi grafici Il comando hold off elimina tale possibilit(situazione standard)

Funzioni in Matlab(1)
In MATLAB possibile creare nuove funzioni.

Basta creare il file con estensione.m e nome del file uguale a quello della funzione desiderata. La prima riga del file deve contenere il nome della funzione e gli argomenti di ingresso e di uscita. Ad esempio: function z = funzione1(a,b) Oppure function [x y] = funzione2(a,b) Risulta che funzione1 e funzione2 sono nomi di funzioni;a e b sono argomenti dingresso; x ,y e z sono argomenti duscita.

Funzioni in Matlab(2)

Le variabili utilizzate in una funzione sono locali e quindi indipendenti

da quelle dellambiente chiamante. E possibile utilizzare anche variabili globali, a patto che vengano definite come tali sia nellambiente chiamante che nella funzione, utilizzando il comando global seguito dai nomi delle variabili, separati da spazi: global f g h

Per gli Esercizi:

Si devono avere: 1) Matlab 2) Immagini esercitazione scaricabili da: http://campusone.ing.unict.it

Formati di unimmagine(1)
TheImage ProcessingToolboxdefinesfour basic types ofimages:
Binary: Logical array containing only 0s and 1s, interpreted as black and white, respectively. Also known as a bilevel image. Indexed: Array of class logical, uint8, uint16, single, or double whose pixel values are direct indices into a colormap. The colormap is an m-by-3 array of class double. Also known as a pseudocolor image. Grayscale: Array of class uint8, uint16, int16, single, or double whose pixel values specify intensity values. Also known as a intensity image Truecolor: m-by-n-by-3 array of class uint8, uint16, single, or double whose pixel values specify intensity values. Also known as an RGB image.

Formati di unimmagine(2)

Formati di unimmagine(3)
Converting Between Image Types:
dither : Create a binary image from a a grayscale image by dithering or create an indexed image image from a truecolor image by dithering gray2ind : Create an indexed image from a grayscale image grayslice Create an indexed image from a grayscale image by image by thresholding im2bw : Create a a binary image from a grayscale image, indexed image, or truecolor image, based on a luminance on threshold ind2gray : Create a grayscale image from an indexed image ind2rgb : Create a truecolor image from an indexed image image mat2gray : Create a a grayscale image from data in a matrix, by scaling the data

Lettura di unimmagine
imread = Read image from graphics file. usage: >> A = imread(FILENAME,FMT)

where: FILENAME una stringa (ex. img01.jpg) contenente il nome del file da leggere. FMT una stringa contenente la sigla del formato dellimmagine. Principali formati supportati:JPG,TIF,BMP,...

Lettura di unimmagine
imread = Read image from graphics file. usage: >> A = imread(FILENAME,FMT) rgb2gray = Convert a color image in grayscale.
close all % chiude tutte le finestre clear all % pulisce la memoria di Matlab clc %pulisce il command window

figure, I = imread('lena.jpg'); % Apre una nuova figura eleggo l'immagine imshow(I); I_gray = rgb2gray(I); figure,imshow(I_gray);title('Img a toni di grigio');

Somma di due Immagini


I = imread('rice.png'); J = imread('cameraman.tif'); Somma1 = imadd(I,J); figure, imshow(Somma1);title('Somma1'); Somma2 = I + J; figure, imshow(Somma2); title('Somma2');

Differenza di due Immagini


I = imread('rice.png'); background = imopen(I,strel('disk',15)); Ip = imsubtract(I,background); imshow(I), figure, imshow(Ip);

Not logico
Original = imread('prova1_bnrect.jpg'); Original = rgb2gray(Original); %thresholding [righe colonne]=size(Original); Original_binarizzata =Original; for i=1:righe for j=1:colonne if(Original_binarizzata(i,j)>200) Original_binarizzata(i,j) = 1; else Original_binarizzata(i,j)=0; end end end figure,imshow(Original);title('Img originale'); figure,imshow(Original_binarizzata);title('Img binarizzata'); Not_Img = not(Original_binarizzata); figure,imshow(Not_Img);title('Img Not'); And_Image = Original_binarizzata & Not_Img; figure,imshow(And_Image);title('Img AND'); OR_Image = or(Original_binarizzata,Not_Img); figure,imshow(OR_Image);title('Img OR');

And logico tra Immagini


clc close all clear all I1 = imread('Immagine1.jpg'); I2 = imread('Immagine2.jpg'); I1 = rgb2gray(I1); I2 = rgb2gray(I2); I1=imresize(I1,[255,255]); I2=imresize(I2,[255,255]); %thresholding [righe colonne]=size(I1); Original_binarizzata1 =I1; Original_binarizzata2 =I2; for i=1:righe for j=1:colonne if(Original_binarizzata1(i,j)>200) Original_binarizzata1(i,j) = 255; else Original_binarizzata1(i,j)=0; end end end for i=1:righe for j=1:colonne if(Original_binarizzata2(i,j)>200) Original_binarizzata2(i,j) = 255; else Original_binarizzata2(i,j)=0; end end end figure,imshow(I1);title('Img originale1'); figure,imshow(Original_binarizzata1);title('Img binarizzata1'); figure,imshow(I1);title('Img originale2'); figure,imshow(Original_binarizzata1);title('Img binarizzata2'); And_Image = Original_binarizzata1 & Original_binarizzata2; figure,imshow(And_Image);title('Img AND'); OR_Image = or(Original_binarizzata1,Original_binarizzata2); figure,imshow(OR_Image);title('Img OR');

And logico tra Immagini

Thresholding statico
clc clear all close all Original=imread('lena.jpg'); imshow(Original); Original=rgb2gray(Original); figure,imshow(Original); Original_binarizzata = Original;Original_binarizzata2 = Original; [righe colonne]=size(Original); for i=1:righe for j=1:colonne if(Original_binarizzata(i,j)>200) Original_binarizzata(i,j) = 255; else Original_binarizzata(i,j)=0; end end end figure,imshow(Original_binarizzata);title('binarizz. soglia=200');

for i=1:righe for j=1:colonne if(Original_binarizzata2(i,j)>100) Original_binarizzata2(i,j) = 255; else Original_binarizzata2(i,j)=0; end end end figure,imshow(Original_binarizzata2);title('binarizz. soglia=100');

Negativo di un Immagine
for i=1:righe for j=1:colonne New_Original_binarizzata(i,j) = 255 - 1 - Original_binarizzata(i,j); end end figure,imshow(New_Original_binarizzata);title('NEGATIVO');

fspecial
fspecial = Permette di creare dei particolari filtri bidimensionali
'average' averaging filter 'disk' circular averaging filter

'gaussian' Gaussian lowpass filter 'laplacian' filter approximating the 2-D Laplacian operator 'log' Laplacian of Gaussian filter

H = FSPECIAL('prewitt') returns 3-by-3 filter that emphasizes horizontal edges by approximating a vertical gradient. If you need to emphasize vertical edges, transpose the filter H: H'. [1 1 1;0 0 0;-1 -1 -1].

fspecial
function [ImmagineFiltrata] = filtro_gaussiano(Immagine, kernel_size) h = fspecial('gaussian', [ kernel_size kernel_size]); ImmagineFiltrata = filter2(h,Immagine); function [ImmagineFiltrata] = filtro_laplaciano(Immagine) h = fspecial('laplacian'); ImmagineFiltrata = filter2(h,Immagine); function [ImmagineFiltrata] = filtro_media(Immagine, kernel_size) h = fspecial('average', [ kernel_size kernel_size ]); ImmagineFiltrata = filter2(h,Immagine); function [ImmagineFiltrata] = filtro_mediano(Immagine, m, n) ImmagineFiltrata = medfilt2(uint8(Immagine),[m n]); function [ImmagineFiltrata] = filtro_prewitt(Immagine) h = fspecial('prewitt'); ImmagineFiltrata = filter2(h,Immagine); function [ImmagineFiltrata] = filtro_sobel(Immagine) h = fspecial('sobel'); ImmagineFiltrata = filter2(h + h',Immagine);

Imnoise
imnoise = Add noise to image usage: >> J = IMNOISE(I,TYPE,...) vari tipi di rumore: 'gaussian
'localvar'

Rumore bianco gaussiano a media e varianza costanti La varianza dipende dallintensit

'salt & pepper' Rumore sale e pepe 'speckle' Rumore moltiplicativo

Imfilter
imfilter = Permette di filtrare unimmagine multidimensionale

IMFILTER N-D filtering of multidimensional images. B = IMFILTER(A,H) filters the multidimensional array A with the multidimensional filter H. A can be logical or it can be a nonsparse numeric array of any class and dimension. The result, B, has the same size and class as A.

Rumore Casuale
clc clear all close all img = imread('lena.jpg'); img = rgb2gray(img); img = imresize(img,[255 255]); img_rumore_casuale =uint8(rand(size(img))*255);%generiamo una matrice i cui valori sono compresi tra 0 ed 1 contenente solo rumore i quali sono equiprobabili e equidistribuiti imshow(img);title('Immagine iniziale'); figure,imshow(img_rumore_casuale);title('Solo rumore casuale'); somma = img + img_rumore_casuale;%sommiamo allimg il rumore generato figure,imshow(somma);title('Immagine rumorosa');

Rumore Gaussiano
clc clear all close all img = imread('lena.jpg'); img = rgb2gray(img); h = fspecial('gaussian', [ 3 3]); Immagine_rumorosa = imnoise(img, 'gaussian'); ImmagineFiltrata = filter2(h,img); ImmagineFiltrata = uint8(ImmagineFiltrata); imshow(img);title('Immagine originale'); figure,imshow(Immagine_rumorosa);title('Immagine Rumorosa'); figure,imshow(ImmagineFiltrata);title('Filtrata');

Rumore Salt & Pepper


clc clear all close all img = imread('lena.jpg'); img = rgb2gray(img); h = fspecial('gaussian', [ 3 3]); Immagine_rumorosa = imnoise(img,'salt & pepper', 0.02); ImmagineFiltrata = filter2(h,img); ImmagineFiltrata = uint8(ImmagineFiltrata); imshow(img);title('Immagine originale'); figure,imshow(Immagine_rumorosa);title('Immagine Rumorosa'); figure,imshow(ImmagineFiltrata);title('Filtrata');

Mean Filter
I = imread('lena.jpg'); h = ones(7,7)/49; I3 = imfilter(I,h); %IMFILTER Multidimensional image filtering. imshow(I); title('Immagine Originale 2'); figure; imshow(I3); title('Immagine Filtrata 2'); oppure usando il comando fspecial close all clc clear all I = imread('lena.jpg'); % I2=rgb2gray(I); Filtro_m=fspecial('average',[7 7]); %Le dimensioni di default sono 3x3. %Limmagine poi mediata con il comando seguente: I_mediata=imfilter(I,Filtro_m); imshow(I);title('Img originale'); figure,imshow(I_mediata);

Mean Filter(fspecial)
H = fspecial('average',HSIZE) returns an averaging filter H of size HSIZE. HSIZE can be a vector specifying the number of rows and columns in H or a scalar, in which case H is a square matrix. The default HSIZE is [3 3]. H = fspecial('disk',RADIUS) returns a circular averaging filter (pillbox) within the square matrix of side 2*RADIUS+1. The default RADIUS is 5.

Median Filter
medfilt= Esegue un filtraggio MEDIANO bi-dimensionale
close all clc clear all I = imread('lena.jpg'); I2=rgb2gray(I); J = imnoise(I2,'salt & pepper', 0.02);%Introduce un disturbo impulsivo nellimmagine Filtrata = medfilt2 (J,[3 3]); imshow(I2);title('Img originale'); figure,imshow(J);title('Img rumorosa'); figure,imshow(Filtrata);title('Img filtrata');

Filtro Mediano Vs Filtro Media


close all clc clear all OriginalImg = imread('lena.jpg');%caricamento dellimmagine non rumorosa OriginalImg = rgb2gray(OriginalImg); NoisyImg = imnoise (OriginalImg,'salt & pepper',0.5);%deterioramento dellimmagine FilteredImg = medfilt2 (NoisyImg,[3 3]);%immagine filtrata con il Mediano MeanFilter=fspecial('average',[3 3]);%filtro medio 3 x 3 FilteredImgMean=imfilter(NoisyImg,MeanFilter);%immagine filtrata con il filtro medio imshow(OriginalImg);title('img originale');%originale figure;imshow(NoisyImg);title('img romorosa');%rumorosa figure;imshow(FilteredImg);title('img filtrata con il filtro mediano');%mediano figure;imshow(FilteredImgMean);title('img filtrata con il filtro medio');%medio

Filtro Mediano Vs Filtro Media

Filtro di max e min


clc close all clear all I = imread('lena.jpg'); I = imresize(I,[255,255]);%ridimensionamento dell'immagine I = rgb2gray(I); [righe colonne] = size(I); for i=2:righe - 1 for j=2:colonne - 1 x = I(i,j); as = I(i-1,j-1); ac = I(i-1,j); ad = I(i-1,j+1); cs = I(i,j-1); cd = I(i,j+1); bs = I(i+1,j-1); bc = I(i+1,j); bd = I(i+1,j+1); vett = [x as ac ad cs cd bs bc bd]; %vett = double(vett); %w = tabulate(vett); massimo_vett = max(vett); minimo_vett = min(vett); %w2 = w(:,2); %[massimo indicemax] = max(w2);%prendo il valore pi piccolo tra i massimi %I_modificata3(i,j) = indicemax; I_modificata(i,j) = massimo_vett; I_modificata2(i,j) = minimo_vett; end end figure,imshow(I);title('Img original'); figure,imshow(I_modificata);title('immagine originale filtrata con il filtro massimo cn il valore max'); figure,imshow(I_modificata2);title('immagine originale filtrata con il filtro minimo con il valore min');

Filtro di max e min

Sharpening Filter

clc close all clear all I1 = imread('lena.jpg'); I1 = rgb2gray(I1); I1=imresize(I1,[255,255]); h=[0 -1 0;-1 5 -1;0 -1 0]; %sharpening filter I_filtrata=imfilter(I1,h); imshow(I1);title('Img original'); figure,imshow(I_filtrata), title('Immagine Filtrata');

Sharpening Filter(High-boost)
clc close all clear all I1 = imread('lena.jpg'); I1 = rgb2gray(I1); I1=imresize(I1,[255,255]); A1 = 1; A2 = 1.1; A3 = 1.15; A4 = 1.2; W1 = 9 * A1-1; W2 = 9 * A2-1; W3 = 9 * A3-1; W4 = 9 * A4-1; h1=[-1 -1 -1;-1 W1 -1 ;-1 -1 -1]; %High boost filter W=1 h2=[-1 -1 -1;-1 W2 -1 ;-1 -1 -1]; %High boost filter W=1.1 h3=[-1 -1 -1;-1 W3 -1;-1 -1 -1]; %High boost filter W=1.15 h4=[-1 -1 -1;-1 W4 -1 ;-1 -1 -1]; %High boost filter W=1.2 I_filtrata1=imfilter(I1,h1); I_filtrata2=imfilter(I1,h2); I_filtrata3=imfilter(I1,h3); I_filtrata4=imfilter(I1,h4); imshow(I1);title('Img original'); figure,imshow(I_filtrata1), title('Immagine Filtrata W=1'); figure,imshow(I_filtrata2), title('Immagine Filtrata W=1.1'); figure,imshow(I_filtrata3), title('Immagine Filtrata W=1.15'); figure,imshow(I_filtrata4), title('Immagine Filtrata W=1.2');

Sharpening Filter(High-boost)

Filtri Derivativi del primo ordine


clc close all clear all I1 = imread('lena.jpg'); I1 = rgb2gray(I1); I1=imresize(I1,[255,255]); h1=[0 h2=[0 h3=[0 h4=[0 0 0 0 0 0;0 0;0 0;0 0;0 1 1 1 0 0 ;0 -1 0]; -1 ;0 0 0]; 0;0 0 -1]; 1;0 -1 0]; %Running difference1 %Running difference2 %Robert1 %Robert2

I_filtrata1=imfilter(I1,h1); I_filtrata2=imfilter(I1,h2); I_filtrata3=imfilter(I1,h3); I_filtrata4=imfilter(I1,h4); imshow(I1);title('Img original'); figure,imshow(I_filtrata1), title('Running difference 1'); figure,imshow(I_filtrata2), title('Running difference2'); figure,imshow(I_filtrata3), title('Robert1'); figure,imshow(I_filtrata4), title('Robert2');

Filtri Derivativi del primo ordine


Running difference

Roberts

Il gradiente(Operatori di Prewitt)
clc close all clear all I1 = imread('lena.jpg'); I1 = rgb2gray(I1); I1=imresize(I1,[255,255]); IN ALTERNATIVA SI PUO USARE LA SEGUENTE FUNZIONE MATLAB: BW = edge(I,'filter',thresh,direction); Dove i filtri a disposizione sono: 1)Sobel 2)Prewitt 3)Roberts 4)Log 5)Zerocross 6)Canny

h_0=[-1 0 1;-1 0 1;-1 0 1]; %Prewitt 0 h_45=[0 -1 -1;1 0 -1;1 1 0]; %Prewitt 45 h_90=[-1 -1 -1;0 0 0;1 1 1]; %Prewitt 90 h_135=[-1 -1 0;-1 0 1;0 1 1 ]; %Prewitt 135 I_filtrata1=imfilter(I1,h_0); I_filtrata2=imfilter(I1,h_45); I_filtrata3=imfilter(I1,h_90); I_filtrata4=imfilter(I1,h_135); imshow(I1);title('Img original'); figure,imshow(I_filtrata1), title('Prewitt 0'); figure,imshow(I_filtrata2), title('Prewitt 45'); figure,imshow(I_filtrata3), title('Prewitt 90'); figure,imshow(I_filtrata4), title('Prewitt 135');

Il gradiente(Operatori di Prewitt)

Il gradiente(Operatori di Sobel)
clc close all clear all I1 = imread('lena.jpg'); I1 = rgb2gray(I1); I1=imresize(I1,[255,255]);

h1=[-1 -2 -1;0 0 0;1 2 1]; h2=[-1 0 1;-2 0 2;-1 0 1];

%Sobel1 %Sobel2

I_filtrata1=imfilter(I1,h1); I_filtrata2=imfilter(I1,h2); imshow(I1);title('Img original'); figure,imshow(I_filtrata1), title('Sobel1'); figure,imshow(I_filtrata2), title('Sobel2');

Il gradiente(Operatori di Sobel) fspecial


H = FSPECIAL('sobel') returns 3-by-3 filter that emphasizes horizontal edges utilizing the smoothing effect by approximating a vertical gradient. If you need to emphasize vertical edges, transpose the filter H: H'. [1 2 1;0 0 0;-1 -2 -1].

Il Laplaciano
clc close all clear all I1 = imread('lena.jpg'); I1 = rgb2gray(I1); I1=imresize(I1,[255,255]);

Laplace1=[0 1 0;1 -4 1;0 1 0]; Laplace2=[1 1 1;1 -8 1;1 1 1]; I_filtrata1=imfilter(I1,Laplace1); I_filtrata2=imfilter(I1,Laplace2);

%Laplace1 filter %Laplace2 filter

imshow(I1);title('Img original'); figure,imshow(I_filtrata1), title('Laplace1'); figure,imshow(I_filtrata2), title('Laplace2');

Il Laplaciano(fspecial)
H = fspecial('laplacian',ALPHA) returns a 3-by-3 filter approximating the shape of the two-dimensional Laplacian operator. The parameter ALPHA controls the shape of the Laplacian and must be in the range 0.0 to 1.0. The default ALPHA is 0.2.

imhist = Display histogram of image data


clc clear all close all Img = imread('lena.jpg'); imshow(Img);title('Immagine originale'); Img = rgb2gray(Img); figure,imshow(Img);title('Img a toni di grigio'); figure,imhist(Img);title('Istogramma dell''immagine iniziale'); % Img = double(Img); Img_equalizzata = histeq(Img); figure,imshow(Img_equalizzata);title('Img equalizzata'); figure,imhist(Img_equalizzata);title('Istogramma dell''immagine equalizzata');

Histogram equalization

Listogramma un grafico che mostra la distribuzione delle intensit in un immagine. La funzione imhist crea un grafico nelle cui ascisse ci sono una serie di valori equispaziati (in genere da 0 a 255, corrispondenti alle intensit dei pixel in unimmagine a toni di grigio) e sulle ordinate vi il numero di pixel di quellintensit presenti nellimmagine.

Histogram equalization
histeq = Enhance contrast using histogram equalization
Tramite histeq possibile definire uno specifico istogramma cui si vuole adattare limmagine attualmente in memoria.

Aggiustamento del contrasto


imadjust = Make intensity adjustement
Tramite imadjust possibile definire un nuovo range sullistogramma dell immagine desiderata, cos da esaltare, ad esempio, il contrasto. usage: >> J = IMADJUST(I,[LOW_IN HIGH_IN],[LOW_OUT HIGH_OUT],GAMMA) I valori di intensit compresi fra LOW_IN e HIGH_IN vengono rimappati cos da stare tra LOW_OUT e HIGH_OUT. Esempio: Limmagine del riso non ha valori tra 0 e 40. E possibile usare Imadjust per spalmare i valori a anche tra 0 e 40. Attenzione: Le soglie tra [] vengono date in numeri tra 0 e 1. Equivale a dividere per 255.

Aggiustamento del contrasto


imadjust = Make intensity adjustement
J = IMADJUST(I) maps the values in intensity image I to new values in J such that 1% of data is saturated at low and high intensities of I. This increases the contrast of the output image J.

Operatori Morfologici(open)
clear, close all I = imread('lena.jpg'); I=imresize(I,[180 180]); imshow(I); background = imopen(I, strel('disk', 15)); imshow(I);title('immagine originale'); figure,imshow(background);title('background');

APERTURA = successione di un erosione e di un espansione

Ritocco di immagini - Resize


imresize = resize image
Di default, le immagini vengono visualizzate interamente nelle finestre Matlab, ma spesso esse sono troppo grandi per cui necessario il loro ridimensionamento; Per fare ci, si utilizza il comando sopra citato tramite il quale possibile scegliere un fattore di scala o esplicitare interamente le dimensioni dellimmagine da visualizzare.
clc close all clear all I = imread('lena.jpg'); I = rgb2gray(I); imshow(I); I = imresize(I,[50 50]); figure,imshow(I); J = imresize(I,2); figure, imshow(J)

Ritocco di immagini - Rotate


imrotate = Rotate image
Per ruotare unimmagine si utilizza la funzione imrotate la quale accetta principalmente due parametri in ingresso, limmagine da ruotare e langolo di rotazione in gradi. Possiamo specificare un valore positivo per ruotare limmagine in senso orario, negativo per il senso antiorario. Vi sono due ulteriori parametri opzionali che permettono di specificare la dimensione dellimmagine in uscita ed il metodo di interpolazione.

clc close all clear all I = imread('lena.jpg'); figure,imshow(I); J = imrotate(I,35,'bilinear'); figure, imshow(J)

Ritocco di immagini - imcrop


imcrop = Crop image
Per estrarre una porzione rettangolare di unimmagine si usa la funzione imcrop la quale accetta principalmente due parametri in ingresso:limmagine da croppare e le coordinate del rettangolo che conterr larea selezionata;se non si specifica questultimo parametro si proceder ad unestrazione interattiva;

clc close all clear all I = imread('lena.jpg'); figure,imshow(I); J = imcrop(I); figure, imshow(J)

Line detection
Si considerano le seguenti maschere in base alla direzione da individuare:

La prima maschera risponde in maniera forte alle linee orizzontali ( punti pi spessi). Per linee orizzontali spesse un pixel su sfondo uniforme si pu usare la prima maschera, infatti R massimo quando la linea combacia con la riga centrale della tabella.

Line Detection
clc clear all close all img = imread('libri_noise.bmp'); img_gray = rgb2gray(img); h_oriz = [1 1 1;0 0 0;-1 -1 -1]; img_filtrata_oriz = conv2(img_gray,h_oriz); h_vert = [1 0 -1;1 0 -1;1 0 -1]; img_filtrata_vert = conv2(img_gray,h_vert); imshow(img_gray);title('Immagine originale'); figure,imshow(img_filtrata_oriz);title('Detection delle linee orizzontali'); figure,imshow(img_filtrata_vert);title('Detection delle linee verticali');

Edge detection
La funzione in MATLAB per ledge detection la seguente: BW = edge(I,'filter',thresh,direction); Dove i filtri a disposizione sono: 1)Sobel 2)Prewitt 3)Roberts 4)Log 5)Zerocross 6)Canny

Edge detection
clc clear all close all img = imread('libri_noise.bmp'); img_gray = rgb2gray(img); B1 = edge(img_gray,'sobel'); B2 = edge(img_gray,'prewitt'); B3 = edge(img_gray,'log'); B4 = edge(img_gray,'zerocross'); B5 = edge(img_gray,'canny'); figure(1),imshow(img_gray);xlabel('Img originale'); figure(2),imshow(B1);xlabel('sobel'); figure(3),imshow(B2);xlabel('prewitt'); figure(4),imshow(B3);xlabel('log'); figure(5),imshow(B4);xlabel('zerocross'); figure(6),imshow(B5);xlabel('canny');

Edge detection