Sunteți pe pagina 1din 15

LABORATOR 1

PRELUCRAREA IMAGINILOR UTILIZÂND MEDIUL


MATLAB. OPERAŢII SIMPLE DE PROCESARE

1.1. Operaţii simple de procesare a imaginilor

1.1.1. Introducere
Mediul MATLAB oferă funcţii speciale pentru procesarea imaginilor. Acestea sunt
incluse într-un toolbox numit Image Processing Toolbox. Puteţi vedea toate comenzile cu:
help images.
O imagine este echivalentă unei matrice. În mod esenţial afişarea unei imagini implică
plasarea pixelilor (culori şi strălucire) în locul corespunzător.

Figura 1.1. Reprezentarea imaginilor sub forma unor matrice


APDSV – Laborator 1 2

1.1.2. Modele de reprezentare a culorilor


Orice culoare poate fi reprodusă ca amestec a trei culori primare. Datorită
caracteristicilor celulelor conuri de pe retina ochiului uman, cele trei culori primare
corespunzătoare sistemului vizual uman sunt roșu (R), verde (G) și albastru (B). Orice culoare
a spectrului poate fi privită ca o combinaţie liniară a celor trei culori primare. Culorile astfel
obţinute formează spaţiul de culori RGB.
O culoare poate fi reprezentată în mai două moduri:
• Specificarea valorilor celor trei stimuli asociați celor 3 culori primare:
− Roşu-Verde-Albastru (RGB). Acest spaţiu de culori este „aditiv”, în sensul că
suprapunerea celor trei stimuli R, G şi B produce lumina albă. El se foloseşte, de
exemplu, la reprezentarea culorile pe monitoare. Figura 1.2 prezintă modul de
compunere a culorilor pornind de la cele 3 culori primare R, G și B.
− Cian-Magenta-Galben (Cyan-Magenta-Yellow - CMY). Acest spaţiu de culori
este unul „substractiv”, în sensul că suprapunerea celor trei culori C, M şi Y pe o
suprafaţă de culoare albă produce culoarea neagră. Acest spaţiu de culori se
foloseşte în special în tipografie. Figura 1.3 prezintă modul de compunere a
culorilor pornind de la cele 3 primare ale acestui spațiu de culori.

Roșu

Magenta Galben
Alb

Albastru Cian Verde

Figura 1.2. Compunerea culorilor în spatial de culori RGB


APDSV – Laborator 1 3

Cian

Albastru Verde
Negru

Magenta Roșu Galben

Figura 1.3. Compunerea culorilor în spatial de culori CMY

• Specificarea luminanţei şi crominanţei:


− Nuanţă-Saturaţie-Valoare (Hue-Saturation-Value - HSV). Acest spaţiu de culori
se foloseşte în grafica computerizată.
− YIQ, unde Y este informaţia de luminanţă, iar I şi Q sunt componentele de
crominanţă. I provine de la „in-phase” (în fază), iar Q provine de la „quadrature”
(în cuadratură), referindu-se la cele două componente folosite la modulaţia în
amplitudine în cuadratură. Acest spaţiu de culori este folosit la standardul TV
analogic NTSC. Trecerea de la spaţiul de culori RGB la spaţiul YIQ se face
conform relaţiei (1.1). În Figura 1.4 este reprezentată o imagine RGB și cele trei
componente ale spațiului de culori YIQ.
Pentru a face trecerea de la spațiul de culori RBG la spațiul YIQ se poate folosi
funcția Matlab rgb2ntsc, iar pentru transformarea inversă funcția ntsc2rgb.

Y = 0, 299 R + 0,587 G + 0,114 B


I = 0,596 R − 0, 275 G − 0,321B (1.1)
Q = 0, 212 R − 0,523 G + 0,311B
APDSV – Laborator 1 4

RGB

Y I Q

Figura 1.4. Reprezentarea celor trei componente ale spatiului de culori YIQ

− YUV, unde Y este informaţia de luminanţă, iar U şi V sunt componentele de


