...

Esercizi parte 6 - DEI - Università degli Studi di Padova

by user

on
Category: Documents
14

views

Report

Comments

Transcript

Esercizi parte 6 - DEI - Università degli Studi di Padova
Università degli Studi di Padova - Facoltà di Ingegneria
Corso di Laurea in Ingegneria Biomedica
A.A. 2006-2007
Laboratorio di
Elaborazione di Dati, Segnali e
Immagini Biomediche
(Parte 6)
Prof. Giovanni Sparacino
Dipartimento di Ingegneria dell’Informazione
Università di Padova
e-mail: [email protected]
web: http: www.dei.unipd.it/~gianni
1
IMAGE PROCESSING TOOLBOX: ALCUNI COMANDI UTILI
imshow (im)
mostra l’immagine in im, assumendo che im contenga già valori quantizzati
(interi tra 0 e 255)
uint8(A)
trasforma A (in doppia precisione) in una matrice di interi a 8 bit (0-255), saturando su 0 e 255
double(im)
passa da interi a valori in doppia precisione (utilizzabili per elaborazioni quali somme, radici,…)
imhist(im)
mostra l’istogramma dei valori di grigio dell’immagine contenuta nella matrice im
filter2(B,im)
filtra la matrice in im secondo la maschera contenuta in B
2
IMAGE PROCESSING TOOLBOX: ALCUNI COMANDI UTILI
im=mat2gray(A,[Amin,Amax])
trasforma la matrice A in una immagine in B/N im graficabile. I valori di im saranno compresi tra
0 e 1. Valori di A minori di Amin saturano sul nero, valori in A maggiori di Amax saturano sul
bianco
colormap(gray)
fa sì che la prossima figura venga riportata in livelli di grigio
imagesc(im)
prende il contenuto della matrice im, la scala, e ne fa un’immagine grafica
panoramica sull’ IPT
Dalla command window di Matlab lanciare: demo. Selezionare "Toolboxes" e quindi "Image
Processing". Provare le demo delle tecniche studiate a lezione (Histogram Equalization,
Intensity Adjustment, Filtering, ...)
3
ESERCIZIO 1
Premessa: I comandi in blu richiedono l’Image Processing Toolbox (IPT), per il quale il DEI ha solo 50
licenze. Se l’IPT non fosse disponibile sulla propria stazione, lavorare a coppie (oppure completare fuori
orario o a casa)
Caricare con load imdemos le immagini in B/N e controllare con whos il contenuto.
Scegliere un’immagine (ad esempio saturno) e assegnarla ad una matrice di servizio
(es. originale=saturn). Se l’IPT è disponibile, usare imshow per mostrare nel riquadro 1
l’immagine originale.
Sfruttando il comando double, ottenere una versione
dell’immagine in doppia precisione e quindi "lavorabile" algebricamente.
a) Fare il negativo dell’immagine scelta. Sfruttando l’istruzione uint8, creare una matrice
a 256 livelli di grigio graficabile. Se l’IPT è disponibile, mostrarla nel riquadro 2 usando il
comando imshow
b) Fare una versione schiarita. Sfruttando l’istruzione uint8, creare una matrice a 256
livelli di grigio graficabile. Se l’IPT è disponibile, mostrarla nel riquadro 3
c) Fare una versione scurita. Sfruttando l’istruzione uint8, creare una matrice a 256
4 livelli
di grigio graficabile. Se l’IPT è disponibile, mostrarla nel riquadro 4
d) Applicare una procedura di slicing, ad esempio portando a luminosità 200 tutti i pixel
aventi luminosità compresa tra 80 e 100. Sfruttando l’istruzione uint8, creare una
matrice a 256 livelli di grigio graficabile. Se l’IPT è disponibile, mostrare il risultato nel
riquadro 5
e) Se l’IPT è disponibile, usare il comando histeq per equalizzare l’immagine, e mostrare
il risultato nel riquadro 6
f) Costruire una maschera a supporto 3X3 per fare un filtro passa-basso e applicarla
mediante il comando filter2. Sfruttando l’istruzione uint8, creare una matrice a 256 livelli
di grigio graficabile. Se l’IPT è disponibile, mostrare il risultato nel riquadro 7
g) Costruire una maschera a supporto 6X6 per fare un filtro passa-basso e applicarla
mediante il comando filter2. Sfruttando l’istruzione uint8, creare una matrice a 256 livelli
di grigio graficabile. Se l’IPT è disponibile, mostrare il risultato nel riquadro 8
h) Costruire una maschera a supporto 3X3 per fare un filtro passa-alto e applicarla
mediante il comando filter2. Sfruttando l’istruzione uint8, creare una matrice a 256 livelli
di grigio graficabile. Se l’IPT è disponibile, mostrare il risultato nel riquadro 9
5
% esercitazione del 14 marzo 2007
% operatori puntuali e filtri 2D
close all
load imdemos
imoriginale=saturn; % scelgo l'immagine su cui lavorare (vd whos)
% slicing
soglia1=80;
soglia2=120;
livello=200;
for k=1:nr
for j=1:nc
[nr,nc]=size(imoriginale);
if im(k,j)>soglia1 & im(k,j)<soglia2
subplot(331)
im2(k,j)=livello;
imshow(imoriginale)
else im2(k,j)=im(k,j);
title('originale')
end
end
% procuro una versione "lavorabile" in doppia precisione dell'immagine
end
im=double(imoriginale);
imquantiz=uint8(im2);
subplot(335)
% negativo
imshow(imquantiz)
im2=255-im;
title('slicing')
imquantiz=uint8(im2);
subplot(332)
imshow(imquantiz)
title('negativo')
% schiarito
im2=sqrt(255*im);
imquantiz=uint8(im2);
subplot(333)
imshow(imquantiz)
title('schiarito')
% scurito
im2=(im.^2)/255;
imquantiz=uint8(im2);
subplot(334)
imshow(imquantiz)
title('scurito')
% filtraggio passa-basso selettivo
F=1/64*ones(8,8);
im2=filter2(F, im);
imquantiz=uint8(im2);
subplot(338)
imshow(imquantiz)
title('filtrato passa-basso selettivo')
% filtro sharpening
F=-ones(3,3);
F(2,2)=8;
im2=filter2(F, double(im));
imquantiz=uint8(im2);
subplot(339)
imshow(imquantiz)
title('filtrato passa-alto')
% equalizzazione
im2=histeq(uint8(im),64);
imquantiz=uint8(im2);
subplot(336)
imshow(imquantiz)
title('equalizzato')
% filtraggio passa-basso
F=1/9*ones(3,3);
im2=filter2(F, im);
imquantiz=uint8(im2);
subplot(337)
imshow(imquantiz)
title('filtrato passa-basso')
6
originale
negativo
s chiarito
s curito
s licing
equalizzato
filtrato pas s a-bas s o
filtrato pas s a-bas s o s elettivo
filtrato pas s a-alto
7
originale
negativo
s chiarito
s curito
s licing
equalizzato
filtrato pas s a-bas s o
filtrato pas s a-bas s o s elettivo
filtrato pas s a-alto
8
ESERCIZIO 2
Per l’esercizio 1, se IPT è disponible ottenere per ogni elaborazione l’istogramma dei
livelli di grigio usando il comando imhist (mettere gli istogrammi in figura 2 sui subplot
corrispondenti a quelli delle immagini in figura 1) . Osservare come i diversi operatori
puntuali si riflettano sull’istogramma
9
Soluzione
….
figure(1)
subplot(331)
imshow(imoriginale)
title('originale')
figure(2)
subplot(331)
imhist(imoriginale)
title('hist originale')
figure(1)
….
(saturno)
his t originale
his t negativo
his t s chiarito
1000
1000
1000
500
500
500
0
0
0
100
200
his t s curito
0
0
100
200
his t s licing
1000
1000
1000
500
500
500
0
0
0
100
200
his t pas s a-bas s o
0
100
200
his t equalizzato
0
100
200
his t pas s a-alto
0
0
100
200
his t pas s a-bas s o s el
1000
1500
1000
1000
500
500
500
0
0
0
100
200
0
0
100
200
0
100
200
10
ESERCIZIO 3
Caricare nel workspace il contenuto del file imdemos.mat e scegliere una
matrice immagine su cui lavorare.
Usare il comando double per trasformarla in una matrice su cui è possibile
fare operazioni algebriche.
a) Generare una matrice con elementi estratti da rumore bianco (usare media
nulla e SD “piccola”, es. 10) e costruire, mediante addizione, una versione
“rumorosa” dell’immagine scelta. Sfruttando l’istruzione uint8, creare una matrice a
256 livelli di grigio graficabile. Se l’IPT è disponibile, mostrare il risultato nel riquadro 2
b) Sfruttando l’istruzione randn seguita dalla round, generare una matrice che
simula rumore sale e pepe e costruire, mediante addizione, una versione
“rumorosa” dell’immagine scelta. Sfruttando l’istruzione uint8, creare una matrice a
256 livelli di grigio graficabile. Se l’IPT è disponibile, mostrare il risultato nel riquadro 3
11
c) Fare un filtraggio passa-basso (supporto 3X3) dell’immagine sporcata con
rumore gaussiano Se l’IPT è disponibile, mostrare il risultato nel riquadro 5
d) Fare un filtraggio passa-basso (supporto 3X3) dell’immagine sporcata con
rumore sale e pepe Se l’IPT è disponibile, mostrare il risultato nel riquadro 6
e) Usando il comando medfilt2, fare un filtraggio mediano (supporto 3X3)
dell’immagine sporcata con rumore gaussiano. Se l’IPT è disponibile, mostrare il
risultato nel riquadro 5 di figura 2 (nella prima riga di 3 riquadri mostrare l’immagine
originale e le due versioni rumorose)
f) Usando il comando medfilt2, fare un filtraggio mediano (supporto 3X3)
dell’immagine sporcata con rumore sale e pepe. Se l’IPT è disponibile, mostrare
il risultato nel riquadro 6 di figura 2
12
Passa-basso
originale
con rumore gaus s iano
con rumore s ale & pepe
pas s a-bas s o
pas s a-bas s o
13
Mediano
originale
con rumore gaus s iano
con rumore s ale & pepe
mediano
mediano
14
% esercitazione del 14 marzo 2007
% filtraggio 2D: passabasso vs mediano
clear all
close all
% carico immagini e scelgo quella di lavoro
load imdemos
originale=saturn;
% plotto originale
[nr,nc]=size(originale);
subplot(231)
imshow(originale)
% filtraggio passa-basso su immagine sporcata gaussiano
F=1/9*ones(3,3);
imtmp=filter2(F, imrumwn);
impb=uint8(imtmp);
subplot(235)
imshow(impb)
title('passa-basso')
% filtraggio passa-basso su immagine sporcata sale & pepe
F=1/9*ones(3,3);
im5=filter2(F, imrumsp);
im5=uint8(im5);
subplot(236)
imshow(im5)
title('passa-basso')
figure(2)
subplot(231)
imshow(originale)
title('originale')
subplot(232)
imshow(imqtzwn)
title('con rumore gaussiano')
subplot(233)
imshow(imqtzsp)
title('con rumore sale & pepe')
% procuro una versione "lavorabile"
im=double(originale);
title('originale')
% aggiungo rumore bianco
v=10*randn(nr,nc);
imrumwn=im+v;
imqtzwn=uint8(imrumwn);
subplot(232)
imshow(imqtzwn)
title('con rumore gaussiano')
% filtraggio mediano su immagine sporcata gaussiano
im5=medfilt2(double(imqtzwn),[3 3]);
im5=uint8(im5);
subplot(235)
imshow(im5)
title('mediano')
% aggiungo rumore sale e pepe
v=0.25*randn(nr,nc);
v=255*round(v);
imrumsp=im+v;
imqtzsp=uint8(imrumsp);
subplot(233)
imshow(imqtzsp)
title('con rumore sale & pepe')
% filtraggio mediano su immagine sporcata sale & pepe
im5=medfilt2(double(imqtzsp),[3 3]);
im5=uint8(im5);
subplot(236)
imshow(im5)
title('mediano')
15
Esercizio 4
a) Scrivere un codice Matlab che prepari le matrici 256X256 corrispondenti ai quattro
grating sinusoidali sotto. Se l’IPT è disponibile, mostrarle in quattro riquadri
grating verticale
grating orizzontale
grating s fas ato
grating s fas ato, frequenza lungo X maggiore
16
Soluzione a)
clear al close all
nc=256;
nr=256;
% grating con sfasamento
for j=1:nr
for k=1:nc
A(j,k)=floor(128+128*sin(2*pi*(1/X0*k+1/Y0*j)));
end
end
im=uint8(A);
subplot(223)
imshow(im)
title('grating sfasato')
% -grating sinusoidale a linee verticali
A=zeros(nr,nc);
X0=100;
x=(1:1:nr);
riga=floor(128+128*sin(2*pi/X0*x));
for k=1:nr
A(k,:)=riga;
end
im=uint8(A);
subplot(221)
imshow(im)
title('grating verticale')
% grating con sfasamento - frequenza maggiore lungo X
for j=1:nr
for k=1:nc
A(j,k)=floor(128+128*sin(2*pi*(4*1/X0*k+1/Y0*j)));
end
end
im=uint8(A);
subplot(224)
imshow(im)
title('grating sfasato, frequenza lungo X maggiore')
% -grating sinusoidale a linee orizzontali
A=zeros(nr,nc);
Y0=100;
y=(1:1:nc)';
colonna=floor(128+128*sin(2*pi/Y0*y));
for k=1:nc
A(:,k)=colonna;
end
im=uint8(A);
subplot(222)
imshow(im)
title('grating orizzontale')
17
b) Se IPT è disponible, ottenere per ogni grating l’istogramma dei livelli di grigio usando
il comando imhist (mettere gli istogrammi in figura 2 sui subplot corrispondenti a quelli
delle immagini in figura 1) . Come dovrebbe venire l’istogramma ? Perché nei casi
orizzontale e verticale non è conforme alle attese ?
his t grating verticale
his t grating orizzontale
1000
1000
500
500
0
0
0
50
100
150
200
250
his t grating s fas ato
0
1000
500
500
0
0
50
100
150
100
150
200
250
his t grating s fas ato, frequenza lungo X maggiore
1000
0
50
200
250
18
0
50
100
150
200
250
Fly UP