Sunteți pe pagina 1din 107

UNIVERSITATEA TRANSILVANIA DIN BRASOV

Laurent iu-Mihail IVANOVICI


Procesarea Imaginilor

Indrumar de laborator
2006
c 2003 EDITURA UNIVERSIT

ATII TRANSILVANIA BRASOV


Adresa: 500030 Brasov,
B-dul Eroilor, Nr. 9
Tel/Fax: 0268 - 47 53 48
E-mail: editura@unitbv.ro
Tip arit la:
Tipograa Universit at ii Transilvania din Brasov
B-dul Eroilor 9
tel/fax: 0268 47 53 48
Toate drepturile rezervate
Editur a acreditat a de CNCSIS
Adresa nr. 1615 din 29 mai 2002
Referent i: Prof. dr. ing. Iuliu Szekely
S. l. dr. ing. Angel Cat aron
Descrierea CIP a Bibliotecii Nat ionale a Rom aniei
IVANOVICI, LAURENTIU MIHAIL
Procesarea imaginilor: ndrumar de laborator /
Laurent iu-Mihail Ivanovici. - Brasov: Editura Universit at ii
Transilvania, 2006
Bibliogr.
ISBN (10) 973-635-674-4; ISBN (13) 978-973-635-674-2
004.932
Cuprins
Cuprins i
Mult umiri v
Cuv ant nainte ix
1 Not iuni introductive de Qt 1
1.1 Clasa QApplication . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Clasa QImage . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1 Manipularea imaginilor . . . . . . . . . . . . . . . . . 2
1.2.2 Atribute ale imaginii . . . . . . . . . . . . . . . . . . . 2
1.2.3 Manipularea pixelilor . . . . . . . . . . . . . . . . . . 3
1.2.4 Formate de imagine . . . . . . . . . . . . . . . . . . . 4
2 Not iuni introductive 5
2.1 Percept ia imaginilor . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Structura ochiului uman. Formarea imaginii . . . . . . 5
2.1.2 Lumina. Luminant a. Str alucirea . . . . . . . . . . . . 6
2.2 Modelul matematic al imaginii . . . . . . . . . . . . . . . . . 7
2.2.1 Modelul continuu al imaginii . . . . . . . . . . . . . . 7
2.2.2 Modelul discret al imaginii . . . . . . . . . . . . . . . 8
2.3 Esantionarea imaginilor . . . . . . . . . . . . . . . . . . . . . 8
2.4 Cuantizarea imaginilor . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Imaginile digitale . . . . . . . . . . . . . . . . . . . . . . . . . 9
3

Imbun at at irea imaginilor 15
3.1 Operat iile punctuale . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 Accentuarea contrastului . . . . . . . . . . . . . . . . . . . . . 16
3.3

Intinderea maxim a a contrastului . . . . . . . . . . . . . . . . 17
3.4 Binarizarea imaginilor . . . . . . . . . . . . . . . . . . . . . . 18
3.5 Negativarea imaginilor . . . . . . . . . . . . . . . . . . . . . . 19
3.6 Decuparea imaginilor . . . . . . . . . . . . . . . . . . . . . . . 20
i
4 Egalizarea histogramei 25
4.1 Histograma unei imagini . . . . . . . . . . . . . . . . . . . . . 25
4.2 Egalizarea histogramei . . . . . . . . . . . . . . . . . . . . . . 26
4.2.1 Algoritmul de egalizare a histogramei . . . . . . . . . 26
4.3 Observat ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5 Transform ari geometrice de baz a 31
5.1 Translat ia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2 Rotat ia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.3 Oglindirea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6 Zgomotul n imagini 37
6.1 Zgomotul cu distribut ie uniform a . . . . . . . . . . . . . . . . 38
6.2 Zgomotul cu distribut ie gaussian a . . . . . . . . . . . . . . . . 39
6.3 Zgomotul de tip sare si piper . . . . . . . . . . . . . . . . . 41
6.4 Alte tipuri de zgomot . . . . . . . . . . . . . . . . . . . . . . 41
7 Filtrarea imaginilor 47
7.1 Filtrarea liniar a a imaginilor . . . . . . . . . . . . . . . . . . . 47
7.1.1 Filtrele de netezire . . . . . . . . . . . . . . . . . . . . 48
7.1.2 Filtrele trece-sus . . . . . . . . . . . . . . . . . . . . . 51
7.2 Filtrarea neliniar a a imaginilor . . . . . . . . . . . . . . . . . 52
7.2.1 Filtrele de ordine . . . . . . . . . . . . . . . . . . . . . 53
8 Transform ari unitare 59
8.1 Transform ari unitare bidimensionale . . . . . . . . . . . . . . 60
8.1.1 Propriet at ile transform arilor unitare . . . . . . . . . . 62
8.2 Transformata Fourier discret a . . . . . . . . . . . . . . . . . . 62
8.2.1 Transformata Fourier unidimensional a . . . . . . . . . 62
8.2.2 Transformarea Fourier bidimensional a . . . . . . . . . 63
8.3 Transformata cosinus discret a . . . . . . . . . . . . . . . . . . 64
8.4 Transformata sinus discret a . . . . . . . . . . . . . . . . . . . 65
9 Compresia imaginilor 69
9.1 Clasicarea metodelor de compresie . . . . . . . . . . . . . . 69
9.2 Algoritmul Human . . . . . . . . . . . . . . . . . . . . . . . 70
9.3 Algoritmul RLE . . . . . . . . . . . . . . . . . . . . . . . . . 73
9.3.1 Algoritmul RLE pentru imagini binare . . . . . . . . . 73
9.3.2 Algoritmul RLE pentru imagini n tonuri de gri . . . . 73
9.4 Compresia cu transformate . . . . . . . . . . . . . . . . . . . 74
10 Segmentarea imaginilor 81
10.1 Segmentarea orientat a pe regiuni . . . . . . . . . . . . . . . . 81
10.1.1 Pr aguirea histogramei . . . . . . . . . . . . . . . . . . 82
10.1.2 Segmentarea prin crestere de regiuni . . . . . . . . . . 83
10.2 Segmentarea orientat a pe contururi . . . . . . . . . . . . . . . 83
10.2.1 Tehnicile de gradient . . . . . . . . . . . . . . . . . . . 84
10.2.2 Operatorii compas . . . . . . . . . . . . . . . . . . . . 86
10.2.3 Identicarea trecerilor prin zero ale celei de-a doua
derivate . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Lista gurilor 90
Bibliograe 92
iii
iv
Dedicat ie
Doresc s a dedic aceast a carte doamnei Delia G arbacea.
v
vi
Mult umiri
T in s a mult umesc domnului profesor Iuliu Szekely, conduc atorul catedrei
de Electronic a si Calculatoare, din cadrul Universit at ii Transilvania din
Brasov, pentru ncrederea pe care mi-a acordat-o prin ncredint area orelor
de laborator de procesarea imaginilor.
As vrea s a mult umesc domnului profesor Vasile Buzuloiu, conduc atorul
Laboratorului de Analiza si Prelucrarea Imaginilor (LAP), din cadrul Uni-
versit at ii POLITEHNICA din Bucuresti, pentru sprijinul si ndrumarea
acordate n formarea mea profesional a.
Vreau s a mult umesc colegilor din cadrul LAPI, conferent iar Mihai Ciuc si
conferent iar Constantin Vertan, pentru discut iile purtate de-a lungul anilor,
n special cele care au vizat lucr arile de laborator de procesarea imaginilor.
Nu n ultimul r and, vreau s a mult umesc student ilor care, cu sugestii sau
comentarii, au contribuit la mbun at at irea cont inutului acestui ndrumar de
laborator.
vii
Cuvant nainte
Procesarea imaginilor este un domeniu relativ recent, care evolueaz a rapid.
Aplicat iile sale se nt alnesc pretutindeni: n medicin a, armat a, industrie,
art a sau acolo unde informat ia din mediul nconjur ator este reprezentat a sub
form a de imagini. Principala aplicat ie o reprezint ambun at at irea informat iei
cont inute de imagini n vederea interpret arii de c atre un subiect uman sau
pentru vederea articial a a robot ilor.
Odat a cu r asp andirea aparatelor de fotograat digitale, procesarea ima-
ginilor nu mai este domeniul exclusiv al oamenilor de stiint a sau al ingine-
rilor. Aplicat iile de procesare a imaginilor au p atruns n casa oric arui fo-
tograf amator, ind utilizate pentru retusarea fotograilor digitale.

Indrumarul de fat a se adreseaz a n special student ilor de la facult at ile


tehnice, care urmeaz a cursul de Procesarea imaginilor, dar si celor care
doresc s a si nsuseasc a algoritmii fundamentali de procesare a imaginilor.
Lucr arile de laborator prezentate abordeaz a operat iile punctuale, de vecin a-
tate si cele integrale, de la accentuarea contrastului p an a la transform ari
unitare. Ultimul capitol, referitor la segmentarea imaginilor, reprezint a o
incursiune n domeniul analizei imaginilor.
Scopul lucr arilor de laborator este acela de a prezenta not iunile funda-
mentale de procesare a imaginilor alb-negru si de a exemplica folosind lim-
bajul C++ modalit at i de implementare a algoritmilor de procesare prezentat i.
Pentru o nt elegere c at mai bun a a solut iilor propuse, cititorul trebuie s a e
familiarizat cu limbajele de programare C si C++.
ix
Lucrarea 1
Not iuni introductive de Qt
Qt
1
este un mediu de dezvoltare care include biblioteci de clase C++ si
unelte de dezvoltare de aplicat ii pentru diverse sisteme de operare: Microsoft
Windows, MAC OS sau Linux.
Bibliotecile Qt cuprind peste 400 de clase C++, care ncapsuleaz a in-
frastructura necesar a pentru dezvoltarea de aplicat ii. Qt API
2
include clase
pentru realizarea de interfet e grace utilizator, pentru programarean ret ea,
baze de date sau integrare OpenGL
3
.
1.1 Clasa QApplication
Clasa QApplication controleaz a si gestioneaz a interfat a grac a a unei aplica-
t ii. Cont ine bucla principal a de evenimente a aplicat iei, n care sunt proce-
sate evenimentele provenind de la sistemul de ferestre. De asemenea ges-
tioneaz a congur arile aplicat iei, fazele de init ializare si terminare a aplicat iei.
Orice aplicat ie Qt este un obiect QApplication indiferent de num arul de
ferestre ale aplicat iei. Obiectul este accesibil prin apelarea funct iei membre
instance(), care returneaz a un pointer c atre acest obiect.
1.2 Clasa QImage
Clasa QImage pune la dispozit ie o reprezentare independent a de platform a
a unei imagini, care permite accesul direct la valorile pixelilor. Qt ofer a
patru clase pentru manipularea imaginilor: QImage, QPixmap, QBitmap si
QPicture.
Clasa QImage este proiectat a si optimizat a pentru operat ii de intrare/iesi-
re si pentru acces direct la pixelii imaginii, pe c and clasa QPixmap este proiec-
tat a si optimizat a pentru vizualizarea imaginilor pe ecran. Clasa QBitmap
1
Trolltech, http://www.trolltech.com
2
Application Program Interface.
3
Limbaj de grac a 3D dezvoltat de rma Silicon Graphics.
1
2 LUCRAREA 1. NOT IUNI INTRODUCTIVE DE QT
mosteneste clasa Pixmap si este folosit a pentru imagini binare, iar clasa
QPicture este un paint device.

In continuare ne vom concentra atent ia
asupra clasei QImage.
Clasa QImage poate manipula o serie de formate de imagine, care includ
e imagini monocrome, e reprezentate pe 8 bit i sau 32 bit i. Clasa pune
la dispozit ie o colect ie de funct ii care pot folosite pentru obt inerea de
informat ii despre imagine sau care permit anumite transform ari ale imaginii.
1.2.1 Manipularea imaginilor
Clasa QImage ofer a c ateva moduri de a nc arca o imagine dintr-un sier: la
instant ierea obiectului QImage sau folosind funct iile loadFromData() sau
load(), care vor apelate dup a crearea obiectului QImage. Pentru a salva
un obiect de tip QImage se foloseste funct ia save().
Urm atorul exemplu ilustreaz a folosirea funct iei load():
QImage image;
QString filename = QFileDialog :: getOpenFileName();
image.load( filename, 0 );
Lista complet a a formatelor de siere cunoscute este disponibil a prin
intermediul a dou a metode: QImageReader::supportedImageFormats() si
QImageWriter::supportedImageFormats(). Implicit, Qt suport a urm atoa-
rele formate de siere:
Format Descriere Operat ii
BMP Windows Bitmap Read/Write
GIF Graphic Interchange Format (opt ional) Read
JPG Joint Photographic Experts Group Read/Write
JPEG Joint Photographic Experts Group Read/Write
PNG Portable Network Graphics Read/Write
PBM Portable Bitmap Read
PGM Portable Graymap Read
PPM Portable Pixmap Read/Write
XBM X11 Bitmap Read/Write
XPM X11 Pixmap Read/Write
Tabelul 1.1: Formate de siere imagine suportate de Qt.
1.2.2 Atribute ale imaginii
QImage ofer a o colect ie de funct ii pentru obt inerea de informat ii despre
atributele imaginii, cum ar geometria imaginii sau informat ii despre paleta
de culori.
1.2. CLASA QIMAGE 3
Atribute Funct ii
Geometrie Funct iile size(), width(), height(),
dotsPerMeterX() si dotsPerMeterY()
ofer a informat ii despre dimensiunile si as-
pectul imaginii.
Culoare Culoarea unui pixel poate aat a spe-
cic and coordonatele pixelului funct iei
pixel(), care returneaz a culoarea ca
o valoare QRbg.

In cazul imagini-
lor monocrome sau cu nivele de gri,
funct iile numColors() si colorTable
ofer a informat ii despre componentele de
culoare ale imaginii.
Nivel jos Funct ia depth() returneaz a num arul de
bit i pe care este reprezentat a valoarea
unui pixel: 1 (imagini monocrome), 8 sau
32. Funct iile format(), bytesPerLine()
si numBytes() ofer a informat ii despre
modul de stocare a imaginii.
Tabelul 1.2: Funct ii de aare a atributelor unei imagini.
1.2.3 Manipularea pixelilor

In cazul n care culorile pixelilor sunt stocate pe 32 bit i, funct ia setPixel


se poate utiliza pentru modicarea valorii unui pixel specicat prin coor-
donatele sale. Noua sa valoare este un cvadruplu ARGB
4
, ind unul din
argumentele funct iei. Pentru a specica valoarea unui pixel n modelul RGB
se foloseste funct ia qRgb care returneaz a un obiect QRgb.

In continuare este prezentat un exemplu de folosire a funct iei setPixel.


Se creaz a mai nt ai un obiect QImage, reprezent and o imagine de dimensiune
3 x 3.
QImage image(3, 3, QImage::Format_RGB32);
QRgb value;
value = qRgb(189, 149, 39); // 0xffbd9527
image.setPixel(1, 1, value);
value = qRgb(122, 163, 39); // 0xff7aa327
image.setPixel(0, 1, value);
image.setPixel(1, 0, value);
4
Alpha Red Green Blue.
4 LUCRAREA 1. NOT IUNI INTRODUCTIVE DE QT
value = qRgb(237, 187, 51); // 0xffedba31
image.setPixel(2, 1, value);
1.2.4 Formate de imagine
Fiecare pixel stocat ntr-un obiect de tip QImage este reprezentat ca un
ntreg. Dimensiunea acestui ntreg depinde de format. Qt suport a imagini
monocrome, reprezentate pe 1 bit si imagini reprezentate pe 8 sau 32 bit i.
Imaginile monocrome sunt stocate folosind indici de 1 bit ntr-o tabel a
de culoare cu doar dou a intr ari (culori).

In funct ie de ordinea de stocare
a bit ilor, big endian sau little endian, diferent iem dou a tipuri de imagini
monocrome.
Imaginile reprezentate pe 8 bit i sunt stocate folosind indici de 8 bit i
ntr-o tabel a de culoare, av and un byte per pixel. Tabela de culoare este un
obiect QVector<QRgb>.
Imaginile reprezentate pe 32 bit i nu au tabel a de culoare, ecare pixel
cont in and o valoare QRgb. Cea mai r asp andit a modalitate de a reprezenta
tripletul RGB pe 32 bit i este urm atoarea: 0xRRGGBB, n care se folosesc
c ate 8 bit i pentru ecare component a.
Formatul unei imagini se poate determina folosind funct ia format().
Pentru a converti o imagine ntr-un nou format se foloseste funct ia
convertToFormat(), care accept a ca argument noul format al imaginii.
Lucrarea 2
Not iuni introductive de
prelucrarea imaginilor
BREVIAR TEORETIC
2.1 Percept ia imaginilor

Int elegerea procesului de percept ie a imaginilor de c atre ochiul uman este