crominanţă. Acest spaţiu de culori este utilizat la standardele TV analogice PAL şi
SECAM. Trecerea de la spaţiul de culori RGB la spaţiul YUV se face conform
relaţiei (1.2). În Figura 1.5 sunt reprezentate cele trei componente ale spațiului de
culori YUV.

RGB

Y U V
Figura 1.5. Reprezentarea celor trei componente ale spatiului de culori YUV
APDSV – Laborator 1 5

Y = 0, 299 R + 0,587 G + 0,114 B


U= −0,147 R − 0, 289 G +0, 436 B (1.2)
V = 0,615 R − 0,515 G + 0,1 B

− YCbCr, unde Y este informaţia de luminanţă, iar Cb şi Cr sunt componentele de


crominanţă. Acest spaţiu de culori este utilizat la televiziunea color digitală şi la
standardele de compresie a imaginilor şi semnalelor video (JPEG, MPEG, etc.).
Trecerea de la spaţiul de culori RGB la spaţiul YCbCr se face conform relaţiei
(1.3). În Figura 1.6 sunt reprezentate cele trei componente ale spațiului de culori
YCbCr.
Pentru a face trecerea de la spațiul de culori RBG la spațiul YCbCr se poate folosi
funcția Matlab rgb2ycbcr, iar pentru transformarea inversă funcția
ycbcr2rgb.

Y = 0.257 R + 0.504G + 0.098B + 16


Cb = −0.148R − 0.291G + 0.439 B + 128 (1.3)
Cr = 0.439 R + 0.368G − 0.071B + 128

RGB

Y Cb Cr
Figura 1.6. Reprezentarea celor trei componente ale spatiului de culori YCbCr
APDSV – Laborator 1 6

1.1.3. Tipuri de imagini


a) Imagini binare
Fiecare pixel din imagine este reprezentat pe un bit (negru=0, alb=1). Elementele
matricei imaginii sunt numere binare.

b) Imagini de intensitate
Sunt imagini monocrome în care intensitatea pixelilor ia valori discrete în intervalul
[0,1], funcţie de numărul de biţi pe care este reprezentată imaginea. În mediul Matlab valorile
intensităţii pixelilor sunt de tip uint8 (număr întreg fără semn pe 8 biţi), astfel intensitatea
unui pixel poate lua valori în intervalul [0,255].

c) Imagini RGB („truecolor”)


Sunt imagini color, fiecare pixel fiind reprezentat în spaţiul RGB pe 24 de biţi (8 biţi
pentru fiecare plan de culoare).

d) Imagini indexate
Pentru imaginile color care nu folosesc toată gama de 16 milioane de culori se preferă
să se alcătuiască un tabel separat cu toate culorile din imagine (de exemplu cu 256 culori).
Acesta este o matrice cu 3 coloane, pentru culorile primare, şi cu 256 de linii (câte culori are
imaginea), matrice numită şi paletă de culori (colormap). Fiecare pixel din imagine are un
indice scris în matricea imaginii, indice care corespunde unei linii din paleta de culori. Astfel
se poate reconstitui orice culoare pe 24 de biţi cu ajutorul unui index de 8 biţi (256 culori) şi o
paletă de culori.

1.1.4. Conversia dintre diferite tipuri de imagini


În Figura 1.7 este dată schema de conversie dintre diferitele tipuri de imagini și funcțiile
Matlab folosite pentru a realiza aceste conversii.
APDSV – Laborator 1 7

Imagine rgb2ind Imagine


RGB ind2rgb indexată

ind2gray im2bw
rgb2gray
gray2ind gray2ind

Imagine de im2bw Imagine


intensitate binară

Figura 1.7. Conversia între diferite tipuri de imagini

1.1.5. Importul şi exportul unei imagini


