dokumentacija ispitnog rada · rgb prostor boja je aditivni model boja u kojima se crvena, zelena i...
TRANSCRIPT
UNIVERZITET U NOVOM SADU
FAKULTET TEHNIČKIH NAUKA
UNIVERZITET U NOVOM SADU
FAKULTET TEHNIČKIH NAUKA
Elektronika, energetika i telekomunikacije
DOKUMENTACIJA ISPITNOG RADA Naziv zadatka: Segmentacija slike
Student: Stefan Đukić
Broj indeksa: 13444
Predmet: Arhitektura procesora signala
Mentor: prof. dr Pap Ištvan
Novi Sad, maj 2014.
Sadržaj
SADRŽAJ
1. Uvod........................................................................................................................... 1
2. Teorijske osnove ...................................................................................................... 2
2.1 Konverzija iz RGB u Y'UV prostor .................................................................... 2
2.2 Osvetljenje slike ................................................................................................. 4
2.3 Kontrast slike ..................................................................................................... 5
2.4 Rotacija slike ...................................................................................................... 6
2.5 BMP format slike................................................................................................ 8
2.5.1 Zapis piksela u BMP formatu ....................................................................... 9
3. Koncept rešenja ...................................................................................................... 11
4. Programsko rešenje ............................................................................................... 13
4.1 Modul main ...................................................................................................... 14
4.2 Modul za proveru parametara ........................................................................ 15
4.3 Modul za rad sa BMP datotekama .................................................................. 15
4.4 Modul za korekciju osvetljenja ....................................................................... 19
4.5 Modul za korekciju kontrasta ......................................................................... 19
4.6 Modul za rotiranje slike .................................................................................. 20
5. Rezultati .................................................................................................................. 21
6. Zaključak ................................................................................................................. 23
7. Literatura ................................................................................................................ 24
Uvod
1
1. Uvod
Segmentacija slike je predstavlja proces kojim se digitalna slika deli na segmente,
odnosno skupove piksela. Cilj segmentacije je da se pojednostavi ili promeni predstava slike,
tako da bude pogodna za dalju analizu, odnosno da bude svrsishodna. Segmentacija slike se
obično koristi za lociranje objekata, granica, linija, krivih u slikama. Tačnije, segmentacija
slike je proces dodeljivanja „oznake” svakom pikselu na slici, tako da pikseli sa istom
oznakom imaju iste vizuelne karakteristike.
Rezultat segmentacije slike je skup segmenata koji zajedno prekrivaju celu sliku,
odnosno ako govorimo o detekciji ivice, onda je rezultat skup kontura izvađenih iz slike.
Primena segmentacije slike danas je veoma široka. Koristi se u kompjuterskoj viziji,
prepoznavanju oblika, medicini, saobraćaju.
U okviru ovog rada realizovana je funkcija za konverziju slike iz RGB prostora boja u
YUV prostor boja, funkcija za korekciju osvetljenja, funkcija za korekciju kontrasta i funkcija
za obrtanje slike za 90, 180 i 270 stepeni. Realizacija je pisana na programskom jeziku C i
korišćen je alat Visual Studio 2013. Funkcije se primenjuju nad ulaznom BMP (Bitmap)
datotekom proizvoljnih dimenzija. Jedino ograničenje jeste kod rotiranja, gde ulazna slika
mora biti isključivo dimenzija deljivih sa 4 (npr, 960x600). Rezultat obrade se čuva u novoj,
izlaznoj BMP datoteci. Parametri komandne linije su: naziv ulazne slike, naziv izlazne slike,
mod i odgovarajući parametar za izabrani mod.
Teorijske osnove
2
2. Teorijske osnove
Kako bismo uradili traženu segmentaciju slike, neophodno je da problem razložimo
na više modula i prethodno izvršimo nekoliko međukoraka, pri čemu je, sve vreme,
neophodno poštovati teorijske osnove traženih funkcija segmentacije i formata ulazne slike.
Iz tog razloga, hronološkim redosledom ćemo razmotriti njihove osnove.
2.1 Konverzija iz RGB u Y'UV prostor
RGB prostor boja je aditivni model boja u kojima se crvena, zelena i plava svetlost
dodaju zajedno na razne načine, kako bi se reprodukovao širok spektar čoveku vidljivih boja.
Naziv ovog prostora boja dolazi od inicijala tri osnovne boje na engleskom, crvena, zelena i
plava. Glavna svrha RGB prostora boja je da reprezentuje i prikaže sliku u elektronskim
sistemima, kao što su televizori i računari, ali se koristi i kod fotoaparata. RGB prostor boja
ima teoriju iza sebe koja je bazirana na ljudskoj percepciji boja.
Y'UV prostor boja je izmišljen od strane inženjera koji su želeli da naprave televiziju
u boji na prvobitnoj crno-beloj infrastrukturi. Trebalo je osmisliti način za prenos signala
koji je kompatibilan sa crno-belim televizorima, a da pri tome ostane mogućnost dodavanja
boje. Luma (Y') komponenta je već od ranije bila poznata kao crno-beli signal, odnosno kao
signal osvetljaja, te su stoga dodali U i V komponente. Tako se kao rešenje pojavio Y'UV
prostor boja. U i V su dve hromatske komponente koje predstavljaju intenzitete boja koji su
Teorijske osnove
3
izračunati pomoću R i B komponenti i sadrže informacije o razlici među bojama. To znači da
su u crno-beloj slici komponente U i V jednake nuli, a da je komponenta Y' signal jedini koji
nosi informaciju. Ovo je bilo veoma dobro rešenje prilikom prelaska sa crno-bele televizije
na televiziju u boji iz prostog razloga što su televizijski prijemnici bili raznoliki (neki su imali
još uvek crno-bele, dok su drugi već prešli na kolor televizore), te je bilo potrebno emitovati
signal slike iz kojeg je istovremeno moguće „izvući“ crno-belu sliku i sliku u boji.
Sam proces konverzije iz RGB prostora u Y'UV je prilično jednostavan iz razloga što
je Y'UV signal sastavljen iz RGB izvora. Y' komponenta je sačinjena od zbira prethodno
izračunatih vrednosti R, G, B komponenti, respektivno, i predstavlja meru ukupnog
osvetljaja. U i V komponente se izračunavaju kao skalirana razlika između vrednosti Y', B i
R komponenti. Definišemo sledeće konstante: 𝑊𝑅 = 0.299, 𝑊𝐺 = 0.587, 𝑊𝐵 = 0.114,
𝑈𝑚𝑎𝑥 = 0.436 i 𝑉𝑚𝑎𝑥 = 0.615. Iz RGB prostora u Y'UV prostor prelazimo sledećim
formulama:
𝑌′ = 𝑊𝑅𝑅 + 𝑊𝐺𝐺 + 𝑊𝐵𝐵
𝑈 = 𝑈𝑚𝑎𝑥
𝐵 − 𝑌′
1 − 𝑊𝐵≈ 0.492(𝐵 − 𝑌′)
𝑉 = 𝑉𝑚𝑎𝑥
𝑅 − 𝑌′
1 − 𝑊𝑅≈ 0.877(𝑅 − 𝑌′)
Ovo je moguće preglednije napisati u matričnom obliku, te dobijamo:
[𝑌′𝑈𝑉
] = [0.299 0.587 0.114
−0.14713 −0.28886 0.4360.615 −0.51499 −0.10001
] [𝑅𝐺𝐵
] ∙
Inverzna operacija u odnosu na gore navedene formule daje prelaz iz Y'UV u RGB prostor:
𝑅 = 𝑌′ + 𝑉1 − 𝑊𝑅
𝑉𝑚𝑎𝑥
𝐺 = 𝑌′ − 𝑈𝑊𝐵(1 − 𝑊𝐵)
𝑈𝑚𝑎𝑥𝑊𝐺− 𝑉
𝑊𝑅(1 − 𝑊𝑅)
𝑉𝑚𝑎𝑥𝑊𝐺
𝐵 = 𝑌′ + 𝑈 1 − 𝑊𝐵
𝑈𝑚𝑎𝑥
Teorijske osnove
4
I ovo je moguće preglednije napisati u matričnom obliku, te dobijamo:
[𝑅𝐺𝐵
] = [1 0 1.139831 −0.39465 −0.580601 2.03211 0
] [𝑌′𝑈𝑉
] ∙
Vrednosti Y' komponente se po konvenciji pomeraju i skaliraju na opseg (16,235).
Ova zbunjujuća praksa potiče iz MPEG standarda i objašnjava zašto se broj 16 dodaje na
komponentu Y' kao i to zašto se u osnovi transformacije suma ide do 220 a ne do 255. U i V
vrednosti mogu sadržati pozitivne i negativne vrednosti, iz tog razloga se sabiraju sa 128
kako bih uvek vrednosti bile pozitivne.
2.2 Osvetljenje slike
Osvetljaj slike predstavlja osobinu našeg vizuelnog sistema koja nam omogućava da
predmete u okolini posmatramo kao da odbijaju svetlost. Drugim rečima, osvetljenje je
percepcija koju doživljavamo na osnovu količine svetlosti koja dolazi iz pravca nekog
objekta. Ovo predstavlja subjektivnu osobinu predmeta koji se posmatra.
Da bismo izvršili korekciju osvetljenja, neophodno je preći iz RGB sistema u Y’UV i
koristiti Y (luma) komponentu, gi. Pored toga, neophodno je imati željeni nivo korekcije
kontrasta, brightness. Korekcija osvetljenja se stoga može definisati na sledeći način:
𝑠𝑖 = 𝑔𝑖 + 𝑏𝑟𝑖𝑔ℎ𝑡𝑛𝑒𝑠𝑠
Slika 1 – Primer korekcije osvetljenja na slici nivoom osvetljenja 50
(levo - originala slika, desno - rezultujuća slika)
Teorijske osnove
5
2.3 Kontrast slike
Kontrast je razlika koju uočavamo između osvetljaja i boje posmatranog objekta, pri
čemu ta razlika čini posmatrani objekat uočljivim. U vizuelnom sistemu čoveka, kontrast je
određen razlikom boje, osvetljaja objekta i osvetljaja okolnih objekata. Pošto je čovekov
vizuelni sistem više osetljiv na kontrast nego na osvetljaj objekta, možemo da vidimo
uočavamo svet bez puno razlike bez obzira na doba dana ili na geografski položaj. Kontrast
može da se posmatra i kao razlika boje koja je naneta na neki materijal i pozadine, tj. boje
samog materijala.
Ljudska osetljivost na kontrast izgleda kao tipičan filtar propusnik opsega, čija je
centralna vrednost oko 4 ciklusa po stepenu. Ovo nam govori da je ljudski vizuelni sistem
najosetljiviji na kontraste koji nastaju na 4 ciklusa po stepenu, odnosno oko ovog opsega
frekvencija ljudi mogu najbolje da detektuju razlike u kontrastu, bolje nego u bilo kom
drugom opsegu prostornih frekvencija.
Pad na visokim prostornim frekvencijama predstavlja ograničenje vizuelnog sistema
čoveka da uoči velike promene po stepenu vidnog ugla, obično iznosi oko 60 ciklusa u
stepenu. Razlog ovom ograničenju kod čoveka se krije u gustini fotoćelija unutar oka – gušće
poređane fotoćelije daju bolju rezoluciju.
Pad na niskim frekvencijama je povezan sa lateralne inhibicije ganglijskih ćelija unutar
mrežnjače. Odnosno, ovaj pad je povezan sa prirodom reagovanja i međusobnog
pobuđivanja ganglijalnih ćeliju u oku čoveka.
Vremenom čovekova osetljivost na kontrast može da opada zbog starosti, ali i nekih bolesti,
poput katarakte.
U radu se za korekciju kontrasta u slici koristi sledeća formula:
𝑠𝑖 = 𝑐𝑜𝑛𝑡𝑟𝑎𝑠𝑡 ∙ (𝑔𝑖 − 𝑎𝑣𝑒𝑟𝑎𝑔𝑒) + 𝑎𝑣𝑒𝑟𝑎𝑔𝑒
Teorijske osnove
6
Pri čemu je si Y komponenta iz Y’UV prostora boja koju dobijemo nakon korekcije, gi je
originalna Y komponenta iz Y’UV prostora, contrast predstavlja parametar tj. nivo korekcije
kontrasta i average predstavlja srednju vrednost originalne slike, koju dobijamo formulom:
𝑎𝑣𝑒𝑟𝑎𝑔𝑒 = 1
𝑁𝑥𝑁𝑦∑
𝑁𝑥
𝑋=0
∑ 𝑃(𝑋, 𝑌)
𝑁𝑦
𝑌=0
Pri čemu su Nx i Ny dimenzije slike po x i y osi, respektivno, a P(X,Y) je vrednost Y
komponente iz Y’UV prostora boja ulazne slike.
Slika 2 – Primer korekcije kontrasta na slici nivoom korekcije 3.5
(levo - originala slika, desno - rezultujuća slika)
Da bismo izvršili korekciju kontrasta, neophodno je preći iz RGB sistema u Y’UV, kao što je
to bilo neophodno i kod korekcije osvetljenja.
2.4 Rotacija slike
Da bismo izvršili rotaciju slike, najjednostavniji način nam je da je posmatramo kao 2D
matricu. Svaki element matrice predstavlja jedan piksel slike. Dakle, gornji desni ugao u
matrici je gornji desni ugao slike, gornji levi ugao matrice je gornji levi ugao matrice i tako
dalje.
Teorijske osnove
7
Slika 3 – Primer slike na kojoj se vide sastavni pikseli, pri čemu je moguće uvideti analogija sa
matricama
Sada primećujemo da rotaciju slike za 90 stepeni možemo da izvedemo vrlo lako i to
na sledeći način: Prvu kolonu matrice stavimo da bude prvi red, druga kolona da bude drugi
red, treća kolona treći red i tako dalje dok poslednja kolona matrice polazne slike ne postane
poslednji red matrice rotirane slike. Grafički to možemo da prikažemo na sledeći način:
Slika 4 – Princip rotiranja slike za 90 stepeni
Teorijske osnove
8
Ono što se obavezno treba imati na umu jeste da svaki od piksela sadrži tri
komponente. U našem slučaju koristimo slike BMP formata koje su 24-bitne, što znači da
svaka komponenta koristi 8 bita, odnosno da jedan piksel dužine 24 bita. Grafički bismo to
mogli da predstavimo na sledeći način:
Slika 5 – Slika predstavljena kao matrica pri čemu su naznačene RGB komponente svakog piksela
Ukoliko nam je potrebno da rotiramo sliku za 180 ili 270 stepeni, neophodno je pozvati 2 (za
180 stepeni) ili 3 (za 270 stepeni) puta funkciju koja rotira sliku za 90 stepeni.
2.5 BMP format slike
BMP slika je format koji služi za zapisivanje digitalnih fotografija na Windows
operativnim sistemima. Svaka BMP slika se sastoji iz dva tela: Zaglavlja (engl. header) i
piksela, odnosno sadržaja slike (engl. image data, payload).
Slika 6 – Delovi BMP slike
Teorijske osnove
9
Zaglavlje slike sadrži podatke o slici. Sledeća tabela pokazuje koje su to informacije koje se
nalaze u zaglavlju svake BMP slike. Zaglavlje je veličine 54 bajta.
Slika 7 – Izgled BMP zaglavlja
Nama će polja od interesa biti visina i širina slike, veličina BMP datoteke i veličina sadržaja
slike, uključujući peding (engl. padding).
2.5.1 Zapis piksela u BMP formatu
Slika, ako je posmatramo kao matricu, je zapisana tako što je svaki red matrice
zaokružen da bude deljiv sa 4 dodavanjem određenog broja bita (obično su ti biti nule). To
se zove peding. Broj potrebnih bajtova može da se izračuna na sledeći način:
(4 − (3 ∗ 𝑤𝑖𝑑𝑡ℎ) % 4) % 4
Pri čemu interpunkcijski znak „%” predstavlja operator u programskom jeziku C.
Pomoću ovog operatora vršimo operaciju deljenja nekog broja po zadatom modulu (ovde je
to po modulu 4), a rezultat je ostatak pri deljenju. Width predstavlja širinu slike, odnosno
širinu jednog reda matrice. Na sledećoj slici je prikazano kako to izgleda nakon dodavanja
pedinga na piksele. U slučaju da je slika deljiva sa 4 po širini, treba primetiti da će se dodati
peding dužine 0, odnosno da ga neće biti.
Teorijske osnove
10
Slika 8 – Izgled dela BMP slike koji sadrži piksele nakon dodavanja pedinga
Međutim, prilikom konačnog zapisivanja piksela slike ova matrica se pretvara u jedan
veliki niz piksela, tako što se uzima piksel po piksel počevši od donjeg levog ugla, ka desno,
idući od dole ka gore. Odnosno, poslednji red postaje prvi u nizu, pretposlednji red se
nadovezuje na njega, potom treći red od dole dolazi kao treći u velikom nizu piksela, itd. RGB
komponente se zapisuju obrnuto, BGR.
Koncept rešenja
11
3. Koncept rešenja
Nad zadatim projektom je izvršena dekompozicija na module, pri čemu svaki modul
rešava jedan deo celokupnog problema. Time je ujedno obezbeđena preglednost i lakše
razumevanje rešenja, ali i, pre svega, mogućnost da te module koristimo za druga rešenja. Na
sledećoj slici je prikazana dekompozicija.
Slika 9 – Dekompozicija rešenja na module
Koncept rešenja
12
U modulu aplikacije se prihvataju ulazni parametri iz komandne linije. Zatim se, unutar
modula aplikacije, kod može podeliti na 4 celine:
1. Poziv modula za proveru ispravnosti parametara sa komandne linije.
2. Učitavanje slike u memoriju. Vrši se provera potencijalnih nepravilnosti u toku
učitavanja slike i provera zaglavlja BMP slike, pri čemu se pozivaju funkcije iz
modula za rad sa BMP slikama. Ovde se proverava, samo ukoliko je korisnik izabrao
mod 3, deljivost dimenzija slike sa 4.
3. Konverzija, pri čemu se ulazna slika prebacuje iz RGB prostora u Y’UV prostor boja.
Ova funkcija se poziva iz modula za rad sa BMP slikama.
4. Poziv jednog od tri modula, u zavisnost od moda koji je upisan u komandnu liniju
(1 - korekcija osvetljenja, 2 - korekcija kontrasta, 3 - rotiranje slike)
Slika 10 – Blok dijagram rešenja
Programsko rešenje
13
4. Programsko rešenje
Programsko rešenje se sastoji, kao što je to već napomenuto, iz više modula, pri čemu
svaki modul rešava jedan deo problema. Ovi moduli su dati u sledećoj tabeli.
Naziv modula Naziv datoteke Opis
Modul aplikacije (main) main.cpp Modul aplikacije za segmentaciju slike
Modul za proveru parametara
input_check.h input_check.cpp
Modul za proveru ispravnosti pro-sleđenih parametara
Modul za rad sa BMP datotekama
bmp.h bmp.cpp
Modul koji sadrži funkcije za rad nad BMP slikama
Modul za korekciju osvetljenja
brightness_correction.h brightness_correction.cpp
Modul za korekciju osvetljenja po formuli:
𝑠𝑖 = 𝑔𝑖 + 𝑏𝑟𝑖𝑔ℎ𝑡𝑛𝑒𝑠𝑠
Modul za korekciju kontrasta
contrast_correction.h contrast_correction.cpp
Modul za korekciju kontrasta po formuli:
𝑠𝑖 = 𝑐𝑜𝑛𝑡𝑟𝑎𝑠𝑡 ∙ (𝑔𝑖 − 𝑎𝑣𝑟𝑔) + 𝑎𝑣𝑟𝑔
Modul za rotaciju slike image_rotate.h image_rotate.cpp
Modul za rotiranje slike za 90, 180 ili 270 stepeni, koji se oslanja na Modul za rotaciju slike za 90 stepeni
Modul za rotaciju slike za 90 stepeni
ninety_rotation.h ninety_rotation.cpp
Modul za rotaciju slike za 90 stepeni koji se poziva jednom, dva puta ili tri puta u zavisnosti od potrebnog stepena rotiranja, 90, 180 ili 270 stepeni, respektivno.
Tabela 1 – Programski moduli
Programsko rešenje
14
4.1 Modul main
Ulazni parametri programa su: naziv ulazne BMP slike, naziv izlazne BMP slike, nivo
korekcije osvetljenja, nivo korekcije kontrasta, ugao rotacije i željeni mod.
int main(int argc, unsigned char* argv[])
Ulazni argumenti argc – Broj ulaznih argumenata sa komandne linije.
argv – Niz argumenata komandne linije.
Izlazni argumenti -
Povratne
vrednost
NO_ERROR, ako nema greške.
ERR_NO_ARGUMENTS, nedovoljan broj parametara.
ERR_INVALID_MODE, mod nije očekivane vrednosti.
ERR_INVALID_BRIGHTENESS_ CONTRAST, nivo osvetljenja ili kontrasta
nije pozitivan broj.
ERR_INVALID_ANGLE, ugao nema jedanu od očekivanih vrednosti.
ERR_INVALID_INPUT, ne može da se otvori ulazna BMP slika.
ERR_INVALID_OUTPUT, ne može da se kreira izlazna BMP slika.
ERR_INVALID_DIM, ulazna BMP slika nije dimenzija deljivih sa 4.
Main funkcija
Tabela 2 – Funkcija main()
Programsko rešenje
15
4.2 Modul za proveru parametara
int input_check (int argc, unsigned char* argv[])
Ulazni argumenti argc – Broj ulaznih argumenata sa komandne linije.
argv – Niz argumenata komandne linije.
Izlazni
argumenti
-
Povratne
vrednost
NO_ERROR, ako nema greške.
ERR_NO_ARGUMENTS, nedovoljan broj parametara.
ERR_INVALID_MODE, mod nije očekivane vrednosti.
ERR_INVALID_BRIGHTENESS_ CONTRAST, nivo osvetljenja ili
kontrasta nije pozitivan broj.
ERR_INVALID_ANGLE, ugao nema jedanu od očekivanih vrednosti.
Funkcija za proveru ulaznih parametara sa komandne linije
Tabela 3 – Funkcija input_check()
4.3 Modul za rad sa BMP datotekama
int isValidBmp(unsigned char *header)
Ulazni argumenti header – Memorijski bafer koji sadrži BMP zaglavlje.
Izlazni
argumenti
-
Povratne
vrednosti
NO_ERROR, ako je zaglavlje ispravno.
ERR_BMP_INVALID, ako je zaglavlje neispravno.
Funkcija za dobavljanje širine slike
Tabela 4 – Funkcija isValidBmp()
Programsko rešenje
16
unsigned long bmpWidth(unsigned char *header)
Ulazni argumenti header – Memorijski bafer koji sadrži BMP zaglavlje.
Izlazni
argumenti
-
Povratne
vrednosti
width – Širina slike.
Funkcija za dobavljanje širine slike
Tabela 5 – Funkcija bmpWidth()
unsigned long bmpHeight(unsigned char *header)
Ulazni argumenti header – Memorijski bafer koji sadrži BMP zaglavlje.
Izlazni
argumenti
-
Povratne
vrednosti
height – Visina slike.
Funkcija za dobavljanje visine slike
Tabela 6 – Funkcija bmpHeight()
void RGB2YUV(unsigned char R, unsigned char G, unsigned char B, unsigned char *Y, unsigned char *U, unsigned char *V)
Ulazni argumenti R – Ulazna R komponenta piksela.
G – Ulazna R komponenta piksela.
B – Ulazna R komponenta piksela.
Izlazni
argumenti
Y – Izlazna Y komponenta piksela.
U – Izlazna U komponenta piksela.
V – Izlazna V komponenta piksela.
Povratne
vrednosti
-
Funkcija za konverziju jednog piksela slike iz RGB u Y’UV prostor boja
Tabela 7 – Funkcija RGB2YUV()
Programsko rešenje
17
void YUV2RGB(unsigned char Y, unsigned char U, unsigned char V, unsigned char *R, unsigned char *G, unsigned char *B)
Ulazni argumenti Y – Ulazna Y komponenta piksela.
U – Ulazna U komponenta piksela.
V – Ulazna V komponenta piksela.
Izlazni
argumenti
R – Izlazna R komponenta piksela.
G – Izlazna G komponenta piksela.
B – Izlazna B komponenta piksela.
Povratne
vrednosti
-
Funkcija za konverziju jednog piksela slike iz Y’UV u RGB prostor boja
Tabela 8 – Funkcija YUV2RGB()
void bufRGB2bufYUV(unsigned char *bufRGB, unsigned char *bufYUV, unsigned long width, unsigned long height)
Ulazni argumenti bufRGB – Ulazni bafer RGB podataka.
width – Širina slike.
height – Visina slike.
Izlazni
argumenti
bufYUV – Izlazni bafer za Y’UV podatke.
Povratne
vrednosti
-
Funkcija za konverziju slike iz RGB u Y’UV prostor boja
Tabela 9 – Funkcija bufRGB2bufYUV()
Programsko rešenje
18
void bufYUV2bufRGB(unsigned char *bufYUV, unsigned char *bufRGB, unsigned long width, unsigned long height)
Ulazni argumenti bufYUV – Ulazni bafer Y’UV podataka.
width – Širina slike.
height – Visina slike.
Izlazni
argumenti
bufRGB – Izlazni bafer za RGB podatke.
Povratne
vrednosti
-
Funkcija za konverziju slike iz Y’UV u RGB prostor boja
Tabela 10 – Funkcija bufYUV2bufRGB()
unsigned long changeBmpDim(unsigned char *header)
Ulazni argumenti header – Memorijski bafer koji sadrži BMP zaglavlje.
Izlazni
argumenti
-
Povratne
vrednosti
-
Funkcija za zamenu dimenzija visine i širine u zaglavlju BMP slike
Tabela 11 – Funkcija changeBmpDim()
Programsko rešenje
19
4.4 Modul za korekciju osvetljenja
void brightness_correction(unsigned char *inBuf, unsigned char *outBuf, unsigned long width, unsigned long height, int level)
Ulazni argumenti inBuf – Ulazni bafer YUV podataka.
width – Širina slike.
height – Visina slike.
level – Nivo korekcije osvetljenja.
Izlazni
argumenti
outBuf – Izlazni bafer koji sadrži BMP sliku čije je osvetljenje
korigovano.
Povratne
vrednosti
-
Funkcija za korekciju osvetljenja slike
Tabela 12 – Funkcija brightness_correction()
4.5 Modul za korekciju kontrasta
void contrast_correction(unsigned char *inBuf, unsigned char *outBuf, unsigned long width, unsigned long height, int level)
Ulazni argumenti inBuf – Ulazni bafer YUV podataka.
width – Širina slike.
height – Visina slike.
level – Nivo korekcije kontrasta.
Izlazni
argumenti
outBuf – Izlazni bafer koji sadrži BMP sliku čiji je kontrast
korigovan.
Povratne
vrednosti
-
Funkcija za korekciju kontrasta slike
Tabela 13 – Funkcija contrast_correction()
Programsko rešenje
20
4.6 Modul za rotiranje slike
void image_rotate(unsigned char *inBuf, unsigned char *outBuf, unsigned long width, unsigned long height, int angle)
Ulazni argumenti inBuf – Ulazni bafer YUV podataka.
width – Širina slike.
height – Visina slike.
angle – Ugao rotacije slike.
Izlazni
argumenti
outBuf – Izlazni bafer koji sadrži BMP sliku koja je rotirana za
ugao koji je naveden u parametru angle.
Povratne
vrednosti
-
Funkcija za rotaciju slike
Tabela 14 – Funkcija image_rotate()
void ninety_rotation(unsigned char *inBuf, unsigned char *outBuf, unsigned long width, unsigned long height)
Ulazni argumenti inBuf – Ulazni bafer YUV podataka.
width – Širina slike.
height – Visina slike.
Izlazni
argumenti
outBuf – Izlazni bafer koji sadrži BMP sliku koja je rotirana za
90 stepeni.
Povratne
vrednosti
-
Funkcija za rotaciju slike za 90 stepeni
Tabela 15 – Funkcija ninety_rotation()
Rezultati
21
5. Rezultati
U ovom poglavlju su prikazani dobijeni rezultati segmentacije slike pomoću već
opisanih koraka.
Slika 11 – Rezultat konverzije iz RGB u Y’UV prostor boja. Slika desno je slika u Y’UV prostoru boja.
Slika 12 – Slika desno prikazuje rezultat korekcije osvetljenja nivoom 50.
Rezultati
22
Slika 13 – Slika desno prikazuje rezultat korekcije kontrasta nivoom 3.5.
Slika 14 – Skroz levo je polazna slika, dok su ostale slike rotacije za 90, 180 i 270 stepeni, redom.
Zaključak
23
6. Zaključak
Ono što je najbitnije napomenuti, jeste ograničenje u pogledu dimenzija slike i
poboljšanja rešenja u tom pogledu. Kako je već napomenuto, ulazna slika mora da bude
isključivo dimenzija koje su deljive sa 4 ukoliko je korisnik izabrao mod 3 – rotiranje slike.
Ogromno poboljšanje bismo dobili kada bi ulazna slika, za taj mod, mogla da bude bilo kojih
dimenzija. Time bismo dobili na opštosti rešenja. Međutim, to zahteva dodatne module koji
se bave pedingom i izmenom parametara (nova veličina slike u bajtovima sa zaglavljem i bez
njega) u zaglavlju rotirane BMP slike. Uvođenjem modula za peding bi se eliminisala i mala
greška koja nastaje kod modova 1 i 2.
Pošto su korekcija osvetljenja i kontrasta standardne rutine koje su isključivo
definisane na već pomenut način, nije moguće povećati efikasnost. Sa druge strane, pošto je
potrebno obraditi svaki piksel posebno, ne može se ni u tom pogledu uraditi neka ušteda.
Ušteda, kod pristupa rotiranju koji je u ovom rešenju primenjen, mogla bi da se dobije
tako što bi se napravila dva zasebna modula za prebacivanje slike: 1.) modul za prebacivanje
1D velikog niza u 2D matricu i 2.) modul za prebacivanje iz 2D matrice u 1D veliki niz, jer se
kod ove verzije rešenja vrši redundantno prebacivanje iz jednog niza u drugi kada su u
pitanju rotacije za 180 i 270 stepeni. Treba napomenuti da se u literaturi pominje i pristup
koji vrši rotiranje „u mestu“, odnosno ne zahteva dodatno alociranje memorije u kojoj se
smešta rotirana slika. Stoga, moguće je, u tom smislu, dodatno poboljšati rešenje.
Što se modularnosti i preglednosti main.cpp modula tiče, poboljšanje u tom smislu bi
se moglo postići ukoliko bismo napravili modul koji radi proveru ispravnosti učitane slike (u
rešenju – mIn).
Literatura
24
7. Literatura
1. V. Crnojević, Skripte i prezentacije sa predavanja iz Digitalne obrade slike, FTN, 2012.
2. http://www.geeksforgeeks.org/turn-an-image-by-90-degree/
3. R. Gonzalez and R. Woods, Digital Image Processing, 3rd edition, Prentice Hall, 2008.