foarte important a pentru dezvoltarea de tehnici de evaluare a calit at ii unui
sistem sau algoritm de procesare a imaginilor. Informat ia la nivel vizual,
cont inut a de c atre o imagine, reprezint a o distribut ie spat ial a a unei anumite
m arimi, cum ar de exemplu luminant a obiectelor ce compun respectiva
imagine. Informat ia perceput a de ochiul uman poate denit a de atribute
cum ar str alucirea, culoarea sau muchiile unui obiect.
2.1.1 Structura ochiului uman. Formarea imaginii
Ochiul uman are o form a aproape sferic a, av and un diametru, n medie,
de aproximativ 2 cm. Este format din mai multe membrane: corneea si
sclerotica, ca nvelis exterior, si coroida si retina n interior. Corneea este un
t esut dur si transparent, pe c and sclerotica este o t esut opac. Coroida se a a
imediat sub sclerotic a si cont ine o ret ea de vase de s ange, ce hr anesc ochiul.
Este puternic pigmentat a pentru a reduce excedentul de lumin a ce intr a n
ochi. Pe cea mai din interior membran a, retina, se formeaz a imaginea, sub
inuent a luminii reectate de obiectele exterioare ochiului.
Retina cont ine dou a tipuri de receptori: conuri si bastonase. Conurile,
n num ar de aproximativ 6-7 milioane, servesc la percept ia culorilor. Ve-
derea uman a poate percepe detalii foarte ne datorit a densit at ii mari a aces-
tor receptori, ecare con ind legat la o terminat ie nervoas a. Bastonasele,
n num ar de aproximativ 75-150 milioane, servesc vederii crepusculare, n
condit ii de iluminare slab a. Acestea sunt r asp andite pe o arie mare si conec-
5
6 LUCRAREA 2. NOT IUNI INTRODUCTIVE
tate la doar c ateva terminat ii nervoase, ceea ce are ca efect reducerea con-
siderabil a a perceperii detaliilor din imagine.
Cristalinul joac a rolul de lentil a. El cont ine aproximativ 70% ap a si, prin
compozit ia lui, permite trecerea a doar 8% din spectrul de radiat ie vizibil a,
absorbind n bun a m asur a si radiat iile infrarosii si ultraviolete.
Imaginea obiectelor se proiecteaz a pe retin a, prin cristalin, ind r asturna-
t a si av and dimensiuni mult mai mici, principiu ce st a la baza aparatului de
fotograat (vezi Figura 2.1).
Figura 2.1: Formarea imaginii n aparatul de fotograat: 1-lentil a, 2-camera
obscur a, 3-obiectiv, 4-pelicul a.
2.1.2 Lumina. Luminant a. Stralucirea
Lumina este o radiat ie electromagnetic a ce stimuleaz a receptorii de la nivelul
retinei. Ea se exprim a ca ind o distribut ie L() de energie, unde este
lungimea de und a a radiat iei, n cazul nostru vizibil a, cu valori ntre 350 si
780 nm. Lumina perceput a de la un obiect se poate scrie matematic astfel:
I() = ()L() (2.1)
unde () reprezint a m asura n care un obiect reect a sau transmite
energia luminoas a incident a, a c arei distribut ie este exprimat a prin L().
Luminant a sau intensitatea luminoas a a unui obiect cu o distribut ie
spat ial a a luminii, I(x, y, ), se deneste astfel:
f(x, y) =

_
0
I(x, y, )V ()d (2.2)
unde V () este funct ia de ecient a luminoas a relativ a a sistemului vizual.
Pentru ochiul uman, V () este o curb a de tip clopot, a c arei caracteristici
depind de la o persoan a la alta (vezi Figura 2.2).
2.2. MODELUL MATEMATIC AL IMAGINII 7
400.0 440.0 480.0 520.0 560.0 600.0 640.0 680.0 720.0 760.0
lambda (nm)
400.0 440.0 480.0 520.0 560.0 600.0 640.0 680.0 720.0 760.0
Functia de eficienta luminoasa relativa
0.0
0.1
0.2
0.4
0.5
0.6
0.8
0.9
1.0
1.1
1.2
V
(
l
a
m
b
d
a
)
0.0
0.1
0.2
0.4
0.5
0.6
0.8
0.9
1.0
1.1
1.2
Eficienta relativa
Figura 2.2: Forma tipic a a funct iei de ecient a luminoas a relativ a.
Luminant a unui obiect este independent a de luminant a obiectelor din
jur.
Str alucirea unui obiect este luminant a perceput a si depinde de luminant a
mediului ambiant obiectului. Dou a obiecte aatentr-un acelasi ambient pot
avea aceeasi luminant a, dar str aluciri diferite.
2.2 Modelul matematic al imaginii
2.2.1 Modelul continuu al imaginii
Matematic imaginile pot reprezentate ca o funct ie de dou a variabile, n
spat iul L
2
(R
2
), astfel:
imaginile n tonuri de gri se pot modela cu: f(x, y) : R
2
R, caz
n care valorile funct iei f reprezint a valorile luminant ei obiectelor din
imagine, n punctele (x, y) ale spat iului.
imaginile color se pot modela cu: f(x, y) : R
2
R
3
, caz n care
valorile funct iei f reprezint a vectori de 3 componente dintr-un spat iu
al culorilor. De exemplu pot cele trei componente ale modelului
RGB
1
.
Spat iul L
2
(R
2
) poate limitat la un domeniu nit D, ca n Figura 2.3.
1
RGB = (engl.) Red Green Blue.
8 LUCRAREA 2. NOT IUNI INTRODUCTIVE
D
Figura 2.3: Domeniu nit din R
2
.
2.2.2 Modelul discret al imaginii
Acesta este modelul utilizat n practic a. Funct ia f ia valori discrete, ind
deasemenea denit a pe un domeniu de valori discrete, adic a:
f(k, l) : Z
2
Z
+
sau f(k, l) : Z
2
Z
+
3
(2.3)
Trecerea de la domeniul continuu la domeniul discret se face prin esantio-
nare si cuantizare.
2.3 Esantionarea imaginilor
Pentru a putea prelucra cu ajutorul unui calculator o imagine f(x, y), aceasta
trebuie discretizat a spat ial si n amplitudine. Discretizarea coordonatelor
spat iale (x, y) poart a numele de esantionare.
Esantionarea reprezint a procesul de aproximare a unei imagini continue
f(x, y) cu o matrice de dimensiune MxN, astfel:
f(x, y)
_
_
_
_
_
_
f(0, 0) f(0, 1) ... f(0, M 1)
f(1, 0) f(1, 1) ... f(1, M 1)
. . ... .
. . ... .
f(N 1, 0) f(N 1, 1) ... f(N 1, M 1)
_
_
_
_
_
_
(2.4)
Teorema esantion arii: O imagine f(x, y), av and un spectru nit,
esantionat a uniform cu o ret ea dreptunghiular a de forma celei din Figura
2.4 poate ref acut a f ar a eroare din esantioanele f(mx, ny) cu ajutorul
formulei de interpolare:
f(x, y) =

m=

n=
f(mx, ny)
_
sin(xu
s
m)
(xu
s
m)
__
sin(xv
s
n)
(xv
s
n)
_
(2.5)
2.4. CUANTIZAREA IMAGINILOR 9
unde u
s
si v
s
reprezint a frecvent ele spat iale de esantionare.
Egalitatea dat a de teorema esantion arii este valabil a dac a si numai dac a
este respectat a condit ia Nyquist, si anume:
1
x
= u
s
> 2u
0
,
1
y
= v
s
> 2v
0
(2.6)
unde u
0
si v
0
reprezint a frecvent ele spat iale maxime care apar n imagine.
n
m
dx
dy
Figura 2.4: Ret ea dreptunghiular a de esantionare.
Cu alte cuvinte, frecvent ele spat iale de esantionare trebuie s a e cel put in
dublul frecvent elor spat iale maxime cont inute de imagine.
2.4 Cuantizarea imaginilor
Cuantizarea este procesul de discretizare a valorilor funct iei f(x, y). Aceasta
se realizeaz a de obicei cu ajutorul unei funct ii de tip scar a, de forma celei
din Figura 2.5.
Astfel, tuturor valorilor lui x dintr-un interval li se atribuite valori dis-
crete k. Cuantizarea este un proces nsot it de zgomot, cunoscut sub numele
de eroare de cuantizare. Cea mai utilizat a metod a de cuantizare este cea
uniform a, ceea ce nseamna c a intervalele funct iei de cuantizare sunt egale.
2.5 Imaginile digitale
Imaginile astfel discretizate reprezint a structuri bidimensionale de date, de-
numite imagini digitale. Un element (k, l) al imaginii poart a numele de
pixel
2
.
2
pixel = (engl. picture + element).
10 LUCRAREA 2. NOT IUNI INTRODUCTIVE
k
x
Figura 2.5: Exemplu de funt ie de cuantizare.
Imaginile digitale pot stocate n memoria sau pe discul unui sistem
de procesare si analiz a a imaginilor, n vederea vizualiz arii sau prelucr arii
ulterioare. Pe disc imaginile sunt stocate sub forma unor siere. Fisierele
pot de mai multe feluri, n funct ie de formatul n care p astreaz a datele ce
reprezint a imagini: BMP, JPEG, GIF, TIFF, etc.
Cel mai simplu format de sier imagine este Windows Bitmap (BMP)
al rmei Microsoft. Acesta este formatul n care o imagine digital a este
stocat a practic f ar a nici un fel de codare sau pierdere de informat ie, cu
except ia reprezent arii binare.
DESF

ASURAREA LUCR

ARII

In continuare este prezentat codul C++ al unei aplicat i care citeste o imag-
ine n format BMP si o aseaz a ntr-o fereastr a pe ecran. Aplicat ia este
dezvoltat a utiliz and bibliotecile Qt (Linux). Citit i si nt eleget i codul.
Fisierul aplicatie.h cont ine declararea clasei ImageViewer.
#ifndef APLICATIE_H
#define APLICATIE_H
#include <qwidget.h>
#include <qimage.h>
#include <qpainter.h>
#include <qlabel.h>
class QMenuBar;
class QPopupMenu;
class ImageViewer : public QWidget
2.5. IMAGINILE DIGITALE 11
{
Q_OBJECT
public:
ImageViewer( QWidget *parent = 0, const char *name = 0,
int wFlags = 0 );
~ImageViewer();
bool loadImage( const char *fileName );
protected:
void paintEvent( QPaintEvent * );
private:
int conversion_flags;
int alloc_context;
QImage image;
QPixmap pm;
QMenuBar *menubar;
QPopupMenu *file;
QLabel *status;
bool reconvertImage();
private slots:
void openFile( void );
void saveFile( void );
};
#endif // APLICATIE_H
Fisierul aplicatie.cpp cont ine denit iile funct iilor membre clasei Im-
ageViewer.
#include "aplicatie.h"
#include <qmenubar.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#include <qpopupmenu.h>
#include <qpainter.h>
#include <qapplication.h>
#include <qwidget.h>
ImageViewer :: ImageViewer( QWidget *parent, const char *name,
int wFlags ) : QWidget( parent , name , wFlags ),
conversion_flags( PreferDither ), filename( 0 )
{
alloc_context = 0;
12 LUCRAREA 2. NOT IUNI INTRODUCTIVE
menubar = new QMenuBar( this );
menubar->setSeparator( QMenuBar :: InWindowsStyle );
file = new QPopupMenu();
CHECK_PTR( file );
menubar->insertItem( "&File" , file );
file->insertItem( "Open image ( BMP )", this,
SLOT( openFile() ), CTRL+Key_O );
file->insertSeparator();
file->insertItem( "Save as ... ( BMP )", this,
SLOT( saveFile() ), CTRL+Key_S );
file->insertSeparator();
file->insertItem( "Quit", qApp, SLOT(quit()), CTRL+Key_Q );
status = new QLabel( this );
status->setFrameStyle( QFrame::WinPanel | QFrame::Sunken );
status->setFixedHeight( fontMetrics().height() + 4 );
setMouseTracking( TRUE );
}
ImageViewer :: ~ImageViewer()
{
if ( alloc_context )
QColor :: destroyAllocContext( alloc_context );
delete menubar;
delete file;
delete help;
delete status;
}
void ImageViewer :: openFile()
{
QString newfilename = QFileDialog :: getOpenFileName();
if ( !newfilename.isEmpty() )
{
loadImage( newfilename );
repaint();
}
}
void ImageViewer :: saveFile( void )
2.5. IMAGINILE DIGITALE 13
{
QImageIO iio;
QString save_as_file = QFileDialog :: getSaveFileName();
if( !save_as_file.isEmpty() )
{
iio.setImage( image );
iio.setFileName( save_as_file );
iio.setFormat( "BMP" );
iio.write();
}
}
bool ImageViewer :: loadImage( const char *fileName )
{
bool ok = FALSE;
int w, h;
if( filename )
{
QApplication :: setOverrideCursor( waitCursor );
ok = image.load( filename , 0 );
pm.convertFromImage( image , conversion_flags );
if( ok )
{
setCaption( filename );
w = pm.width();
h = pm.height();
h += menubar->heightForWidth(w) + status->height();
}
else
{
pm.resize( 0 , 0 );
update();
}
setFixedWidth( w );
setFixedHeight( h );
status->setGeometry( 0, height() - status->height(),
width(), status->height() );
QApplication :: restoreOverrideCursor();
}
return ok;
14 LUCRAREA 2. NOT IUNI INTRODUCTIVE
}
void ImageViewer :: paintEvent( QPaintEvent *e )
{
if( pm.size() != QSize( 0, 0 ) )
{
QPainter painter( this );
painter.setClipRect( e->rect() );
painter.drawPixmap( 0, menubar->heightForWidth(
width() ), pm );
}
}
Fisierul main.cpp cont ine instant ierea unui obiect QApplication si a
unuia de tip ImageViewer.
#include "aplicatie.h"
#include <qapplication.h>
#include <qimage.h>
#ifdef QIMGIO
#include <qimageio.h>
#endif
int main( int argc, char **argv )
{
QApplication :: setFont( QFont( "Helvetica" , 12 ) );
QApplication a( argc, argv );
#ifdef QIMGIO
qInitImageIO();
#endif
ImageViewer *w = new ImageViewer( 0, "main window",
QWidget :: WDestructiveClose ) ;
w->show() ;
QObject :: connect( qApp, SIGNAL( lastWindowClosed() ),
qApp, SLOT(quit()) );
return a.exec() ;
}
Lucrarea 3

Imbunatat irea imaginilor


prin operat ii punctuale
BREVIAR TEORETIC
Termenul general de mbun at at ire a imaginilor se refer a la o clas a larg a
de operat ii, ce au ca scop m arirea detectabilit at ii componentelor imaginii.
Aceast a detectabilitate depinde n primul r and de percept ia vizual a a unui
observator uman si deci reprezint a o apreciere subiectiv a a imaginii.

Imbun at at irea calit at ii unei imagini se face f ar a a presupune vreun model


de degradare sau a lua n considerare vreo informat ie legat a de imaginea
original a. Paradoxal, dar si o imagine original a (nedegradat a) poate
mbun at at it a.

In general, mbun at at irea se refer a la accentuarea unor caracteristici


ale imaginii, cum ar muchiile, contururile sau contrastul. Procesul de
mbun at at ire nu m areste cantitatea de informat ie cont inut a de o imagine.
3.1 Operat iile punctuale
Operat iile punctuale sunt denite de o funct ie, care atribuie un nou nivel
de gri pixelilor din imagine. Noua valoare a pixelului va depinde doar de
vechea valoare a acestuia, de unde si denumirea de operat ie punctual a.
Matematic se poate scrie:
g(k, l) = (f(k, l)) (3.1)
unde f este imaginea original a, iar g imaginea mbun at at it a. g(k, l)
reprezint a noua valoare a pixelului (k, l), iar f(k, l) vechea valoare. Operat ia
punctual a este descris a de funct ia .
O operat ie sau o transformare punctual a este reprezentat a n Figura 3.1.
15
16 LUCRAREA 3.

IMBUN

AT