Imaginile stocate în fişiere pot fi citite în Matlab cu funcţia imread. Formatele de
imagini recunoscute de Matlab sunt:
• Windows Bitmap (BMP)
• Cursor File (CUR)
• Graphics Interchange Format (GIF)
• Icon File (ICO)
• Portable Bitmap (PBM)
• Portable Graymap (PGM)
• Portable Network Graphics (PNG)
• Portable Pixmap (PPM)
• Sun Raster (RAS)
• Hierarchical Data Format (HDF)
• Joint Photographic Experts Group (JPEG)
• Windows Paintbrush (PCX)
• Tagged Image File Format (TIFF)
• X Window Dump (XWD)

Diferitele tipuri de imagini pot fi citite în mediul Matlab folosind următoarele comenzi:
A = imread('filename.ext') - pentru imagini RGB sau monocrome. Matricea
A va avea valori întregi pe 8 biţi corespunzător intensităţii/culorii fiecărui pixel.
APDSV – Laborator 1 8

[X,MAP] = imread('filename.ext') - pentru imagini indexate. Matricea X


va avea valori întregi pe 8 biţi corespunzător indexului culorii din paleta de culori
reprezentată de matricea MAP.
În Tabelul 1.1 sunt prezentate pe scurt cele mai importante formate şi tipuri de imagini
care pot fi citite de Matlab:
Se poate utiliza comanda imfinfo('filename.ext') pentru a obţine informaţii
despre formatul imaginii care urmează să fie citită.
Pentru a exporta o imagine se foloseşte comanda imwrite:
imwrite(A,'filename.ext') - pentru imagini RGB sau monocrome;
imwrite(X,MAP,'filename.ext') - pentru imagini indexate.
Extensia fişierului trebuie să fie standard (BMP, TIFF etc.) pentru ca formatul cu care se
scrie imaginea să fie recunoscut de Matlab.
Mai multe informaţii despre alţi parametrii utilizaţi cu comanda imwrite pot fi
obţinute cu comanda help imwrite.

Tabelul 1.1. Imagini ce pot fi citite în mediul Matlab

- imagini necomprimate pe 1-bit, 4-biţi, 8-biţi şi 24-biţi;


BMP
- imagini comprimate RLE pe 4-biţi şi 8-biţi.
GIF - imagini necomprimate pe 1 până la 8-biţi
- imagini grayscale, indexate sau RGB pe 1-bit, 2-biţi, 4-biţi, 8-
PNG
biţi, 16-biţi, 24-biţi, 48-biţi
HDF - imagini pe 8-biţi sau 24 biţi.
JPEG - orice imagine JPEG.
PCX - imagini pe 1-bit, 8-biţi şi 24-biţi.
- orice imagine TIFF pe 1-bit, 8-biţi şi 24-biţi necomprimată sau
TIFF
comprimată cu packbits.
XWD - 1-bit şi 8-biţi ZPixmaps; XYBitmaps; 1-bit XYPixmaps
APDSV – Laborator 1 9

1.1.6. Afişarea imaginilor


Afişarea imaginilor în mediul Matlab se poate face folosind funcţia imshow. Sintaxa
este diferită pentru diferitele tipuri de imagini:
1. Pentru imagini binare: imshow(BW)
2. Pentru imagini de intensitate: imshow(I,N) afişează imaginea de intensitate I cu
o scală de gri de dimensiune N.
3. Pentru imagini indexate: imshow(X,MAP) afişează imaginea indexată X cu paleta
de culori MAP;
4. Pentru imagini RGB: imshow(RGB).

1.1.7. Imagini monocrome


Pentru imaginile monocrome (alb-negru) valoarea intensităţii pentru fiecare pixel este în
intervalul [0,Lmax]. Acest interval se numeşte scala de gri. Valoarea 0 corespunde intensităţii
minime iar valoarea Lmax corespunde maximului intensităţii.
Pentru o imagine monocromă reprezentată pe 8 biţi Lmax=255.
Deoarece în Matlab scala de gri este de clasă uint8 (numere întregi fără semn pe 8
biţi) nu se pot efectua anumite operaţii aritmetice asupra matricei imaginii. Din această cauză
este important să convertim matricea din format uint8 în format double înainte de a
efectua operații aritmetice de tip scădere, împărțire, ridicare la putere, etc. Acest lucru se
poate realiza utilizând funcția double.
Imaginile color pot fi convertite în imagini monocrome (de intensitate) cu comenzile:
I=ind2gray(A,map) %pentru imagini color indexate
I=rgb2gray(A) %pentru imagini color RGB

Aplicaţia 1
• Extrageţi informaţii despre imaginea „rose.tif” folosind funcţia imfinfo. Ce tip de
imagine este? Care este rezoluţia imaginii?
• Citiţi imaginea folosind funcţia imread şi afişaţi-o folosind imshow.
• Convertiţi imaginea într-o imagine de intensitate A şi afişaţi-o.
• Scădeţi rezoluţia imaginii A de 4 ori şi afişaţi noua imagine.
• Afişaţi transpusa matricei imaginii A.
• Rotiţi imaginea A cu 270 de grade folosind funcţia rot90.
APDSV – Laborator 1 10

• Scădeţi/creşteţi luminanţa imaginii cu 50.


• Obţineţi şi afişaţi negativul imaginii A.
• Salvaţi una dintre imaginile anterioare în format tif folosind funcţia imwrite.

1.1.8. Histograma unei imagini


Histograma reprezintă frecvenţa relativă de apariţie a diferitelor culori sau niveluri de
gri într-o imagine. Pentru o imagine cu nuanţe de gri histograma arată cum este distribuită
intensitatea pixelilor din imagine. Pe direcţie orizontală este reprezentată intensitatea iar pe
verticală, numărul de pixeli cu acea intensitate. Funcţia care afişează histograma imaginii A
este imhist(A).
Dacă o imagine are distribuţia intensităţii pixelilor (histograma) concentrată într-un
interval restrâns de valori se poate redistribui acest interval pe tot domeniul de nuanţe de gri
(de la alb la negru) prin egalizarea de histogramă, obţinându-se o îmbunătăţire a contrastului.
Evident rezultatul este o schimbare în histogramă.

Aplicaţia 2
• Implementaţi în Matlab o funcţie care să aibă următoarea expresie:
 0, 0 ≤ x ≤ x1

  x x1 
=y 255  −  x1 < x < x2 (1.4)
  x2 − x1 x2 − x1 
 x ≥ x2
 255

• Această funcţie trebuie să se aplice astfel (X - imaginea originală, Y - noua imagine):


Y=corlin(X, x1, x2);
• Aplicaţi această funcţie de corecţie a valorii intensităţii imaginii „rose_gray.tif”. Se
vor alege x1=50 şi x2=200.
• Reprezentaţi imaginile X și Y și histogramele lor, folosind imhist. Care este
legătura dintre vechea şi noua histogramă?
• Indicaţii:
− Citiți imaginea originală in matricea X;
− Convertiți matricea X la double;
− iniţializaţi matricea de ieşire Y cu matricea de intrare X;
− schimbaţi punctele de intensitate x din X cu intensitatea y calculată cu funcţia
corlin şi plasaţi-le în matricea Y.
APDSV – Laborator 1 11

− Pentru a înlocui pixelii din matricea A mai mici decât x1 cu valoarea 0 în matricea
Y se utilizează comanda: Y(X<=x1)=0;
− Pentru a înlocui pixelii din matricea A mai mari decât x2 cu valoarea 255 în
matricea Y se utilizează comanda: Y(X>=x2)=255;
− Mai trebuie să scrieți linia 2 din formulă!

Matlab oferă funcţia histeq pentru egalizarea automată de histogramă. Funcţia are
următoarea sintaxă:
J = histeq(I) transformă imaginea de intensitate I în imaginea J, astfel încât
histograma lui J să aibă o distribuţie relativ uniformă în întreaga plajă de valori de intensitate.
J = histeq(I,HGRAM) transformă imaginea de intensitate I astfel încât
histograma imaginii de ieşire J de lungime length(HGRAM) aproximează histograma
HGRAM.
J = histeq(I,N) transformă imaginea de intensitate I returnând o imagine de
intensitate cu N niveluri discrete. Fiecare nivel conţine un număr aproximativ egal de pixeli,
astfel încât histograma lui J să aibă o distribuţie relativ uniformă. Valoarea implicită pentru N
este 64.