AT IREA IMAGINILOR
f
g
(k,l)
(k,l)
o
Figura 3.1: Reprezentarea unei operat ii punctuale.
3.2 Accentuarea contrastului
Aceast a operat ie se foloseste n special pentru mbun at at irea imaginilor cu
contrast sc azut. Acesta poate ap area datorit a unei slabe ilumin ari, a unei
ilumin ari neuniforme sau din cauza unor neliniarit at i ale caracteristicilor
unui senzor de captur a a imaginii. O funct ie tipic a de accentuare a con-
trastului are urm atoarea form a matematic a:
(x) =
_
_
_
x, pentru x [0, a)
(x a) +v
a
, pentru x [a, b)
(x b) +v
b
, pentru x [b, L)
(3.2)
unde L reprezint a num arul de nivele pe care se face cuantizarea tonurilor
de gri. Cazul cel mai frecvent este L = 256, pentru o cuantizare pe 8 bit i, x
lu and valori n intervalul [0,255]. Valorile , si reprezint a pantele celor
trei segmente de dreapt a.
0 a b L x
v
b
v
a
) x (
Figura 3.2: Funct ia de accentuare de contrast.
Dup a cum se observ a din Figura 3.2, pantele si sunt pozitive si
subunitare, iar panta este pozitiv a si supraunitar a. Un segment cu pant a
subunitar a realizeaz a o apropiere a nivelelor de gri, pe c and un segment
3.3.

INTINDEREA MAXIM

A A CONTRASTULUI 17
cu pant a supraunitar a va realiza o dep artare a nivelelor de gri, si deci o
accentuare a contrastului.
3.3

Intinderea maxima a contrastului
Aceasta este un caz particular al operat iei de accentuare. Se foloseste, n
general, pentru reducerea zgomotului dintr-o imagine, atunci c and se stie
c a acesta ia valori cu prec adere n intervalul [a, b]. Forma matematic a este
urm atoarea:
(x) =
_
_
_
0, pentru x [0, a)
(x a), pentru x [a, b]
L 1, pentru x (b, L)
(3.3)
Nivelele de gri aate n intervalul [a, b] vor distant ate, ca urmare a
pantei supraunitare, iar nivelele de gri ce se g asesc n afara acestui interval,
vor nlocuite e cu alb, e cu negru, dup a caz.
0 a b x
) x (
L1
L1
Figura 3.3: Funct ia de ntindere maxim a a contrastului.
18 LUCRAREA 3.

IMBUN

AT

AT IREA IMAGINILOR
(a) (b)
Figura 3.4:

Intinderea maxim a a contrastului: (a) imaginea original a si (b)
imaginea rezultat a, pentru a=50, b=200.
3.4 Binarizarea imaginilor
Binarizarea sau pr aguirea (thresholding) imaginilor este un caz special al
ntinderii maxime a contrastului, pentru care a = b. Rezultatul operat iei de
binarizare este o imagine care cont ine doar dou a nivele de gri: alb si negru.
Pentru imagini n tonuri de gri, operat ia de binarizare se scrie matematic
astfel:
(x) =
_
0, pentru x < T
L 1, pentru x T
(3.4)
unde T este o valoare de prag, reprezent and o valoare ntreag a din in-
tervalul [0, L).
Pentru imaginile color, binarizarea se poate face n urm atorul mod:
(v) =
_
0, pentru Y (v) < T
L 1, pentru Y (v) T
(3.5)
unde v este un vector tridimensional ce reprezint a culoarea pixelului (de
exemplu v = (R, G, B) ), iar Y (v) reprezint a luminant a (Y = 0.3R+0.6G+
0.1B ).

In urma acestei transform ari, contrastul este maximizat la nivelul ntregii


imagini.
3.5. NEGATIVAREA IMAGINILOR 19
0 x
) x (
T L1
L1
Figura 3.5: Funct ia de binarizare.
(a) (b)
Figura 3.6: Binarizarea: (a) imaginea original a si (b) imaginea binarizat a
cu T=127.
3.5 Negativarea imaginilor
Negativul unei imagini se obt ine prin inversarea ordinii nivelelor de gri.
Pentru imaginile n tonuri de gri, operat ia de negativare se face folosind
funct ia:
(x) = (L 1) x (3.6)
reprezentat a n Figura 3.7, iar pentru imaginile color:
(v) = ((L 1) R, (L 1) G, (L 1) B) (3.7)
20 LUCRAREA 3.

IMBUN

AT

AT IREA IMAGINILOR
) x (
x
L1
L1
0
Figura 3.7: Funct ia de negativare.
Negativarea imaginilor este util a pentru asarea unor imagini medicale
sau pentru realizarea de imagini negative pe suporturi zice, de exemplu,
de tip pelicul a.
(a) (b)
Figura 3.8: Negativarea: (a) imaginea original a si (b) negativul imaginii.
3.6 Decuparea imaginilor
Decuparea cu p astrarea fundalului este dat a de formula:
(x) =
_
L 1, pentru x [a, b]
x, n rest.
(3.8)
iar decuparea f ar a p astrarea fundalului este dat a de formula:
3.6. DECUPAREA IMAGINILOR 21
(x) =
_
L 1, pentru x [a, b]
0, n rest.
(3.9)
0 a b x
(x)
L1
L1
Figura 3.9: Funct ia de decupare cu p astrarea fundalului.
) x (
0 a b x L1
L1
Figura 3.10: Funct ia de decupare f ar a p astrarea fundalului.
Aceste operat ii permit decuparea unor regiuni din imagine, caracte-
rizate de anumite nivele de gri. Acest lucru este folosit atunci c and diferite
carcaterisitici ale imaginii snt cont inute n nivelele de gri respective, cum
ar de exemplu decuparea regiunilor de temperatur a joas a reprezentate
de nori din imaginile obt inute de un satelit meteo.

In astfel de imagini,
nivelele de gri ce corespund unor nori snt direct proport ionale cu valorile
de temperaturi joase.
DESF

ASURAREA LUCR

ARII
Problema 1. Compilat i sursele C++ ale lucr arii. Rulat i aplicat ia si
22 LUCRAREA 3.

IMBUN

AT

AT IREA IMAGINILOR
observat i rezultatul accentu arii contrastului pentru o imagine n tonuri de
gri (lena AN.bmp). Funct ia care realizeaz a accentuarea contrastului este
prezentat a n continuare, pentru urm atoarele valori: a = 80, b = 170,
V
a
= 20 si V
b
= 235.
Pantele care caracterizeaz a funct ia de accentuare a contrastului vor
urm atoarele: =
20
80
= 0.4, =
23520
17080
=
215
90
si =
255235
255170
=
20
85
.
int ImageViewer :: f_accentuare( int nivel_gri )
{
if( nivel_gri >= 0 && nivel_gri <= 80 )
return ( int )( 0.4 * nivel_gri );
if( nivel_gri > 80 && nivel_gri <= 170 )
return ( int )( 215 / 90. * ( nivel_gri - 80 ) + 20 );
if( nivel_gri > 170 && nivel_gri <= 255 )
return ( int )( 20 / 85. * ( nivel_gri - 170 ) + 235 );
return nivel_gri;
}
void ImageViewer :: accentueaza_contrastul( void )
{
int w, h;
int i, j;
w = image.width();
h = image.height();
QImage imag_acc( w, h, 32, 0, QImage :: IgnoreEndian );
for( i = 0; i < w; i++ )
for( j = 0; j < h; j++ )
{
QRgb pixel = image.pixel( i, j );
int gri_vechi = qRed( pixel );
int gri_nou = f_accentuare( gri_vechi );
imag_acc.setPixel( i, j,
qRgb( gri_nou, gri_nou, gri_nou ) );
}
QImageIO iio;
iio.setImage( imag_acc );
3.6. DECUPAREA IMAGINILOR 23
iio.setFileName( "imag_acc.bmp" );
iio.setFormat( "BMP" );
iio.write();
}
Problema 2. Modicat i valorile a, b, V
a
si V
b
ale funct iei de accentuare
a contrastului, si observat i rezultatele accentu arii contrastului.
Problema 3. Implementat i operat ia de ntindere maxim a a contrastu-
lui.
Problema 4. Implementat i operat ia de binarizare. Observat i rezul-
tatele acesteia pentru diferite valori ale pragului T.
Problema 5. Observat i rezultatul operat iei de negativare, pentru o
imagine n tonuri de gri si pentru o imagine color.
void ImageViewer :: negativeaza_imaginea( void )
{
int w, h;
int i, j;
w = image.width();
h = image.height();
QImage imag_neg( w, h, 32, 0, QImage :: IgnoreEndian );
for( i = 0; i < w; i++ )
for( j = 0; j < h; j++ )
{
QRgb pixel = image.pixel( i, j );
int r = qRed( pixel );
int g = qGreen( pixel );
int b = qBlue( pixel );
imag_neg.setPixel( i, j, qRgb(255-r, 255-g, 255-b) );
}
QImageIO iio;
iio.setImage( imag_neg );
iio.setFileName( "imag_neg.bmp" );
iio.setFormat( "BMP" );
iio.write();
}
Problema 6. Implementat i cele dou a operat ii de decupare.
24 LUCRAREA 3.

IMBUN

AT

AT IREA IMAGINILOR
Lucrarea 4

Imbunatat irea imaginilor


prin egalizarea histogramei
BREVIAR TEORETIC
Tehnicile dembun at at ire a imaginilor bazate pe calculul histogramei modi-
c a histograma astfel nc at aceasta s a aib a o anumit a form a dorit a.
4.1 Histograma unei imagini
Histograma unei imagini reprezint a frecvent a relativ a de aparit ie a nivelelor
de gri din imagine. Pentru o imagine f, de dimensiune M N pixeli,
histograma se deneste astfel:
h(i) =
1
MN
M1

m=0
N1

n=0
(i, f(m, n)) , i = 0, .., L 1 (4.1)
unde funct ia este denit a n urm atorul mod:
(x, y) =
_
1, dac a x = y,
0, dac a x = y.
(4.2)
Din punct de vedere statistic, putem considera valoarea ec arui pixel al
imaginii ca o realizare particular a a unei variabile aleatoare asociat a nivelelor
de gri, cazn care histograma reprezint a funct ia de densitate de probabilitate
a acestei variabile aleatoare. Fiind o funct ie de densitate de probabilitate,
histograma oric arei imagini veric a condit ia de normare:
L1

i=0
h(i) = 1 (4.3)
Practic, calculul histogramei presupune parcurgerea pixel cu pixel a
imaginii si contorizarea num arului de nivele de gri nt alnite.
25
26 LUCRAREA 4. EGALIZAREA HISTOGRAMEI
4.2 Egalizarea histogramei
Egalizarea histogramei reprezint a o operat ie de accentuare a contrastului si
are ca scop obt inerea unei histograme uniforme.
Vom asocia unui pixel din imagine o variabil a aleatoare . Astfel, va-
lorile intensit at ii luminoase ale pixelilor reprezint a realiz ari particulare ale
variabilei aleatoare asociate. Vom considera c a variabila aleatoare are o
densitate de probabilitate w

(x) si o funct ie de repartit ie F

(x) = P{ x}.
Vom deni n continuare variabila , care are funct ia de repartit ie:
F

(x) =
x
_
0
p

(t)dt
si care va uniform distribuit a n intervalul (0, 1).
Pentru cazul discret, presupunem c a nivelele x de gri ale pixelilor au va-
lori ntre 0 si L1 (unde L este de regul a 256), av and asociate probabilit at ile
de aparit ie p

(x
i
), unde x
i
= 0, 1, ..., L 1. Aceste probabilit at i pot
estimate pe baza calculului histogramei, consider and imaginea dat a, ca ind
o realizare particular a a procesului aleator descris de variabila aleatoare ,
astfel:
p

(x
i
) =
h(x
i
)
L1

i=0
h(x
i
)
Noile nivele de gri, reprezent and valori discrete ale variabilei din inter-
valul [0, L 1] se vor calcula cu formulele:
h
c
(x) =
x

x
i
=0
p

(x
i
)
nivel
nou
= int
_
h
c
[nivel
vechi
] h
cmin
1 h
cmin
(L 1) + 0.5
_
unde h
c
reprezint a histograma cumulativ a a imaginii, iar h
cmin
este va-
loarea minim a a histogramei cumulative.
4.2.1 Algoritmul de egalizare a histogramei
Algoritmul de egalizare de histogram a, folosit n practic a, poate descris n
limbaj pseudocod astfel:
Pasul 1. Se calculeaz a histograma imaginii:
pentru i = 1,..,L
h[i] = 0
pentru i = 1,..,M
pentru j = 1,..,N
4.3. OBSERVATII 27
nivel = imagine[i,j]
h[nivel] = h[nivel] + 1
unde L este num arul de nivele de gri (256), h este histograma imaginii, iar
M si N sunt dimensiunile imaginii.
Pasul 2. Se calculeaz a histograma cumulativ a a imaginii:
hc[1] = h[1]
pentru i = 2,..,L
hc[i] = hc[i-1] + h[i]
Pasul 3. Se calculeaz a noile nivele de gri din imagine, sub forma unei
transform ari y = T(x) dat a de formula:
y = T(x) =
_
hc[x] hc[1]
NM hc[1]
(L 1) + 0.5
_
astfel:
pentru i = 1,..,M
pentru j = 1,..,N
nivel vechi = imagine[i,j]
nivel nou = T(nivel vechi)
imagine[i,j] = nivel nou
4.3 Observat ii
Desi la prima vedere egalizarea de histogram a ar p area c a este o
operat ie punctual a, din cauza formulei de calcul a noilor valori de
gri, ea este totusi o operat ie integral a, datorit a faptului c a pentru
ecare pixel din imagine noua valoare se calculeaz a pe baza calculului
histogramei si, deci, pe baza valorilor tuturor pixelilor din imagine.


In Figura 4.1 putet i observa cum imaginea a fost mbun at at it a prin
egalizarea histogramei.


In Figura 4.2 putet i observa cum s-a modicat forma histogramei ima-
ginii originale, dup a egalizare.
28 LUCRAREA 4. EGALIZAREA HISTOGRAMEI
(a) (b)
Figura 4.1: Egalizarea histogramei: (a) imaginea original a si (b) imaginea
rezultat a.
(a)
(b)
Figura 4.2: Histograma (a) original a si (b) dup a egalizare.
4.3. OBSERVATII 29
DESF

ASURAREA LUCR

ARII
O posibil a implementare a algoritmului de egalizare a histogramei este prezen-
tat n continuare:
void ImageViewer :: egalizeaza_histograma( void )
{
int i, j;
int width, height;
int h[ 256 ];
for( i = 0; i < 256; i++ )
h[ i ] = 0;
width = image.width();
height = image.height();
//calcularea histogramei imaginii
for( i = 0; i < width; i++ )
for( j = 0; j < height; j++ )
{
QRgb pixel;
pixel = image.pixel( i, j );
int nivel_gri = qRed( pixel );
h[ nivel_gri ]++ ;
}
//calcularea histogramei cumulative
double hc[ 256 ];
hc[ 0 ] = h[ 0 ];
for( i = 1; i < 256; i++ )
hc[ i ] = hc[ i - 1 ] + h[ i ];
QImage imag_eq( width, height, 32, 0, QImage::IgnoreEndian );
//egalizarea histogramei
for( i = 0; i < width; i++ )
for( j = 0; j < height; j++ )
{
QRgb pixel = image.pixel( i, j );
int nivel = qRed( pixel );
30 LUCRAREA 4. EGALIZAREA HISTOGRAMEI
int nivel_nou = (int)( ( hc[nivel] - hc[0] ) * 255 /
( width*height - hc[0] ) );
imag_eq.setPixel( i, j,
qRgb( nivel_nou, nivel_nou, nivel_nou ) );
}
image = imag_eq;
pm = image;
update();
}
Problema 1. Observat i forma histogramei pentru c ateva imagini n
tonuri de gri.
Problema 2. Observat i efectele egaliz arii de histogram a pentru diferite
imagini, inclusiv pentru o imagine subexpus a si pentru una supraexpus a.
Problema 3. Modicat i funct ia histograma imaginii astfel nc at
aceasta s a calculeze histograma cumulativ a a imaginii. Observat i forma
unei histograme cumulative.
Problema 4. Justicat i faptul c a histograma cumulativ a a unei imagini
poate considerat a estimatul unei funct ii de repartit ie.
Lucrarea 5
Transformari geometrice de
baza
BREVIAR TEORETIC
Transform arile geometrice sunt transform ari care nu modic a valorile pi-
xelilor din imagine, ci modic a doar asezarea lor spat ial a. Cu alte cuvinte,
las a nemodicat a compozit ia imaginii, alter andu-i ns a structura.

In urma
aplic arii unei transform ari geometrice asupra unei imagini, histograma aces-
teia nu se modic a.
5.1 Translat ia
Translat ia se deneste ca ind operat ia de modicare n linie dreapt a a
coordonatelor unui pixel din imagine de la o pozit ie la alta. Un pixel de
coordonate carteziene (x, y) va avea dup a translat ie coordonatele (x

, y

),
astfel:
_
x

= x +T
x
y

= y +T
y
(5.1)
unde perechea (T
x
, T
y
) reprezint a vectorul de translat ie (vezi Figura 5.1).
Translatarea unei imagini se realizeaz a prin translatarea ec arui pixel
n parte. Valorile T
x
si T
y
sunt numere ntregi pozitive sau negative.

In
cazul n care noile coordonate ale unui pixel dep asesc dimensiunile imaginii,
atunci el va pozit ionat n partea opus a a imaginii, ca n Figura 5.2.
5.2 Rotat ia
Rotat ia se deneste ca ind operat ia de modicare dup a o traiectorie cir-
cular a a coordonatelor unui pixel din imagine (vezi Figura 5.3). Rotat ia
31
32 LUCRAREA 5. TRANSFORM

ARI GEOMETRICE DE BAZ

A
y
x (0,0)
(T ,T )
x y
Figura 5.1: Translatarea unui obiect dreptunghiular.
Figura 5.2: Translatarea spre dreapta a unui obiect dreptunghiular ntr-o
imagine.
este specicat a de unghiul . Pozit ia unui pixel, exprimat a n coordonate
carteziene (x, y), se exprim a n coordonate polare (r, ) astfel:
_
x = rcos
y = rsin
(5.2)
Noile coordonate carteziene (x

, y

) ale pixelului rotit cu un unghi vor


:
_
x

= rcos( +) = rcoscos rsinsin = xcos ysin


y

= rsin( +) = rsincos +rcossin = xsin +ycos


(5.3)
5.3. OGLINDIREA 33
y
x
(x,y)
(x ,y )
Figura 5.3: Rotat ia.
5.3 Oglindirea
Oglindirea este operat ia prin care se produce imaginea n oglind a a unui
obiect, relativ la o ax a de oglindire.

In Figura 5.4 sunt ilustrate cele dou a
feluri de oglindire: oglindirea st anga-dreapta si cea sus-jos.
(a) (b)
Figura 5.4: Oglindirea (a) st anga-dreapta (b) sus-jos.
Observat i n Figura 5.5 efectele oglindirii st anga-dreapta a imaginii
Lena, fat a de o ax a vertical a ce trece prin centrul imaginii.
34 LUCRAREA 5. TRANSFORM

ARI GEOMETRICE DE BAZ

A
(a) (b)
Figura 5.5: Oglindirea st anga-dreapta: (a) imaginea original a; (b) imag-
inea oglindit a.
DESF

ASURAREA LUCR

ARII

In continuare este prezentat codul C care implementeaz a translat ia unei


imagini pe orizontal a, cu un deplasament de 100 de pixeli. Citit i si nt eleget i
codul.
void ImageViewer :: translateaza_imaginea( void )
{
int w, h;
int i, j;
int iprim, tx = 100;
w = image.width();
h = image.height();
QImage imag_tx( w, h, 32, 0, QImage :: IgnoreEndian );
for( i = 0; i < w; i++ )
for( j = 0; j < h; j++ )
{
QRgb pixel = image.pixel( i, j );
iprim = i + tx;
if( iprim >= w )
iprim -= w;
5.3. OGLINDIREA 35
imag_tx.setPixel( iprim, j, pixel );
}
image = imag_tx;
pm = image;
update();
}
Problema 1. Implementat i operat ia de translat ie, pentru urm atorii doi
vectori de translat ie: (0,100) si (100,100).
Problema 2. Implementat i operat ia de oglindire st anga-dreapta fat a
de axa vertical a ce trece prin centrul imaginii.
Problema 3. Implementat i operat ia de oglindire sus-jos fat a de axa
orizontal a ce trece prin centrul imaginii.
36 LUCRAREA 5. TRANSFORM

ARI GEOMETRICE DE BAZ

A
Lucrarea 6
Zgomotul n imagini
BREVIAR TEORETIC
Zgomotul este un semnal aleator, care afecteaz a informat ia util a cont inut a
ntr-o imagine. El poate apare de-alungul unui lant de transmisiune, sau
prin codarea si decodarea imaginii, si reprezint a un element perturbator ne-
dorit. De obicei se ncearc a eliminarea lui prin diverse metode de ltrare.
Zgomotul se poate suprapune informat iei utile n dou a moduri:
aditiv.

In acest caz, zgomotul se numeste zgomot aditiv si matematic
se poate scrie:
g(x, y) = f(x, y) +n(x, y) (6.1)
unde f(x, y) este imaginea init ial a, neafectat a de zgomot, n(x, y) este
zgomotul, iar g(x, y) este imaginea afectat a de zgomot.
multiplicativ.

In acest caz zgomotul se numeste zgomot multiplicativ,
iar fenomenul de suprapunere al acestuia peste informat ia util a se scrie
matematic astfel:
g(x, y) = f(x, y) n(x, y) (6.2)
unde f(x, y), n(x, y) si g(x, y) au aceleasi semnicat ii ca mai sus.

In continuare vom trata zgomotul ca ind aditiv. Modelul de degradare


a imaginii este reprezentat n gura 6.1. Zgomotul multiplicativ poate
tratat la fel de simplu ca zgomotul aditiv, dac a logaritm am relat ia (6.2):
log(g(x, y)) = log(f(x, y) n(x, y)) = log(f(x, y)) +log(n(x, y)) (6.3)
Cantitativ, se poate aprecia m asuran care zgomotul a afectat informat ia
util a, calcul and raportul semnal-zgomot
1
:
1
SNR = (engl.) Signal Noise Ratio.
37
38 LUCRAREA 6. ZGOMOTUL

IN IMAGINI
f(x,y) g(x,y)
n(x,y)
Figura 6.1: Modelul aditiv de degradare.
SNR = 10log
M1

i=0
N1

j=0
f
2
(i, j)
M1

i=0
N1

j=0
n
2
(i, j)
[dB] (6.4)
SNR = 10log
M1

i=0
N1

j=0
f
2
(i, j)
M1

i=0
N1

j=0
[f(i, j) g(i, j)]
2
[dB] (6.5)
Raportul semnal-zgomot reprezint a raportul dintre energia imaginii ori-
ginale si energia zgomotului suprapus acesteia.

In continuare vom asocia
valorilor pe care le ia zgomotul o variabil a aleatoare , care, n funct ie de
tipul zgomotului, va caracterizat a de diferite funct ii de densitate de prob-
abilitate.
6.1 Zgomotul cu distribut ie uniforma
Zgomotul cu distribut ie uniform a (vezi Figura 6.2) este caracterizat de o
funct ie de densitate de probabilitate de forma:
w

(x) =
_
A, pentru x
_

k
2
;
k
2

,
0, n rest.
(6.6)

In Figura 6.3 putet i observa efectele zgomotului cu distribut ie uniform a


asupra imaginii Lena, pentru un raport semnal/zgomot de 5 dB.
6.2. ZGOMOTUL CU DISTRIBUTIE GAUSSIAN

A 39
w(x)
x k/2 0 k/2
A
Figura 6.2: Funct ia de densitate de probabilitate pentru o distribut ie uni-
form a.
(a) (b)
Figura 6.3: Zgomotul uniform: (a) imaginea original a; (b) imaginea afectat a
de zgomot uniform, SNR=5 dB.
6.2 Zgomotul cu distribut ie gaussiana
Zgomotul gaussian este caracterizat de o funct ie de densitate de probabili-
tate de forma (vezi Figura 6.4):
w

(x) =
1

2
2
e

(x)
2
2
2
(6.7)
40 LUCRAREA 6. ZGOMOTUL

IN IMAGINI
-6.0 -4.8 -3.6 -2.4 -1.2 0.0 1.2 2.4 3.6 4.8 6.0
x
-6.0 -4.8 -3.6 -2.4 -1.2 0.0 1.2 2.4 3.6 4.8 6.0
0.0
0.0
0.1
0.1
0.1
0.2
0.2
0.2
0.3
0.3
0.3
w
(
x
)
0.0
0.0
0.1
0.1
0.1
0.2
0.2
0.2
0.3
0.3
0.3
Figura 6.4: Funct ia de densitate de probabilitate pentru o distribut ie gaus-
sian a.
Valoarea medie a unei variabilei aleatoare , cu o distribut ie dat a de
funct ia w

(x) ca n relat ia (6.7), este , iar variant a ei este


2
. O distribut ie
gaussian a se mai numeste si normal a. O distribut ie normal a de medie si
variant a
2
se noteaz a cu N(,
2
).

In Figura 6.5 putet i observa efectele zgomotului cu distribut ie gaussian a


asupra imaginii Lena, pentru un raport semnal/zgomot de 5 dB.
(a) (b)
Figura 6.5: Zgomotul Gaussian: (a) imaginea original a; (b) imaginea afec-
tat a de zgomot gaussian, SNR=5 dB.
6.3. ZGOMOTUL DE TIP SARE SI PIPER 41
6.3 Zgomotul de tip sare si piper
Dup a cum i spune numele, acest tip de zgomot va afecta valorile pixelilor
n dou a moduri: sare - adic a noua valoare a pixelului va 255 (pixelul
va alb), sau piper - adic a noua valoare a pixelului va 0 (pixelul va
negru). Zgomotul de tip sare si piper (vezi Figura 6.6) este perfect
decorelat, deoarece ntre valorile 0 si 255, si ntre coordonatele pixelilor
afectat i de zgomot nu exist a corelat ie.
(a) (b)
Figura 6.6: Zgomotul sare si piper: (a) imaginea original a; (b) imaginea
cu 10% pixeli afectat i de zgomot.
6.4 Alte tipuri de zgomot
Zgomotele difer a ntre ele n funct ie de distribut ia care le caracterizeaz a.
Alte funct ii de distribut ie utilizate sunt:
distribut ia Rayleigh: w

(x) = xe

x
2
2
distribut ia Maxwell: w

(x) = x
2
e

x
2
2
distribut ia Beta: w

(x) = x
b
(1 x)
c
distribut ia Gamma (Erlang): w

(x) = x
n
e
x
distribut ia Laplace: w

(x) = e
|x|
distribut ia Cauchy: w

(x) =
1
1+x
2
Aceste funct ii sunt reprezentate n Figura 6.7.
42 LUCRAREA 6. ZGOMOTUL

IN IMAGINI
Rayleigh Maxwell
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
0.0
0.1
0.1
0.2
0.3
0.3
0.4
0.5
0.6
0.6
0.7
0.0
0.1
0.1
0.2
0.3
0.3
0.4
0.5
0.6
0.6
0.7
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
0.0
0.1
0.2
0.3
0.4
0.4
0.5
0.6
0.7
0.8
0.9
0.0
0.1
0.2
0.3
0.4
0.4
0.5
0.6
0.7
0.8
0.9
Beta Gamma
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
0.0
0.0
0.0
0.1
0.1
0.1
0.1
0.1
0.2
0.2
0.2
0.0
0.0
0.0
0.1
0.1
0.1
0.1
0.1
0.2
0.2
0.2
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
0.0
0.0
0.1
0.1
0.2
0.2
0.2
0.3
0.3
0.4
0.4
0.0
0.0
0.1
0.1
0.2
0.2
0.2
0.3
0.3
0.4
0.4
Laplace Cauchy
-6.0 -4.8 -3.6 -2.4 -1.2 0.0 1.2 2.4 3.6 4.8 6.0
-6.0 -4.8 -3.6 -2.4 -1.2 0.0 1.2 2.4 3.6 4.8 6.0
0.0
0.1
0.2
0.3
0.4
0.6
0.7
0.8
0.9
1.0
1.1
0.0
0.1
0.2
0.3
0.4
0.6
0.7
0.8
0.9
1.0
1.1
-10.0 -8.0 -6.0 -4.0 -2.0 0.0 2.0 4.0 6.0 8.0 10.0
-10.0 -8.0 -6.0 -4.0 -2.0 0.0 2.0 4.0 6.0 8.0 10.0
0.0
0.1
0.2
0.3
0.4
0.6
0.7
0.8
0.9
1.0
1.1
0.0
0.1
0.2
0.3
0.4
0.6
0.7
0.8
0.9
1.0
1.1
Figura 6.7: Diverse funct ii de distribut ie.
DESF

ASURAREA LUCR

ARII
Problema 1. Suprapunet i zgomot cu distribut ie uniform a peste o imagine
n tonuri de gri (n meniul Algoritmi, funct ia zgomot uniform).
6.4. ALTE TIPURI DE ZGOMOT 43
void ImageViewer :: zgomot_uniform( void )
{
int i, j;
int w = image.width();
int h = image.height();
long int e_zgomot = 0; //energia zgomotului
long int e_imagine = 0; //energia imaginii
double SNR; //raportul semnal-zgomot
//imaginea afectata de zgomot
QImage image_aff( w, h, 32, 0, QImage::IgnoreEndian );
int med = 0; //media zgomotului
int dis = 200; //dispersia zgomotului
for( i = 0; i < w; i++ )
for( j = 0; j < h; j++ )
{
QRgb pixel = image.pixel( i, j );
int nivel_gri = qRed( pixel );
e_imagine += nivel_gri * nivel_gri;
//srand( rand() );
int zgomot = ( int )( med + sqrt( 3 )*
(2. * ( rand()/( RAND_MAX + 1. )))*sqrt(dis) );
e_zgomot += zgomot * zgomot;
int val = nivel_gri + zgomot;
if( val > 255 )
val = 255;
if( val < 0 )
val = 0;
image_aff.setPixel( i, j, qRgb( val, val, val ));
}
SNR = 10 * log( 1. * e_imagine / e_zgomot );
image = image_aff;
pm = image;
44 LUCRAREA 6. ZGOMOTUL

IN IMAGINI
update();
QString mesaj;
mesaj.sprintf( "SNR = %6.3lf dB", SNR );
QMessageBox::about( this, "SNR", mesaj );
}
Problema 2. Modicat i media si dispersia zgomotului cu distribut ie
uniform a (n sierul algoritmi.cpp, funct ia genereaz a zgomot uniform).
Observat i efectele.
Problema 3. Suprapunet i zgomot cu distribut ie gaussian a peste o
imagine n tonuri de gri (n meniul Algoritmi, funct ia zgomot gaussian).
Diferent a ntre aceast a funct ie si cea care genereaz a const a n modul n care
este calculat a valoarea zgomotului, si anume:
int zgomot = ( int )( med + sqrt( 2 ) *
sqrt( -1.* log( rand()/( RAND_MAX + 1. ))) *
cos( 2 * 3.1415926 * ( rand()/( RAND_MAX+1 ))) *
sqrt( dis ) );
Problema 4. Modicat i media si dispersia zgomotului cu distribut ie
gaussian a (sierul algoritmi.cpp, funct ia genereaz a zgomot gaussian).
Observat i efectele.
Problema 5. Suprapunet i zgomot de tip sare si piper peste o imagine
n tonuri de gri (n meniul Algoritmi, funct ia zgomot salt and pepper).
Codul acesteia este prezentat n continuare:
void ImageViewer :: salt_and_pepper( void )
{
int i, j, k;
int w = image.width();
int h = image.height();
double nr = 0.1; //procentul de pixeli afectati de zgomot
srand( rand() );
k = 0;
while( k < ( int )( w * h * nr ) )
{
i = ( int )( 1. * w * rand() / ( RAND_MAX + 1. ) );
j = ( int )( 1. * h * rand() / ( RAND_MAX + 1. ) );
QRgb sare_piper;
6.4. ALTE TIPURI DE ZGOMOT 45
if( ( 100. * rand() / ( RAND_MAX + 1. ) ) >= 50 )
sare_piper = qRgb( 255, 255, 255 );
else
sare_piper = qRgb( 0, 0, 0 );
if( (i >= 0) && (i < w) && (j >= 0) && (j < h) )
image.setPixel( i, j, sare_piper );
k++;
}
pm = image;
update();
}
Problema 6. Modicat i procentul de pixeli afectat i de zgomot de tip
sare si piper (sierul algoritmi.cpp, funct ia zgomot salt and pepper).
Observat i efectele.
46 LUCRAREA 6. ZGOMOTUL

IN IMAGINI
Lucrarea 7
Filtrarea imaginilor
BREVIAR TEORETIC
Filtrarea imaginilor se nscrie n clasa operat iilor de mbun at at ire, princi-
palul scop al acesteia ind eliminarea zgomotului suprapus unei imagini.
Filtrarea reprezint a o operat ie de vecin atate. Prin aceasta se nt elege c a
la calculul noii valori a unui pixel vor contribui si valorile pixelilor vecini, nu
doar vechea lui valoare, cum se nt ampla la operat iile punctuale. Vecinii
unui pixel reprezint a o mult ime de pixeli, aat i n apropierea acestuia,
care alc atuiesc o vecin atate. Aceast a vecin atate poate avea diverse forme
si dimensiuni, ns a cele mai utilizate n practic a snt vecin at at ile de form a
p atrat a, de dimensiuni impare.
7.1 Filtrarea liniara a imaginilor
Dup a cumi spune numele, acest tip de ltrare respect a principiul liniarit at ii
(sau al superpozit iei).
Principiul liniarit at ii: Fiind date dou a imagini f
1
(x, y) si f
2
(x, y), si dou a
numere reale si , se numeste operator liniar, un operator O care are
urm atoarea proprietate:
O[ f
1
(x, y) + f
2
(x, y)] = O[f
1
(x, y)] + O[f
2
(x, y)] (7.1)
Operat ia de ltrare liniar a calculeaz a noua valoare a unui pixel al ima-
ginii, din pozit ia (m,n), ca o combinat ie liniar a a unui num ar de valori din
imaginea original a, astfel:
g(m, n) =

(k,l)

W
w
kl
f(mk, n l) (7.2)
unde f(x, y) este imaginea original a (afectat a sau nu, de zgomot), g(x, y)
este imaginea ltrat a, W este o structur a de puncte care deneste vecin atatea
47
48 LUCRAREA 7. FILTRAREA IMAGINILOR
pixelului (m, n), w
kl
snt niste valori constante care reprezint a coecient ii
ltrului.
Filtrul este denit de vecin atatea W si de coecient ii w
kl
. Un ltru poate
specicat de o matrice V , care poart a numele de masc a de convolut ie
sau masc a de ltrare, care este caracterizat a de form a, valorile coecient ilor
si de origine.

In Figura 7.1 este prezentat a o masc a de ltrare de form a
p atrat a, de dimensiune 3x3, av and originea n centru.
w
1,1
w
1,0
w
1,1
w
0,1
w
0,0
w
0,1
w
1,1
w
1,0
w
1,1
Figura 7.1: Masc a de ltrare p atrat a de dimensiune 3x3.
Nu este obligatoriu ca forma m astii de ltrare s a e p atrat a, de dimen-
siune impar a sau s a aib a originea n centrul m astii.
Operat ia de ltrare liniar a poate descris a astfel: se suprapune masca de
ltrare peste ecare pixel al imaginii originale, astfel nc at originea m astii
s a coincid a cu pixelul considerat, apoi se calculeaz a toate produsele ntre
coecient ii m astii si valorile pixelilor peste care se suprapun acesti coecient i,
iar suma acestor produse reprezint a noua valoare a pixelului considerat.
Aceast a tehnic a poart a numele de tehnica ferestrei glisante. Operat ia
descris a reprezint a de fapt o convolut ie bidimensional a.
7.1.1 Filtrele de netezire
Filtrele de netezire sunt echivalentele bidimensionale ale ltrelor trece-jos
(FTJ), si la fel ca acestea, snt folosite n general pentru eliminarea zgomo-
tului, care se presupune c a este de band a larg a.
Informat ia cont inut a ntr-o imagine, n general, se reg aseste n compo-
nentele de joas a frecvent a, si deci este justicat a o ltrare trece-jos pentru
reducerea puterii zgomotului.
Zgomotul din imagine se presupune c a este aditiv si pur aleator, adic a
se consider a urm atoarele ipoteze simplicatoare:
g(i, j) = f(i, j) +n(i, j) (zgomotul n este aditiv),
n este un semnal stat ionar (comportamentul s au statistic nu depinde
de coordonatele i si j ale pixelului),
7.1. FILTRAREA LINIAR

A A IMAGINILOR 49
n = 0 (media zgomotului este zero),
dac a zgomotul are dispersia
n
, atunci:
n(i
1
, j
1
) n(i
2
, j
2
) =
_

2
n
pentru i
1
= i
2
& j
1
= j
2
0 n rest
(zgomotul este complet decorelat).
Condit ia de normare a coecient ilor ltrelor de netezire
Pentru un ltru trece-jos se impune urm atoarea condit ie: componenta con-
tinu a a imaginii s a nu e alterat a de ltru. Cu alte cuvinte, ltrul s a conserve
luminozitatea medie a imaginii.
Pentru aceasta, consider am o imagine av and un singur nivel de gri, con-
stant, notat cu , adic a: f(i, j) = pentru oricare i si j. Pentru ca ltrul s a
conserve luminozitatea medie, adic a valoarea medie , impunem g(i, j) =
pentru i, j. Rezult a:
=

(k,l)

W
w
kl
(7.3)

(k,l)

W
w
kl
= 1 (7.4)
unde w
kl
0.
Relat ia (7.4) poart a numele de condit ie de normare pentru ltre de
netezire (sau trece-jos).
Filtrul de mediere
Filtrul de mediere este cel mai simplu ltru de netezire. Caracteristic unui
ltru de mediere este faptul c a tot i coecient ii m astii de ltare snt egali.
Dac a t inem cont si de condit ia de normare, atunci coecient ii unui ltru
de mediere, care are o masc a de ltrare de dimensiune N N, au valoarea
1
N
2
.

In Figurile 7.2, 7.3 si 7.4 sunt prezentate m astile de ltrare de mediere,
pentru N = 3, 5 si respectiv 7.
1
9
1
9
1
9
1
9
1
9
1
9
1
9
1
9
1
9
Figura 7.2: Masc a de ltrare p atrat a de dimensiune 3 3.
50 LUCRAREA 7. FILTRAREA IMAGINILOR
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
1
25
Figura 7.3: Masc a de ltrare p atrat a de dimensiune 5 5.
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
1
49
Figura 7.4: Masc a de ltrare p atrat a de dimensiune 7 7.
(a) (b)
Figura 7.5: Filtrarea de mediere: (a) imaginea original a; (b) imaginea l-
trat a cu o masc a 7x7.
Filtrul de mediere nu este folosit n practic a, deoarece, pe l ang a zgo-
mot, are de suferit si semnalul util (vezi Figura 7.5). Filtrarea de me-
diere este deranjant a pentru imagine n acele zone n care imaginea cont ine
frecvent e nalte (variat ii bruste), pentru c a duce la aparit ia fenomenului de
ncet osare
1
.
1
(engl.) blurring.
7.1. FILTRAREA LINIAR

A A IMAGINILOR 51
Din punctul de vedere al zgomotului, pentru ltrare este util a o masc a
de ltrare de dimensiune c at mai mare. Din punctul de vedere al semnalului
util, al imaginii, este util ca masca s a e c at mai mic a.

In practic a se
realizeaz a un compromis ntre cele dou a aspecte.
Alte m asti de ltrare
Alte m asti de ltrare, pentru lterele de mediere, sunt prezentate n contin-
uare, desi toate au acelasi randament nesatisf ac ator.
_
_
_
_
_
_
1
16
2
16
1
16
2
16
4
16
2
16
1
16
2
16
1
16
_
_
_
_
_
_
_
_
_
_
_
_
1
16
1
16
1
16
1
16
1
2
1
16
1
16
1
16
1
16
_
_
_
_
_
_
_
_
_
_
_
_
0
1
5
0
1
5
1
5
1
5
0
1
5
0
_
_
_
_
_
_
_
_
_
_
_
_
0
1
8
0
1
8
1
4
1
8
0
1
8
0
_
_
_
_
_
_
7.1.2 Filtrele trece-sus
Filtrele trece-sus urm aresc eliminarea componentelor de frecvent a joas a din
imagine. Sunt folosite n general pentru detectarea frontierelor sau contu-
rurilor din imagine, acolo unde au loc treceri sau variat ii bruste ale luminant ei.
Condit ia de normare a coecient ilor ltrelor trece-sus
Condit ia de normare a coecient ilor pentru un ltru trece-jos (relat ia (7.6))
se determin a impun and condit ia ca ltrul s a rejecteze complet (sau s a atenueze
complet) componenta continu a a imaginii.
Pentru aceasta vom considera, la fel, o imagine f(i, j) = pentru i, j.
La iesirea ltrului trece-sus vom avea g(i, j) = 0 pentru i, j.
0 =

(k,l)

W
w
kl
(7.5)

(k,l)

W
w
kl
= 0 (7.6)
Filtrul de accentuare
Filtrul de accentuare nu este un ltru trece-sus, ci foloseste ltrarea trece-
sus pentru a realiza accentuarea. Prin accentuare se nt elege contrastarea
unei imagini si are ca scop mbun at at irea perceperii vizuale a contururilor
obiectelor. Cu alte cuvinte, mbun at at irea detectabilit at ii componentelor
scenei de-a lungul frontierelor acestora. Acest lucru se realizeaz a, n prin-
cipiu, prin modicarea valorilor pixelilor situat i de o parte si de alta a unei
frontiere comune.
52 LUCRAREA 7. FILTRAREA IMAGINILOR
Sistemul uman are tendint a de a ad anci prolul zonelor de tranzit ie
dintre regiuni uniforme. Studiul ziologiei sistemului vizual a demonstrat
c a aceasta se realizeaz a prin prelucr ari de tip derivativ ce apar n diferitele
etape pe care le parcurge informat ia vizual a. Efectul global poate mo-
delat matematic prin sc aderea din semnalul original a unei derivate secunde
ponderate.

In continuare sunt prezentate c ateva m asti de implementare a unei derivate


secunde de tip Laplace:
_
_
_
_
_
_
0
1
4
0

1
4
1
1
4
0
1
4
0
_
_
_
_
_
_
_
_
_
_
_
_
1
4

1
2
1
4

1
2
1
1
2
1
4

1
2
1
4
_
_
_
_
_
_
_
_
_
_
_
_

1
8

1
8

1
8

1
8
1
1
8

1
8

1
8

1
8
_
_
_
_
_
_

In Figura 7.6 putet i observa efectele ltr arii Laplace.


(a) (b)
Figura 7.6: Filtrarea Laplace: (a) imaginea original a; (b) imaginea rezultat a
(negativat a).
Filtrul de accentuare se implementeaz a dup a schema prezentat an Figura
7.7.
7.2 Filtrarea neliniara a imaginilor
Filtrele neliniare nu respect a principiul liniarit at ii sau al superpozit iei enun-
t at la nceputul lucr arii. Acestea au ap arut din necesitatea de a dep asi
limit arile ltrelor liniare, n ceea ce priveste zgomotele care nu au o distribut ie
normal a sau nu sunt aditive.
7.2. FILTRAREA NELINIAR

A A IMAGINILOR 53
f(i,j) g(i,j)
+
+
K
LAPLACIAN
Figura 7.7: Filtrul de accentuare.
7.2.1 Filtrele de ordine
Filtrele de ordine sunt operatori locali, denit i la r andul lor de o fereastr a,
care selecteaz a din imagine un num ar de pixeli vecini pixelului curent, ntr-
un mod identic cu tehnica ferestrei glisante. Valorile pixelilor selectat i se
ordoneaz a cresc ator.
S a presupunem c a fereastra cont ine n pixeli, iar valorile lor formeaz a
urm atoarea mult ime:
{x
1
, x
2
, ..., x
n
} (7.7)
Dup a ce aceste valori au fost ordonate cresc ator, vom avea:
{x
(1)
, x
(2)
, ..., x
(n)
} (7.8)
pentru care sunt ndeplinite urm atoarele condit ii:
x
(1)
x
(2)
... x
(n)
(7.9)
Iesirea ltrului de ordine de ordin k, pentru k [1; n] ntreg, este sta-
tistica de ordinul k, cu alte cuvinte, elementul de pe pozit ia k din sirul
ordonat:
rank
k
{x
1
, x
2
, ..., x
n
} = x
(k)
(7.10)
Filtrul median
Filtrul median ete un ltru de ordine a c arui iesire este statistica de ordin
central, adic a elementul ce se a a pe pozit ia de mijloc a sirului ordonat de
valori selectate de fereastra de ltrare:
median{x
1
, x
2
, ..., x
n
} =
_
x
(
n+1
2
)
dac a n este impar,
1
2
x
(
n
2
)
+
1
2
x
(
n
2
+1)
dac a n este par.
(7.11)
54 LUCRAREA 7. FILTRAREA IMAGINILOR
Filtrul median este potrivit pentru eliminarea zgomotului de tip sare
si piper. Dup a ordonarea valorilor pixelilor, valorile zgomotului (adic a 0
sau 255) se vor situa pe primele, respectiv ultimele pozit ii n mult ime, si
deci, la iesirea ltrului, vom avea o valoare diferit a de valorile zgomotului.
Totusi exist a si situat ii n care, dup a ltrare, mai exist a pixeli afectat i de
zgomot.

In acest caz, spunem c a ltrul a fost str apuns de zgomot. Acest
lucru este posibil atunci c and mai mult de jum atate din pixelii selectatt i de
fereastra de ltrare, sunt afectat i n acelasi mod (sare sau piper, 255 sau 0)
de zgomot.
(a) (b)
Figura 7.8: Filtrul median: (a) imaginea original a afectat a de zgomot sare
si piper; (b) imaginea ltrat a.
Filtrul de minim
Filtrul de minim este un ltru de ordine a c arui iesire este statistica de
ordinul 1, adic a valoarea x
(1)
, care este cea mai mic a valoare din mult imea
de valori ale pixelilor selectat i de c atre fereastra de ltrare.
Filtrul de maxim
Filtrul de maxim este un ltru de ordine a c arui iesire este statistica de
ordinul n, adic a valoarea x
(n)
, care este cea mai mare valoare din mult imea
de valori luate n considerate.
DESF

ASURAREA LUCR

ARII
Problema 1. Observat i efectele ltrului de mediere pentru o imagine afec-
tat a de zgomot gaussian. Codul C al funct iei care implementeaz a ltrul de
7.2. FILTRAREA NELINIAR

A A IMAGINILOR 55
mediere este prezentat n continuare:
void ImageViewer :: filtru_mediere( void )
{
int i, j;
int k, l;
int w, h;
double v[ 3 ][ 3 ];
//coeficientii mastii de filtrare
v[0][0] = 1./9; v[0][1] = 1./9; v[0][2] = 1./9;
v[1][0] = 1./9; v[1][1] = 1./9; v[1][2] = 1./9;
v[2][0] = 1./9; v[2][1] = 1./9; v[2][2] = 1./9;
w = image.width();
h = image.height();
QImage image_fil( w, h, 32, 0, QImage::IgnoreEndian );
for( i = 1; i < w - 1; i++ )
for( j = 1; j < h - 1; j++ )
{
//suma ponderata
double sum = 0;
for( k = -1; k < 2; k++ )
for( l = -1; l < 2; l++ )
sum += v[ k + 1 ][ l + 1 ] *
qRed( image.pixel( i + k, j + l ));
image_fil.setPixel( i, j,
qRgb( (int)sum, (int)sum, (int)sum ));
}
image = image_fil;
pm = image;
update();
}
Problema 2. Observat i efectele ltrului de mediere pentru o imagine
afectat a de zgomot de tip sare si piper.
Problema 3. Observat i efectul de blurring al ltrului de mediere
pentru o imagine neafectat a de zgomot.
56 LUCRAREA 7. FILTRAREA IMAGINILOR
Problema 4. Implementat i un ltru de mediere cu o masc a de ltrare
de form a p atrat a de dimensiune 5x5.
Problema 5. Observat i efectul ltrului de accentuare (pentru o imagine
neafactat a de zgomot). Codul C al ltrului este urm atorul:
void ImageViewer :: filtru_accentuare( void )
{
int i, j;
int k, l;
int w, h;
double sum;
double v[ 3 ][ 3 ];
//coeficientii mastii
v[0][0] = 0; v[0][1] = -1./4; v[0][2] = 0;
v[1][0] = -1./4; v[1][1] = 1; v[1][2] = -1./4;
v[2][0] = 0; v[2][1] = -1./4; v[2][2] = 0;
w = image.width();
h = image.height();
QImage image_fil( w, h, 32, 0, QImage::IgnoreEndian );
for( i = 1; i < w - 1; i++ )
for( j = 1; j < h - 1; j++ )
{
sum = 0;
for( k = -1; k < 2; k++ )
for( l = -1; l < 2; l++ )
sum += 1. * v[ k + 1 ][ l + 1 ] *
qRed( image.pixel( i + k, j + l ));
int niv = qRed( image.pixel( i, j ));
niv = (int)( niv + 0.6 * sum );
image_fil.setPixel( i, j, qRgb( niv, niv, niv ));
}
image = image_fil;
pm = image;
update();
}
7.2. FILTRAREA NELINIAR

A A IMAGINILOR 57
Problema 6. Observat i efectele ltrului median pentru o imagine afec-
tat a de zgomot de tip sare si piper. Citit i si nt eleget i implementarea n
C:
void ImageViewer :: filtru_median( void )
{
int i, j;
int w, h;
int k, aux;
int m, n;
int med;
int sir[ 9 ];
w = image.width();
h = image.height();
QImage image_fil( w, h, 32, 0, QImage::IgnoreEndian );
for( i = 1; i < w-1; i++ )
for( j = 1; j < h-1; j++ )
{
//formarea unui sir din elementele vecinatatii 3x3
k = 0;
for( m = -1; m < 2; m++ )
for( n = -1; n < 2; n++ )
{
sir[k] = qRed( image.pixel( i+m, j+n ) );
k++;
}
//ordonarea crescatoare a valorilor pixelilor
//metoda BUBBLE SORT
k = 0;
while( k == 0 )
{
k = 1;
for( m = 0; m < 8; m++ )
if( sir[ m ] > sir[ m + 1 ] )
{
aux = sir[ m ];
sir[ m ] = sir[ m + 1 ];
sir[ m + 1 ] = aux;
k = 0;
}
58 LUCRAREA 7. FILTRAREA IMAGINILOR
}
//elementul median
med = sir[ 4 ];
//noua valoare a pixelului
image_fil.setPixel( i, j, qRgb( med, med, med ) );
}
image = image_fil;
pm = image;
update();
}
Problema 7. Implementat i ltrul de minim. Observat i efectele lui
asupra unei imagini neafectate de zgomot.
Problema 8. Implementat i ltrul de maxim. Observat i efectele lui
asupra unei imagini neafectate de zgomot.
Lucrarea 8
Transformari unitare
BREVIAR TEORETIC
Transform arile reprezint a o categorie de prelucr ari ce include operat ii de tip
integral, la calculul noii valori a unui pixel al imaginii transformate con-
tribuind valorile tuturor pixelilor din imaginea original a.
Termenul de transformare se refer a la o clas a de matrici unitare folosite
pentru a reprezenta imagini. O matrice A de dimensiune NN este unitar a
dac a inversa ei este matricea A
T
:
A A
1
= A A
T
= A
T
A = I
N
(8.1)
unde

reprezint a operat ia de complementare n mult imea numerelor
complexe,
T
reprezint a operat ia de transpunere a unei matrici, iar I
N
este
matricea identitate de dimensiune N N:
I
N
=
_
_
_
_
_
_
_
_
1 0 0 ... 0
0 1 0 ... 0
0 0 1 ... 0
. . . ... .
. . . ... .
0 0 0 ... 1
_
_
_
_
_
_
_
_
(8.2)
Pentru un vector uni-dimensional u de dimensiune N, de forma:
u =
_

_
u(0)
u(1)
.
.
.
u(N 1)
_

_
= [u(0), u(1), ..., u(N 1)]
T
(8.3)
se numeste transformare unitar a direct a relat ia:
59
60 LUCRAREA 8. TRANSFORM

ARI UNITARE
v(k) =
N1

n=0
a(k, n) u(n), 0 k N 1 (8.4)
unde v(k) reprezint a elementele vectorului transformat v, iar a(k, n) snt
elementele matricii A. Matricial aceast a relat ie se poate scrie astfel:
v = A u (8.5)
Transormarea unitar a invers a este dat a de relat ia:
u(n) =
N1

k=0
v(k) a

(k, n), 0 n N 1 (8.6)


care se scrie matricial astfel:
u = A
T
v (8.7)
Valorile vectorului v sunt o reprezentare a vectorului init ial u, ntr-un alt
spat iu. O astfel de reprezentare este util a n ltrare, compresie, extragere
de tr as aturi sau alte tipuri de analiz a a imaginilor.
8.1 Transformari unitare bidimensionale
Pentru o imagine u(m, n), de dimensiune N N, transformarea direct a are
urm atoarea form a:
v(k, l) =
N1

m=0
N1

n=0
u(m, n) a
k,l
(m, n), 0 k, l N 1 (8.8)
iar transformarea invers a:
u(m, n) =
N1

k=0
N1

k=0
v(k, l) a

k,l
(m, n), 0 m, n N 1 (8.9)
unde coecient ii {a
k,l
(m, n)} poart a numele de transformare unitar a
bidimensional a, si reprezint a un set de matrici de baz a ortonormale, iar
v(k, l) reprezint a transformata imaginii u(m, n).
Aceste matrici de baz a respect a condit ia de ortonormalitate:
N1

m=0
N1

n=0
a
k,l
(m, n) a

,l
(m, n) = (k k

, l l

) =
_
1, k = k

& l = l

,
0, n rest.
(8.10)
pentru k, l.
8.1. TRANSFORM

ARI UNITARE BIDIMENSIONALE 61


O transformare ca cea dat a de relat ia (8.8) este caracterizat a de N
4
coecient i a
k,l
(m, n). Pentru calculul unui singur element v(k, l) (k si l
xat i) este nevoie de un num ar de N
2
nmult iri. Prin urmare complexitatea
ntregului calcul este O(N
4
). Complexitatea poate redus a la O(N
3
) dac a
transformarea este separabil a.
O transformare este separabil a, dac a elementele a
k,l
(m, n) ce o denesc,
pot scrise ca produs de alte dou a elemente, grupate dup a perechi de indici,
astfel:
a
k,l
(m, n) = a
k
(m) b
l
(n) = a(k, m) b(l, n) (8.11)
unde, matricile A = {a(k, m)} si B = {b(l, n)} trebuie s a e la r andul
lor unitare, adic a:
A A
T
= A
T
A = I
N
(8.12)
B B
T
= B
T
B = I
N
(8.13)
Dac a transformarea este separabil a, atunci relat iile (8.8) si (8.9) devin:
v(k, l) =
N1

m=0
N1

n=0
a(k, m) u(m, n) b(l, n) (8.14)
u(m, n) =
N1

k=0
N1

k=0
a

(k, m) v(k, l) b

(l, n) (8.15)
care pot scrise matricial astfel:
V = A U B
T
(8.16)
U = A
T
V B

(8.17)
unde U = {u(m, n)} reprezint a imaginea original a, iar V = {v(k, l)}
reprezint a imaginea transformat a.

In practic a se folosesc numai transform ari separabile, pentru care, n


plus, se alege B = A.

In acest caz, vom avea o singur a matrice A, unitar a,
care deneste transfomarea, iar relat iile (8.14) si (8.15) devin:
v(k, l) =
N1

m=0
N1

n=0
a(k, m) u(m, n) a(l, n) (8.18)
u(m, n) =
N1

k=0
N1

k=0
a

(k, m) v(k, l) a

(l, n) (8.19)
Matricial, relat iile (8.16) si (8.17) se scriu dup a cum urmeaz a:
62 LUCRAREA 8. TRANSFORM

ARI UNITARE
V = A U A
T
(8.20)
U = A
T
V A

(8.21)
8.1.1 Proprietat ile transformarilor unitare

In continuare vor prezentate c ateva din propriet at ile transform arilor unitare.
O transformare unitar a conserv a energia semnalului. Aceast a propri-
etate o vom demonstra pentru cazul unei transform ari unitare uni-
dimensionale, pentru simplitate, desi este perfect valabil a si n cazul
unei transform ari bidimensionale. Fie u un semnal discret uni-dimensi-
onal, format din N esantioane, si o transformare unitar a dat a de ma-
tricea A. Relat iile de transformare vor :
v = A u
u = A
T
v
Energia semnalului u este dat a de norma la p atrat a spat iului n care
este reprezentat semnalul:
E
v
= v
2
= v
T
v = (Au)
T
Au = u
T
A
T
Au = u
T
u = u
2
= E
u
(8.22)

In general transformarea se alege astfel nc at energia s a e inegal dis-


tribuit a n spat iul transformatei, chiar dac a ea era uniform distribuit a
n spat iul original.
Entropia unui semnal discret cu valori aleatoare se conserv a printr-
o transformare unitar a. Dar entropia este o m asur a a cantit at ii de
informat ie, ceea censeamn a c a o transformare unitar a p astreaz a infor-
mat ia cont inut a n semnal.
Coecient ii n spat iul transformatei sunt decorelat i sau aproape decore-
lat i. Transformata optim a care compacteaz a maximum de energientr-
un num ar dat de coecient i si care n acelasi timp decoreleaz a complet
acesti coecient i, este transformarea Karhunen-Lo`eve.
8.2 Transformata Fourier discreta
8.2.1 Transformata Fourier unidimensionala
Pentru un semnal unidimensional, u, de dimensiune N, de forma:
8.2. TRANSFORMATA FOURIER DISCRET

A 63
u = [u(0), u(1), ..., u(N 1)]
T
(8.23)
transformarea Fourier direct a este dat a de relat ia:
v(k) =
N1

n=0
u(n) e

2jkn
N
k = 0..N 1 (8.24)
iar transformarea Fourieri invers a de relat ia:
u(n) =
1
N
N1

k=0
v(k) e
2jkn
N
n = 0..N 1 (8.25)
Astfel denit a, transformarea Fourier nu este unitar a. Urm atoarele
relat ii denesc transformarea Fourier unitar a, direct a si invers a:
v(k) =
1

N
N1

n=0
u(n) e

2jkn
N
k = 0..N 1 (8.26)
u(n) =
1

N
N1

k=0
v(k) e
2jkn
N
n = 0..N 1 (8.27)
Dac a denim matricea F = {f(k, n)} a transform arii, av and elementele:
f(k, n) =
1

N
e

2jkn
N
k, n = 0..N 1 (8.28)
atunci transformarea Fourier se poate scrie matricial astfel:
v = F u (8.29)
u = F

v (8.30)
cu observat ia c a matricea F are urm atoarea proprietate: F = F
T
.
Pentru calculul transformatei Fourier discrete, exist a algoritmi rapizi
(FFT
1
) care reduc complezitatea calculelor de la O(N
2
) la O(NlogN).
8.2.2 Transformarea Fourier bidimensionala
Pentru o imagine U = {u(m, n)}
m,n=0..N1
, de dimensiune NN, imaginea
transformat a V = {v(k, l)}
k,l=0..N1
se calculeaz a cu relat ia urm atoare, ce
reprezint a transformarea Fourier n ipoteza separabilit at ii:
v(k, l) =
1
N
N1

m=0
N1

n=0
u(m, m) e

2j(km+ln)
N
(8.31)
1
Fast Fourier Transform
64 LUCRAREA 8. TRANSFORM

ARI UNITARE
iar transformarea Fourier invers a este dat a de formula:
u(m, n) =
1
N
N1

k=0
N1

l=0
v(k, l) e
2j(km+ln)
N
(8.32)
Dac a folosim matricea F denit a cu relat ia (8.28), atunci matricial se
poate scrie:
V = F U F (8.33)
U = F

V F

(8.34)
8.3 Transformata cosinus discreta
Transformata cosinus este o transformat a unitar a separabil a, denit a de
matricea C = {c(k, n)}, ale c arei elemente sunt date de relat ia:
c(k, n) =
_
1

N
, k = 0, 0 n N 1
_
2
N
cos
(2n+1)k
2N
, 1 k N 1, 0 n N 1
(8.35)
Transformata cosinus, direct a si invers a, pentru un semnal unidimen-
sional, este dat a de relat iile:
v(k) = (k)
N1

n=0
u(n)cos
(2n + 1)k
2N
, 0 k N 1 (8.36)
u(n) =
N1

n=0
(k)v(k)cos
(2n + 1)k
2N
, 0 n N 1 (8.37)
unde
(0) =
_
1
N
, (k) =
_
2
N
, 1 k N 1 (8.38)
Transformarea cosinus bidimensional a, direct a si invers a, este dat a de
urm atoarele dou a relat ii, scrise matricial:
V = C U C
T
(8.39)
U = C
T
U C (8.40)
deoarece matricea C are proprietatea c a C = C

, elementele sale ind


numere reale.
Observat ie: transformarea cosinus nu este partea real a a transform arii
Fourier.
8.4. TRANSFORMATA SINUS DISCRET

A 65
8.4 Transformata sinus discreta
Transformata sinus este o transformat a unitar a separabil a, denit a de ma-
tricea S = {s(k, n)}, ale c arei elemente sunt date de relat ia:
s(k, n) =
_
2
N + 1
sin
(k + 1)(n + 1)
N + 1
, 0 k, n N 1 (8.41)
Relat iile ce denesc transformarea sinus unidimensional a, direct a si in-
vers a, sunt urm atoarele:
v(k) =
_
2
N + 1
N1

n=0
u(n)sin
(k + 1)(n + 1)
N + 1
, 0 k N 1 (8.42)
u(n) =
_
2
N + 1
N1

k=0
v(k)sin
(k + 1)(n + 1)
N + 1
, 0 n N 1 (8.43)
Transformarea sinus bidimensional a, direct a si invers a, se scrie matricial
astfel:
V = S U S (8.44)
U = S V S (8.45)
deoarece matricea S are proprietatea c a S = S

= S
T
= S
1
.
Observat ie: Transformarea sinus nu este partea imaginar a a transform arii
Fourier.
DESF

ASURAREA LUCR

ARII
Problema 1. Pentru o imagine de dimensiune N N, adic a p atrat a,
observat i imaginea transformat a obt inut a cu ajutorul transformatei cosi-
nus bidimensional a (funct ia transformata cosinus discreta din meniul
Algoritmi). Codul acestei funct ii este prezentat n continuare:
void ImageViewer :: transformata_cosinus_discreta( void )
{
int w, h;
int i, j, k;
double pi = 3.1415926;
w = image.width();
66 LUCRAREA 8. TRANSFORM

ARI UNITARE
h = image.height();
if( w == h )
{
int N = w;
double max = 0;
double C[ N ][ N ];
//matricea transformarii cosinus
int U[ N ][ N ];
//matricea imaginii in spatiul original
double V[ N ][ N ];
//matricea imaginii in spatiul transformatei
double AUX[ N ][ N ];
//formarea matricei C a transformarii cosinus discreta
for( i = 0; i < N; i++ )
C[ 0 ][ i ] = 1. / sqrt( N );
for( i = 1; i < N; i++ )
for( j = 0; j < N; j++ )
{
C[ i ][ j ] = sqrt( 2./N ) *
cos( pi * ( 2*j + 1 ) * i / ( 2*N ) );
if( C[ i ][ j ] > max )
max = C[ i ][ j ];
}
//formarea matricei U
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
U[ i ][ j ] = qRed( image.pixel( i, j ));
//V = C*U*Ct
//mai intii vom calcula AUX = C * U
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
AUX[ i ][ j ] = 0;
for( k = 0; k < N; k++ )
AUX[ i ][ j ] += C[ i ][ k ] * U[ k ][ j ];
8.4. TRANSFORMATA SINUS DISCRET

A 67
}
//apoi V = AUX * Ct
max = 0;
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
V[ i ][ j ] = 0;
for( k = 0; k < N; k++ )
V[ i ][ j ] += AUX[ i ][ k ] * C[ j ][ k ];
if( V[ i ][ j ] > max )
max = V[ i ][ j ];
}
QImage transf( N, N, 32, 0, QImage::IgnoreEndian );
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
int niv = (int)( V[ i ][ j ] * 255 / max );
transf.setPixel( i, j, qRgb( niv, niv, niv ) );
}
image = transf;
pm = image;
update();
}
Problema 2. Implementat i transformarea sinus bidimensional a.
Problema 3. Implementat i transformarea Fourier bidimensional a (nu-
mai partea real a, care reprezint a spectrul de frecvent e spat iale al imaginii).
Problema 4. Vericat i proprietatea de conservare a energiei pentru una
din transform ari.
68 LUCRAREA 8. TRANSFORM

ARI UNITARE
Lucrarea 9
Compresia imaginilor
BREVIAR TEORETIC
Termenul de compresie se refer a la totalitatea metodelor ce au drept scop re-
ducerea cantit at ii de date necesare pentru reprezentarea unei imagini. Com-
presia este folosit a n special pentru stocarea sau transmiterea imaginilor.
S a consider am cazul unei imagini de dimensiune 512 512 pixeli. Dac a
aceasta este o imagine n tonuri de gri, iar ecare pixel este codat cu 8 bit i,
atunci cantitatea de date necesar a pentru a reprezenta aceast a imagine este:
512 512 8 = 2
9
2
9
2
3
= 2
21
2 Mb
Din acest calcul ne putem da seama c a pentru a stoca o imagine avem
nevoie de spat iu considerabil, iar pentru transmiterea ei avem nevoie de un
canal de transmisiune de band a larg a, de care nu dispunemntotdeauna.
9.1 Clasicarea metodelor de compresie
Metodele de compresie se pot clasica astftel:
Metode de compresie la nivel de pixel
Aceste metode nu t in cont de corelat ia care exist a ntre pixelii vecini,
cod and ecare pixel ca atare. Acest tip de compresie este f ar a pierdere
de informat ie, adic a imaginea init ial a poate ref acut a perfect din
imaginea comprimat a. Exemple de astfel de metode:
codarea Human
codarea LZW (Lempel-Ziv-Walsh)
codarea RLE (Run Length Encoding)
Metode de compresie predictive
Aceste metode realizeaz a compresia folosind corelat ia care exist a ntre
pixelii vecini, dintr-o imagine. Exemple de astfel de metode:
69
70 LUCRAREA 9. COMPRESIA IMAGINILOR
codarea cu modulat ie delta
codarea DPCM (Dierential Pulse Code Modulation)
Metode de compresie cu transformate
Aceste metode se bazeaz a pe scrierea imaginii ntr-o alt a baz a, prin
aplicarea unei transform ari unitare, atfel nc at energia imaginii s a e
concentrat a ntr-un num ar c at mai mic de coecient i.
Alte metode de compresie
cuantizarea vectorial a
codarea folosind fractali
codarea hibrid a
9.2 Algoritmul Human
S a presupunem c a valorile pixelilor unei imagini sunt simboluri ale unei surse
S:
[S] = {S
1
, S
2
, ..., S
N
} (9.1)
pentru care se cunosc probabilit at ile de aparit ie:
[P] = {p
1
, p
2
, ..., p
N
} (9.2)
P(S
1
) = p
1
P(S
2
) = p
2
P(S
N
) = p
N
(9.3)
Aceste probabilit at i nu reprezint a altceva dec at frecvet ele relative de
aparit ie ale simbolurilor ntr-un sir de simboluri emise de sursa S.
Entropia sursei S care genereaz a simbolurile se calculeaz a cu formula:
H(S) =
N

i=1
p
i
logp
i
(9.4)
Ne propunem s a cod am simbolurile sursei S cu simboluri ale unei alte
surse (de exemplu o surs a care genereaz a doar dou a simboluri: 0 si 1), astfel
nc at entropia noii surse s a e maximizat a.

In continuare este prezentat a o metod a care maximizeaz a aceast a en-


tropie, metod a elaborat a de Human n 1952:
Pasul 1. Se ordoneaz a descresc ator probabilit at ile p
i
.
Pasul 2. Se formeaz a un arbore binar, av and ca frunze valorile celor
mai mici probabilit at i din sirul de probabilit at i. R ad acina acestui arbore
va cont ine suma probabilit at ilor celor dou a frunze ale sale. Se eticheteaz a
muchia st ang a cu 1 si muchia dreapt a cu 0.
9.2. ALGORITMUL HUFFMAN 71
Pasul 3. Din sirul P se elimin a cele dou a probabilit at i care au fost alese
ca ind cele mai mici.

In sirul P se introduce valoarea cont inut a de r ad acina
arborelui binar format.
Pasul 4. Dac a n sirul P exist a mai mult de un element, atunci se reia
algoritmul, de la Pasul 1.
Pasul 5. Codarea binar a a ec arui element se obt ine prin parcurgerea
arborelui ce s-a format, de la r ad acin a spre ecare frunz a.
Ecient a codic arii Human este dat a de lungimea medie l a cuvintelor
de cod, care se calculeaz a folosind formula:
l =
N

i=1
l
i
p
i
(9.5)
unde l
i
este lungimea codului alocat simbolului S
i
.
Exemplu:
Fie o surs a S care genereaz a 4 simboluri, [S] = {a, b, c, d}, care au urm atoarele
probabilit at i de aparit ie: [P] = {0.2; 0.4; 0.1; 0.3}. Arborele cod arii Human
se construieste conform etapelor prezentate n Figurile 9.1, 9.2, 9.3 si 9.4.
0,4 0,3 0,2 0,1
Figura 9.1: Algoritmul Human: etapa 1.
0,4 0,3
0,2 0,1
0,3
1 0
Figura 9.2: Algoritmul Human: etapa 2.
72 LUCRAREA 9. COMPRESIA IMAGINILOR
0,6
0,3 0,3
0,1 0,2
0,4
0 1
0 1
Figura 9.3: Algoritmul Human: etapa 3.
0,6
0,3 0,3
0,1 0,2
0 1
0 1
0,4
1
1 0
Figura 9.4: Algoritmul Human: etapa 4.
Pentru decompresie este necesar a o tabel a n care s a se memoreze cores-
pondent ele ntre simboluri si cuvintele de cod. F ar a aceasta decompresia
este imposibil de realizat.
Simbol Cuv ant de cod
a 010
b 1
c 011
d 00
Lungimea medie a cuvintelor de cod, pentru acest exemplu, este:
l =
4

i=1
p
i
l
i
= 0, 2 3 + 0, 4 1 + 0, 1 3 + 0, 3 2 = 1, 9 bits/simbol
Dac a nu am codat simbolurile, n vederea maximiz arii entropiei sursei,
ar fost nevoie de 2 bit i/simbol pentru codare.
9.3. ALGORITMUL RLE 73
Pentru imagini, probabilit at ile de aparit ie ale nivelelor de gri se obt in
prin calcularea histogramei imaginii. Dac a histograma este uniform a, atunci
algoritmul Human de codare nu este ecient, nerealiz and nici ombun at at ire
a lungimii cuvintelor de cod.
9.3 Algoritmul RLE
9.3.1 Algoritmul RLE pentru imagini binare
Vom considera valorile pixelilor (0 sau 255) ca ind simbolurile 0 si 1 generate
de o surs a binar a.

In vederea cod arii imaginea este transformat a ntr-un sir
unidimensional, prin concatenarea liniilor sau a coloanelor, ca n Figura 9.5.
L1
L2
Ln
L1 Ln
Figura 9.5: Transformarea imaginii ntr-un sir unidimensional, prin con-
catenarea liniilor.
Acest sir de elemente 0 si 1 va codat, codarea realiz andu-se astfel:
primul element al sirului codat este primul element din sirul de codat; apoi
se scrie n sirul codat lungimea ec arui subsir constant din sirul de codat.
Exemplu:
sirul de codat: 00000001111100011000000000101000111111111111
sirul codat: 0 7 5 3 2 9 1 1 1 3 12
Acest tip de codare se foloseste n special pentru comprimarea imaginilor
transmise prin fax.
Decompresia se face similar cu compresia, parcurg and sirul codat si
gener and siruri alternate, de simboluri 0 sau 1, ncep and cu primul ele-
ment din sirul codat, si de lungimi indicate de valorile nt alnite n sirul de
decodat.
9.3.2 Algoritmul RLE pentru imagini n tonuri de gri
Pentru imagini n tonuri de gri, algoritmul RLE se aplic a pentru plane for-
mate din bit ii de pe aceeasi pozit ie, din reprezentarea binar a a valorilor
pixelilor. De exemplu, dac a imaginea n tonuri de gri, are 256 de nivele de
gri, corespunz ator la o cuantizare pe 8 bit i, atunci din aceast a imagine se
74 LUCRAREA 9. COMPRESIA IMAGINILOR
construiesc 8 plane (sau 8 imagini binare) astfel: o imagine binar a format a
din bit ii b
0
, o alt a imagine binar a din bit ii b
1
, s.a.m.d. (vezi Figura 9.6).
Figura 9.6: Transformarea unei imagini cu 256 nivele de gri, n 8 imagini
binare.
Valoarea pixelului (i, j) din imaginea n tonuri de gri va reprezentat a
pe 8 bit i astfel:
val(i, j) = [b
0
b
1
b
2
b
3
b
4
b
5
b
6
b
7
]
unde b
0
este cel mai semnicativ bit (MSB
1
), iar b
7
este cel mai put in
semnicativ bit (LSB
2
).
Imaginea binar a format a din bit ii cei mai semnicativi va comprimat a
cel mai bine cu algoritmul RLE. Imaginea binar a format a din bit ii cei mai
put in semnicativi va o imagine cu purici, pentru care se poate lua
decizia de a nu mai codat a si deci ignorat a.
9.4 Compresia cu transformate
Compresia cu ajutorul transformatelor se bazeaz a pe proprietatea acestora
de a compacta energia imaginii ntr-un num ar redus de coecient i, c at mai
decorelat i, repartizat i neuniform n spat iul transform arii.
Formula care deneste o transformarea direct a este urm atoarea:
V = A U A
T
(9.6)
unde A este matricea ce deneste o transformare unitar a, separabil a.
Pentru compresia imaginilor, transformarea cea mai apropiat a din punct
de vedere al performant elor de transformarea optim a Karhunen-Loeve, este
transformarea cosinus. Coecient ii de energie mare sunt situat i n colt ul
1
Most Signicant Bit.
2
Least Signicant Bit.
9.4. COMPRESIA CU TRANSFORMATE 75
Figura 9.7: Transformarea direct a.
din st anga-sus al imaginii transformate, n cazul n care se foloseste pentru
compresie transformarea cosinus (vezi Figura 9.7).
Figura 9.8: Anularea coecient ilor de energie mic a.
Pentru a obt ine o rat a de compresie mai mare, vor anulat i coecient ii
de energie mic a (vezi Figura 9.8). Anularea acestor coecient i va duce, ns a,
la sc aderea calit at ii imaginii dup a decompresie. Adic a, prin transformare
invers a (vezi Figura 9.9), imaginea obt inut a din imaginea

V , nu va exact
imaginea original a U.
Figura 9.9: Transformarea invers a.

U = A
T


V A

(9.7)
76 LUCRAREA 9. COMPRESIA IMAGINILOR
Compresia cu transformarea cosinus st a la baza algoritmului JPEG
3
de
compresie a imaginilor.
DESF

ASURAREA LUCR

ARII
Problema 1. Implementat i n C unul dintre algoritmii prezentat i (Hu-
man sau RLE). Pentru simplitate, imaginea citit a n format BMP, va
scris a ntr-un format simplicat (vezi funct ia write naked image, din me-
niul Algortimi). Imaginea comprimat a va scris a ntr-un sier cu exensia
.huf sau .rle.
void ImageViewer :: write_naked_image( void )
{
int i, j;
int w, h;
FILE *file;
w = image.width();
h = image.height();
file = fopen( "naked.img", "w" );
if( file != NULL )
{
for( i = 0; i < w; i++ )
{
for( j = 0; j < h; j++ )
{
int niv = qRed( image.pixel( i, j ) );
//nivelul de gri al pixelului
fprintf( file, "%3d ", niv );
}
fprintf( file, "\n" );
}
fclose( file );
}
}
Problema 2. Calculat i raportul de compresie obt inut, ca raport dintre
dimensiunile celor dou a siere: cel original (naked.img) n formatul simpli-
cat si cel comprimat.
3
Joint Photographic Experts Group.
9.4. COMPRESIA CU TRANSFORMATE 77
Problema 3. Observat i efectul suprim arii coecient ilor de energie joas a,
la o compresie-decompresie folosind transformata cosinus discret a. (funct ia
compresie decompresie cu DCT, din meniul Algoritmi). Pentru aceasta
vizualizat i imaginea decompresata.bmp. Codul prezentat n continuare pre-
supune c a imaginea este p atrat a:
void ImageViewer :: compresie_decompresie_cu_DCT( void )
{
int w, h;
int i, j, k;
double pi = 3.1415926;
w = image.width();
h = image.height();
int N = w;
double max;
double C[ N ][ N ]; //matricea transformarii cosinus
double U[ N ][ N ]; //imaginea in spatiul original
double V[ N ][ N ]; //imaginea in spatiul transformatei
double AUX[ N ][ N ];
// COMPRESIA IMAGINII
//formarea matricei C a transformarii cosinus discreta
for( i = 0; i < N; i++ )
C[ 0 ][ i ] = 1. / sqrt( N );
for( i = 1; i < N; i++ )
for( j = 0; j < N; j++ )
C[ i ][ j ] = sqrt( 2./N ) *
cos( pi * ( 2*j + 1 ) * i / ( 2*N ) );
//formarea matricei U
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
U[ i ][ j ] = qRed( image.pixel( i, j ));
//V = C*U*Ct
//mai intii vom calcula AUX = C * U
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
AUX[ i ][ j ] = 0;
for( k = 0; k < N; k++ )
78 LUCRAREA 9. COMPRESIA IMAGINILOR
AUX[ i ][ j ] += C[ i ][ k ] * U[ k ][ j ];
}
//apoi V = AUX * Ct
max = 0;
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
V[ i ][ j ] = 0;
for( k = 0; k < N; k++ )
V[ i ][ j ] += AUX[ i ][ k ] * C[ j ][ k ];
if( V[ i ][ j ] > max )
max = V[ i ][ j ];
}
//anularea coeficientilor
//in vederea maririi factorului de compresie
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
if( V[ i ][ j ] < 100 ) //pragul de anulare
V[ i ][ j ] = 0;
//alte valori prag: -500, -100, 0, 100, 500
}
// DECOMPRESIA IMAGINII
//U = Ct * V * C
//AUX = Ct * V
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
AUX[ i ][ j ] = 0;
for( k = 0; k < N; k++ )
AUX[ i ][ j ] += C[ k ][ i ] * V[ k ][ j ];
}
//apoi U = AUX * C
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
U[ i ][ j ] = 0;
for( k = 0; k < N; k++ )
9.4. COMPRESIA CU TRANSFORMATE 79
U[ i ][ j ] += AUX[ i ][ k ] * C[ k ][ j ];
}
//pseudo-imaginea diferenta
QImage diff( N, N, 32, 0, QImage:: IgnoreEndian );
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
{
int dif = abs( qRed( image.pixel( i, j ) ) -
(int)( U[ i ][ j ] ) );
diff.setPixel( i, j, qRgb( dif, dif, dif ) );
}
iio.setImage( diff );
iio.setFileName( "diferenta.bmp" );
iio.setFormat( "BMP" );
iio.write();
}
Problema 4. Calculat i eroarea p atratic a medie () dintre imaginea
original a si imaginea obt inut a prin compresia si decompresia cu transformat a
cosinus discret a, folosind formula:
= (U V )
2
=
1
NM
N1

i=0
M1

j=0
[u(i, j) v(i, j)]
2
Pentru aceasta modicat i funct ia Compresie-decompresie cu DCT. Ob-
servat i valorile erorii medii p atratice pentru diverse valori ale pragului de
anulare a coecient ilor n spat iul transform arii.
Problema 5. Observat i pseudo-imaginea diferent a, dintre imaginea
original a si cea obt inut a prin compresia si decompresia cu DCT, pentru
diferite valori ale pragului (vezi sierul diferenta.bmp).
80 LUCRAREA 9. COMPRESIA IMAGINILOR
Lucrarea 10
Segmentarea imaginilor
BREVIAR TEORETIC
Segmentarea reprezint a mp art irea imaginii n zone de interes, dup a anu-
mite criterii. Fiec arui pixel i se va atribui o valoare, 0 sau 1, reprezent and
apartenent a acestuia la o anumit a zon a sau regiune de interes. De regul a,
segmentarea urm areste extragerea, identicarea sau recunoasterea unui an-
umit obiect dintr-o imagine. Zonele sau regiunile care alc atuiesc o ima-
gine poart a numele de segmente. Pentru o imagine f(m, n), segmentarea
reprezint a mp art irea lui f ntr-un num ar N de zone f
i
(m, n), cu i = 1..N,
can Figura 10.1. Aceste segmente se numesc complete, dac a au urm atoarele
propriet at i:
f
i

f
j
= pentru i = j,

i=1
f
i
= f,
segmentul f
i
s a e compact, pentru i,
pentru i, un anumit criteriu de uniformitate E(f
i
) este satisf acut,
pentru i, j, citeriul de uniformitate pentru f
i

f
j
nu este satisf acut.
Metodele de segmentare a imaginilor se pot clasica n:
metode de segmentare orientate pe regiuni
metode de segmentare orientate pe contururi
10.1 Segmentarea orientata pe regiuni

In general, operat ia de segmentare orientat a pe regiuni urm areste extragerea


din imagine a zonelor (regiunilor) ocupate de diversele obiecte prezente
81
82 LUCRAREA 10. SEGMENTAREA IMAGINILOR
f
f
f
f
f
f
1
2
3
4
5
6
Figura 10.1: Exemplu teoretic de segmentare.
n scen a. Un obiect se deneste ca o entitate caracterizat a de un set de
parametri ale c aror valori nu se modic a n diferitele puncte ce apart in
entit at ii considerate. Unul dintre cei mai simpli parametri de denit ie este
nivelul de gri al pixelului. Dac a nivelul de gri caracterizeaz an mod sucient
obiectele din imagine, atunci histograma imaginii va prezenta o structur a de
moduri dominante - adic a de intervale de nivele de gri ce apar cu probabili-
tate mai mare. Fiecare mod al histogramei va reprezenta c ate un obiect sau
o categorie de obiecte.
10.1.1 Praguirea histogramei
Separarea modurilor histogramei, si deci identicarea obiectelor din imagine,
se face prin alegerea unor nivele de gri, numite praguri de segmentare. De
obicei aceste praguri se aleg ca ind corespunz atoare minimelor locale ale
histogramei. Din imaginea init ial a f se construieste o imagine de etichete g
(imagine etichetat a), conform unei transform ari de forma:
g(m, n) =
_
E
0
, 0 f(m, n) < T
K1
E
K
, T
K1
f(m, n) < L
(10.1)

In cazul unei histograme bimodale (care cont ine dou a moduri domi-
nante), ca cea din Figura 10.2(a), transformarea de mai sus devine:
g(m, n) =
_
E
0
, 0 f(m, n) < T
E
1
, T f(m, n) < L
(10.2)
asem an atoare cu operat ia de binarizare. O astfel de histogram a bi-
modal a este caracteristic a imaginilor ce cont in un singur obiect sau mai
multe obiecte de acelasi fel, pe un fundal uniform. De exemplu, o imagine
care cont ine un scris negru pe un fond alb.
10.2. SEGMENTAREA ORIENTAT

A PE CONTURURI 83
0 255 0 255
(a) (b)
Figura 10.2: Histogram a: (a) bimodal a; (b) cu trei moduri dominante.
10.1.2 Segmentarea prin crestere de regiuni
Principiul pe care se bazeaz a cresterea regiunilor este urm atorul: se aleg n
imagine pixeli reprezentativi pentru ecare obiect individual, pe baza c arora
are loc un proces de aglomerare a pixelilor vecini acestora, ce au aceleasi
propriet at i cu pixelii reprezentativi.

In urma acestui proces de aglomerare
se obt in zone de pixeli cu aceleasi caracteristici.
Procesul se opreste n momentul n care ecare pixel al imaginii a fost
alocat unei regiuni. Metoda are dou a etape esent iale: alegerea punctelor de
start (puncte init iale), numite germeni sau semint e, si cresterea propriu-zis a
a regiunilor. Num arul nal de regiuni rezultate este egal cu num arul de
germeni alesi init ial pentru crestere.

In principiu, este de dorit ca ecare
obiect individual aat n imagine, s a e marcat de un germene. Daca n
interiorul unui obiect se g asesc mai mult i germeni, pentru ecare dintre ei
va crescut a o regiune, fapt ce duce la o segmentare articial a nedorit a
a obiectului respectiv. Acest neajuns poate corectat printr-o etap a de
fuziune a regiunilor adiacente ce au propriet at i asem an atoare.
Daca n interiorul unui obiect nu este ales nici un germene, atunci obiec-
tul respectiv va inclus n regiunile ce cresc pornind de la germeni din
vecin atatea sa.
10.2 Segmentarea orientata pe contururi

Intr-o imagine, variat iile de nivel ale pixelilor reprezint a schimb ari ale pro-
priet at ilor zice sau geometrice ale obiectelor ce compun scena.

Intr-un
num ar mare de cazuri, aceste variat ii de intensitate corespund frontierelor
(contururilor) regiunilor determinate de obiectele dintr-o imagine.
84 LUCRAREA 10. SEGMENTAREA IMAGINILOR
10.2.1 Tehnicile de gradient
Principiul acestor metode const a n denirea punctelor de contur ca ind
acei pixeli ai imaginii pentru care apar schimb ari abrupte ale nivelului de gri.
M asurarea acestor variat ii se face prin operatori derivativi de tip gradient.
Derivata imaginii pe direct ia r, ce face unghiul cu orizontala, este dat a de
combinat ia liniar a a derivatelor part iale pe direct iile orizontal a si vertical a:
f
r
=
f
x
x
r
+
f
y
y
r
=
f
x
cos +
f
y
sin (10.3)
f
r
= f
x
cos +f
y
sin (10.4)
Valoarea maxim a a acestei derivate, calculate dup a unghiul este deter-
minat a de ecuat ia:

_
f
r
_
= f
x
sin +f
y
cos = 0 (10.5)
care are solut ia:
= arctan
_
f
x
f
y
_
(10.6)
Pe aceast a direct ie, modulul gradientului este:
_
f
r
_
max
=
_
f
2
x
+f
2
y
(10.7)
Din punct de vedere practic, implementarea acestei metode implic a cal-
cularea, pentru ecare pixel al imaginii, a derivatelor part iale f
x
si f
y
, cal-
cularea modulului gradientului maxim si a direct iei acestuia. Valoarea gra-
dientului maxim din ecare pixel al imaginii este apoi comparat a o valoare
de prag: dac a pragul este dep asit, atunci pixelul este considerat a pixel de
contur. Realizarea derivatelor part iale dup a direct iile orizontal a si vertical a
implic a formularea discret a a lui f
x
si f
y
:
f
x
=
f
x
=
f(m, n)
m
(10.8)
f
y
=
f
y
=
f(m, n)
n
(10.9)
Aceste derivate part iale discrete pot avea mai multe implement ari:
f
x
= f(m, n) f(m+ 1, n) f
y
= f(m, n) f(m, n + 1) (10.10)
10.2. SEGMENTAREA ORIENTAT

A PE CONTURURI 85
f
x
= f(m1, n) f(m, n) f
y
= f(m, n 1) f(m, n) (10.11)
f
x
= f(m1, n) f(m+ 1, n) f
y
= f(m, n 1) f(m, n + 1) (10.12)
Aceste expresii nu reprezint a altceva dec at combinat ii liniare ale valorilor
unor pixeli din imagine, situat i n vecin atatea pixelului curent din pozit ia
(m, m). Prin urmare, se pot implementa folosind urm atoarele m asti de
ltrare:
W
x
=
_
1

1
_
W
y
=
_
1

1
_
W
x
=
_
1 1

_
W
y
=
_
1
1

_
W
x
=
_
1 0

1
_
W
y
=
_
_
1
0

1
_
_
unde prin

am marcat originea m astii de ltrare. O simplicare uzual a
practic a este dat a de aproximarea:
_
f
r
_
max
| f
x
| + | f
y
| (10.13)
Folosirea m astilor de derivare pe vertical a si orizontal a prezentate are
ns a serioase neajunsuri: dimensiunea lor mic a face ca rezultatele s a e
extrem de sensibile la zgomote.

In aceste condit ii a ap arut ideea natural a
de a combina ltrarea de derivare cu o ltrare de netezire, care s a reduc a
efectele zgomotului. Ceea ce rezult a pentru operatorii de derivare orizontal a
si vertical a sunt m astile:
W
x
=
_
_
1 0 1
c 0

c
1 0 1
_
_
W
y
=
_
_
1 c 1
0 0

0
1 c 1
_
_
(10.14)
Prin particularizarea valorilor constantei c se pot obtine diverse tipuri de
operatori de extragere de contur clasici: Prewitt (c = 1), Izotrop (c =

2)
sau Sobel (c = 2).

In Figura 10.3 putet i observa efectele extragerii de contur
folosind operatorul Sobel.
86 LUCRAREA 10. SEGMENTAREA IMAGINILOR
(a) (b)
Figura 10.3: Filtrul Sobel: (a) imaginea original a; (b) imaginea rezultat a.
10.2.2 Operatorii compas
Un operator compas este denit de un num ar de m asti de derivare, co-
respunz atoare unor ltr ari liniare, pe direct iile principale (vertical a, orizon-
tal a si cele dou a diagonale), n cele dou a sensuri. Compasul clasic are D = 8
m asti de ltrare, ecare dintre ele realiz and o derivare dup a o direct ie mul-
tiplu de 45

. Un exemplu de m asti de derivare direct ional a sunt m astile


urm atoare, indexate dup a direct ia geograc a pe care se calculeaz a derivata:
W
N
=
_
_
1 1 1
0 0 0
1 1 1
_
_
W
NV
=
_
_
1 1 0
1 0 1
0 1 1
_
_
W
V
=
_
_
1 0 1
1 0 1
1 0 1
_
_
W
SV
=
_
_
0 1 1
1 0 1
1 1 0
_
_
W
S
=
_
_
1 1 1
0 0 0
1 1 1
_
_
W
SE
=
_
_
1 1 0
1 0 1
0 1 1
_
_
W
E
=
_
_
1 0 1
1 0 1
1 0 1
_
_
W
NE
=
_
_
0 1 1
1 0 1
1 1 0
_
_
Dupa ce se vor calcula, pentru ecare pixel n parte, cele opt valori ale
gradient ilor, corespunzatoare celor opt m asti de derivare:
f
1
(m, n) f
2
(m, n) ... f
8
(m, n) (10.15)
10.2. SEGMENTAREA ORIENTAT

A PE CONTURURI 87
se va determina valoarea maxim a dintre aceste opt valori. Aceast a va-
loare va comparat a cu valoarea de prag, iar n cazul n care este mai mare,
pixelul respectiv va considerat pixel de contur.
10.2.3 Identicarea trecerilor prin zero ale celei de-a doua
derivate
Unul dintre principalele dezavantaje ale metodelor de gradient este pre-
cizia slab a de localizare a conturului n condit iile unei pante put in abrupte
(tranzit ii slabe, graduale) a acestuia. Derivata a doua poate ns a folosit a
pentru a marca centrul tranzit iei (trecerea sa prin zero). Operatorul bazat
pe trecerea prin zero a derivatei secunde este operatorul zero-crossing.

In
cazul imaginilor, derivata secund a trebuie luat a n considerare dup a ambele
direct ii, combinate n laplacian:
f =

2
f
x
2
+

2
f
y
2
(10.16)

In continuare sunt prezentate trei m asti ce implementeaz a o derivat a


secund a bidirect ional a (operator Laplace):
_
_
_
_
_
_
0
1
4
0

1
4
1
1
4
0
1
4
0
_
_
_
_
_
_
_
_
_
_
_
_
1
4

1
2
1
4

1
2
1
1
2
1
4

1
2
1
4
_
_
_
_
_
_
_
_
_
_
_
_

1
8

1
8

1
8

1
8
1
1
8

1
8

1
8

1
8
_
_
_
_
_
_
Pentru ecare pixel din imagine se va calcula derivata a doua si dac a
aceasta este zero, atunci pixelul este considerat ca ind pixel de contur.
DESF

ASURAREA LUCR

ARII
Problema 1. Implementat i segmentarea prin praguirea histogramei.
Pentru aceasta veti folosi codul de la lucrarea nr. 4 (egalizarea histogramei)
si imaginea tools.bmp.
Problema 2. Observat i extragerea contururilor prin tehnici de gradient,
folosind un operator Prewitt.
void ImageViewer :: extragere_contururi( void )
{
int i, j;
int k, l;
int w, h;
88 LUCRAREA 10. SEGMENTAREA IMAGINILOR
int g, g1, g2;
int h1[ 3 ][ 3 ], h2[ 3 ][ 3 ];
//operatori Prewitt
h1[0][0] = -1; h1[0][1] = 0; h1[0][2] = 1;
h1[1][0] = -1; h1[1][1] = 0; h1[1][2] = 1;
h1[2][0] = -1; h1[2][1] = 0; h1[2][2] = 1;
h2[0][0] = -1; h2[0][1] = -1; h2[0][2] = -1;
h2[1][0] = 0; h2[1][1] = 0; h2[1][2] = 0;
h2[2][0] = 1; h2[2][1] = 1; h2[2][2] = 1;
w = image.width();
h = image.height();
QImage image_ext( w, h, 32, 0, QImage::IgnoreEndian );
for( i = 1; i < w - 1; i++ )
for( j = 1; j < h - 1; j++ )
{
g1 = 0;
g2 = 0;
for( k = -1; k < 2; k++ )
for( l = -1; l < 2; l++ )
{
g1 += h1[ k + 1 ][ l + 1 ]
* qRed( image.pixel( i+k, j+l ));
g2 += h2[ k + 1 ][ l + 1 ]
* qRed( image.pixel( i+k, j+l ));
}
g = abs( g1 ) + abs( g2 );
if( g > 100 )
image_ext.setPixel( i, j, qRgb(255,255,255) );
else
image_ext.setPixel( i, j, qRgb(0,0,0) );
}
image = image_ext;
pm = image;
update();
}
10.2. SEGMENTAREA ORIENTAT

A PE CONTURURI 89
Problema 3. Implementat i operatorul Izotrop de extragere a contu-
rurilor.
Problema 4. Implementat i operatorul Sobel de extragere a contu-
rurilor.
Problema 5. Implementat i operatorul compas dat drept exemplu.
Problema 6. Implementat i extragerea de contururi prin identicarea
trecerilor prin zero ale derivatei secunde.
Problema 7. Implementat i cresterea de regiuni, pornind de la un singur
germene. Vet i folosi pentru aceasta imaginea tools.bmp.
90 LUCRAREA 10. SEGMENTAREA IMAGINILOR
Lista gurilor
2.1 Formarea imaginii n aparatul de fotograat: 1-lentil a, 2-
camera obscur a, 3-obiectiv, 4-pelicul a. . . . . . . . . . . . . . 6
2.2 Forma tipic a a funct iei de ecient a luminoas a relativ a. . . . . 7
2.3 Domeniu nit din R
2
. . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Ret ea dreptunghiular a de esantionare. . . . . . . . . . . . . . 9
2.5 Exemplu de funt ie de cuantizare. . . . . . . . . . . . . . . . . 10
3.1 Reprezentarea unei operat ii punctuale. . . . . . . . . . . . . . 16
3.2 Funct ia de accentuare de contrast. . . . . . . . . . . . . . . . 16
3.3 Funct ia de ntindere maxim a a contrastului. . . . . . . . . . . 17
3.4

Intinderea maxim a a contrastului: (a) imaginea original a si
(b) imaginea rezultat a, pentru a=50, b=200. . . . . . . . . . 18
3.5 Funct ia de binarizare. . . . . . . . . . . . . . . . . . . . . . . 19
3.6 Binarizarea: (a) imaginea original a si (b) imaginea binarizat a
cu T=127. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.7 Funct ia de negativare. . . . . . . . . . . . . . . . . . . . . . . 20
3.8 Negativarea: (a) imaginea original a si (b) negativul imaginii. 20
3.9 Funct ia de decupare cu p astrarea fundalului. . . . . . . . . . 21
3.10 Funct ia de decupare f ar a p astrarea fundalului. . . . . . . . . . 21
4.1 Egalizarea histogramei: (a) imaginea original a si (b) imaginea
rezultat a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2 Histograma (a) original a si (b) dup a egalizare. . . . . . . . . 28
5.1 Translatarea unui obiect dreptunghiular. . . . . . . . . . . . . 32
5.2 Translatarea spre dreapta a unui obiect dreptunghiular ntr-o
imagine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.3 Rotat ia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.4 Oglindirea (a) st anga-dreapta (b) sus-jos. . . . . . . . . . 33
5.5 Oglindirea st anga-dreapta: (a) imaginea original a; (b) imag-
inea oglindit a. . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.1 Modelul aditiv de degradare. . . . . . . . . . . . . . . . . . . 38
91
92 LISTA FIGURILOR
6.2 Funct ia de densitate de probabilitate pentru o distribut ie uni-
form a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.3 Zgomotul uniform: (a) imaginea original a; (b) imaginea afec-
tat a de zgomot uniform, SNR=5 dB. . . . . . . . . . . . . . . 39
6.4 Funct ia de densitate de probabilitate pentru o distribut ie
gaussian a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.5 Zgomotul Gaussian: (a) imaginea original a; (b) imaginea
afectat a de zgomot gaussian, SNR=5 dB. . . . . . . . . . . . 40
6.6 Zgomotul sare si piper: (a) imaginea original a; (b) imag-
inea cu 10% pixeli afectat i de zgomot. . . . . . . . . . . . . . 41
6.7 Diverse funct ii de distribut ie. . . . . . . . . . . . . . . . . . . 42
7.1 Masc a de ltrare p atrat a de dimensiune 3x3. . . . . . . . . . 48
7.2 Masc a de ltrare p atrat a de dimensiune 3 3. . . . . . . . . 49
7.3 Masc a de ltrare p atrat a de dimensiune 5 5. . . . . . . . . 50
7.4 Masc a de ltrare p atrat a de dimensiune 7 7. . . . . . . . . 50
7.5 Filtrarea de mediere: (a) imaginea original a; (b) imaginea
ltrat a cu o masc a 7x7. . . . . . . . . . . . . . . . . . . . . . 50
7.6 Filtrarea Laplace: (a) imaginea original a; (b) imaginea rezul-
tat a (negativat a). . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.7 Filtrul de accentuare. . . . . . . . . . . . . . . . . . . . . . . . 53
7.8 Filtrul median: (a) imaginea original a afectat a de zgomot
sare si piper; (b) imaginea ltrat a. . . . . . . . . . . . . . . 54
9.1 Algoritmul Human: etapa 1. . . . . . . . . . . . . . . . . . . 71
9.2 Algoritmul Human: etapa 2. . . . . . . . . . . . . . . . . . . 71
9.3 Algoritmul Human: etapa 3. . . . . . . . . . . . . . . . . . . 72
9.4 Algoritmul Human: etapa 4. . . . . . . . . . . . . . . . . . . 72
9.5 Transformarea imaginii ntr-un sir unidimensional, prin con-
catenarea liniilor. . . . . . . . . . . . . . . . . . . . . . . . . . 73
9.6 Transformarea unei imagini cu 256 nivele de gri, n 8 imagini
binare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
9.7 Transformarea direct a. . . . . . . . . . . . . . . . . . . . . . . 75
9.8 Anularea coecient ilor de energie mic a. . . . . . . . . . . . . 75
9.9 Transformarea invers a. . . . . . . . . . . . . . . . . . . . . . . 75
10.1 Exemplu teoretic de segmentare. . . . . . . . . . . . . . . . . 82
10.2 Histogram a: (a) bimodal a; (b) cu trei moduri dominante. . . 83
10.3 Filtrul Sobel: (a) imaginea original a; (b) imaginea rezultat a. . 86
Bibliograe
[1] V. Buzuloiu, Prelucrarea Imaginilor, note de curs.
[2] C. Vertan, Prelucrarea si Analiza Imaginilor, Ed. Printech, 1999.
[3] A. Jain, Fundamentals of Digital Image Processing, Prentice-Hall,
1989.
[4] R. Gonzales, R. Woods, Digital Image Processing, Addison Wes-
ley, 1992.
[5] Trolltech, Qt Overview, http://www.trolltech.com/
[6] Trolltech, The Qt Class Reference, http://www.trolltech.com/
93
ISBN (10) 973-635-674-4
ISBN (13) 978-973-635-674-2