Aplicaţia 3
• Folosiţi funcţia histeq, pentru a îmbunătăţi contrastul imaginii „rose_gray.tif”.
Cum depinde calitatea noii imagini de numărul de niveluri de intensitate N.

1.1.9. Corecţia de gama


Intensitatea luminoasă obţinută în reprezentarea imaginilor folosind diferite sisteme este
de cele mai multe ori neliniară. Un exemplu este dat de monitoarele cu tub catodic. Strălucirea
este funcţie de tensiunea aplicată după legea:
I =Vγ (1.5)
unde I este intensitatea pixelilor şi V este tensiunea aplicată.
Pentru o imagine de intensitate, relaţia este:
y = xγ (1.6)
unde x este valoarea iniţială a intensităţii şi y este valoarea intensităţii aşa cum apare ea pe
monitor.
APDSV – Laborator 1 12

Această neliniaritate trebuie corectată. Dacă valoarea lui gama este cunoscută, corecţia
constă în aplicarea inversei ecuaţiei (1.6).

Aplicaţia 4
• Implementaţi în Matlab o funcţie care să facă corecţia de gama, cu sintaxa:
B=corgama(A,1/gama), unde A este imaginea necorectată şi B este imaginea
corectată. Alegeți gama=2,2.
• Aplicaţi funcţia corgama pe imaginea „dark.tif” şi afişaţi imaginea originală şi cea
corectată.
• Observație: înainte de ridicarea la putere, convertiți intervalul de valori [0;255] în
intervalul [0;1].

1.1.10. Imagini color


Culoarea este un fenomen legat de percepţia omului a diferitelor lungimi de undă ale
luminii între 400 şi 700 nanometri. Percepţia culorii provine din sensibilitatea a trei tipuri de
senzori ai retinei. Fiecare senzor răspunde într-un interval de lungimi de undă. Datorită acestei
proprietăţi a sistemului vizual uman, toate culorile sunt combinaţii a trei culori primare: roşu
(Red), verde (Green) şi albastru (Blue). Culorile primare pot fi combinate pentru a produce
celelalte culori, totuşi nu se pot realiza toate culorile vizibile.
Spaţiul culorilor ne permite să reprezentăm toate culorile percepute de om. Culorile
primare formează o bază, sau sistem de coordonate, cu care poate fi descris procesul de
măsură a culorii. Pentru procesarea digitală a imaginilor și secvențelor video cele mai utilizate
spații de culori sunt RGB şi YCbCr.
Spaţiul RGB se bazează pe teoria celor trei stimuli prezentată mai sus. De asemenea
spaţiul RGB este convenabil din punct de vedere hardware, fiind utilizat la monitoare şi alte
dispozitive.
Spaţiul YCbCr este format din luminanţă (Y) şi două componente ale crominanţei
(CbCr). Importanţa acestui spaţiu constă în faptul că sistemul vizual uman percepe un stimul
color în termeni de luminanţă şi crominanţă mai mult decât ca valori de roşu, verde şi
albastru.
Rulaţi următorul exemplu în Matlab:
clear all;
APDSV – Laborator 1 13

% Se citeşte un fişier format tif care conţine


% o imagine RGB 'truecolor'
A=imread('flowers.tif');
figure(1), imshow(A);
size(A)
% A este o matrice tridimensională de dimensiuni
% 279x275x3 şi conţine cele trei planuri de culoare R,G,B
Imaginile color RGB ocupă de trei ori mai multă memorie decât aceeași imagine cu
nuanțe de gri. Există posibilitatea reprezentării cu un număr redus de culori a imaginii (16,
128 sau 256 de culori) dacă se convertește imaginea RGB într-o imagine indexată.
Imaginile indexate se formează pe baza unei matrici de dimensiuni egale cu ale
imaginii. În această matrice, pentru fiecare pixel va exista un indice către paleta de culori.
Dacă imaginea RGB iniţială avea un număr N de culori, paleta de culori va fi un tabel cu N
linii şi 3 coloane. Culoarea pixelului care are indicele X va fi obţinută din tripletul RGB de la
linia X a paletei de culori (vezi Fig. 1.8).

Figura 1.8. Imagine indexată


Conversia de la imaginile RGB la imagini indexate se poate face cu funcţia rgb2ind
în patru moduri:
• Conversie directă: paleta de culori va avea lungimea egală cu numărul pixelilor din
imagine, deoarece fiecărui pixel îi este asociată o culoare.
• Cuantizare uniformă: se variază uniform intensitatea fiecărei componente de culoare

RGB cu pasul T. Paleta de culori va avea maxim ( 1 T  + 1) culori.


3

• Cuantizare cu varianță minimă: paleta de culori va avea maxim N culori.


APDSV – Laborator 1 14

• Aproximarea cu o paletă de culori: culorile din imaginea iniţială vor fi aproximate cu


cele din paleta dată.
În continuare sunt exemplificate ultimele 3 metode de conversie: cuantizare uniformă cu
pasul T = 0.3, cuantizare neuniformă cu 64 de culori, aproximarea cu două palete de 64 de
culori (hsv şi jet).
[A1,M1]=rgb2ind(A,0.3);
[A2,M2]=rgb2ind(A,64);
[A3,M3]=rgb2ind(A,hsv(64));
[A4,M4]=rgb2ind(A,jet(64));
figure(2), imshow(A1,M1), colorbar('vert');
figure(3), imshow(A2,M2), colorbar('vert');
figure(4), imshow(A3,M3), colorbar('vert');
figure(5), imshow(A4,M4), colorbar('vert');

Aplicaţia 5
• Evaluaţi diferenţa între imaginea originală şi imaginile obţinute.
• Pentru a observa corespondenţa între indicele pixelului şi culoarea din paleta de
culori se va selecta un fragment de 11x11 pixeli din imaginea A2 (liniile 70:80 şi
coloanele 40:50 din matricea A2):
B=A2(70:80,40:50)
figure(1),imshow(B,M2);
r=impixel
Funcţia impixel citeşte culoarea pixelului selectat cu mouse-ul astfel: butonul
stâng introduce date; butonul drept sau Enter încheie introducerea datelor. Fiecare
pixel are asociat un număr în matricea B reprezentând indexul culorii pixelului.
• Folosind impixel completaţi Tabelul 1.2.
Tabelul 1.2. Rezultatele aplicării funcţiei impixel

Pixel Culoarea din matricea M2


R G B
B(1,1)
B(1,2)
APDSV – Laborator 1 15

Informaţia privind culoarea este esenţială în reproducerea corectă a imaginii. De


exemplu încărcăm două imagini cu aceleaşi dimensiuni dar alte palete de culori:
clear all;
[img1,map1]=imread('rose.tif');
[img2,map2]=imread('hands.tif');
figure(1),imshow(img1,map1),title('Imaginea 1 cu map1')
figure(2),imshow(img2,map2),title('Imaginea 2 cu map2')
%în următoarele figuri afişăm imaginile cu paletele de
culori inversate:
figure(3),imshow(img1,map2),title('Imaginea 1 cu map2')
figure(4),imshow(img2,map1),title('Imaginea 2 cu map1')

Aplicaţia 6
• Pentru imaginea (img1,map1), să se obțină imaginea oglindită faţă de orizontală
imgoriz şi faţă de verticală imgvert.
• Convertiţi imaginile img1 şi img2 în imagini de intensitate cu 256 niveluri de gri.
Realizaţi suprapunerea lor (mixarea) în imaginea imgmix.

Aplicaţia 7: Diferenţa a două imagini


Găsiţi diferenţa (în modul) dintre imaginile: „tree1.tif” şi „tree2.tif” şi salvaţi imaginea
diferenţă cu numele diff. Afișați imaginea diff.

S-ar putea să vă placă și