15.avgust, 1999
Posebne učinke dosežemo s pomočjo različnih filtrov. Za navadno zameglitev slike se uporablja preprost filter, s katerim zmanjšamo šum v tistih delih slike, kjer prihaja do ostrih barvnih sprememb. Ostri barvni prehodi se zgladijo s povprečenjem barv točk.
V nadaljevanju predstavljen program Tblur, ki si ga lahko presnamete na svoj
računalnik, zamegli rastersko sivinsko ali barvno sliko formata
PGM (Portable GreyMap) in PPM (Portable PixelMap). Ta dva grafična
formata, napisana v ASCII obliki, sta zelo primerna za obdelavo bitnih
slik.
Izgled datoteke predstavljene rasterske slike zapisane v formatu PGM je:
P2
# Created by Paint Shop Pro 5
4 4
255
200 123 45 234
0 167 255 67
234 156 23 189
98 111 178 134
Prve štiri vrstice datoteke predstavljajo glavo grafičnega formata
PGM. Znak P2 v prvi vrstici je potreben za razpoznavo tipa datoteke. Namesto
znaka P2 se lahko pojavi tudi znak P5. Znak P2 pove, da gre za ASCII obliko
zapisa, medtem ko bi znak P5 predstavljal binarno obliko.V drugi vrstici
je napisan komentar, pred katerim mora biti obvezno znak #, da ga prevajalnik
preprosto preskoči. V tretji vrstici sta podatka o širini in višini
slike. Prvo število pove, da je slika 4 točke široka, drugo število
pa pove, da je slika 4 točke visoka. V naslednji vrstici je število
255, ki predstavlja največjo svetlost barve in je v mejah od 0 do
255. Vrednost 0 pomeni, da je barva izklopljena, vrednost 255 pa pomeni,
da je barva maksimalno prisotna.
V naslednjih vrsticah so podatki o barvi posamezne točke oziroma
pixla. Ker je format PGM namenjen za sivinske slike, pripada vsaki točki
samo eno število. To število ima vrednosti od 0 do 255, kjer ima črna
barva vrednost 0, bela pa 255. Vmesne vrednosti pa predstavljajo sivinske
barve pri prehodu iz črne v belo.Rastrska slika se začne
sestavljati v levem zgornjem kotu in se zapolnjuje tako, kot si sledijo
števila.
Izgled datoteke predstavljene rasterske slike zapisane v formatu PPM je:
P3
# Created by Paint Shop Pro 5
4 4
255
0 0 0 250 134 40 255 255 255 120 145 102
76 126 167 215 55 25 28 146 164 127 56 100
180 182 202 45 65 69 162 185 135 29 56 250
150 99 32 174 156 123 47 11 56 210 103 147
Prve štiri vrstice datoteke predstavljajo glavo grafičnega formata
PPM. Znak P3 v prvi vrstici je potreben za razpoznavo tipa datoteke. Namesto
znaka P3 se lahko pojavi tudi znak P6. Znak P3 pove, da gre za ASCII obliko
zapisa, medtem ko bi znak P6 predstavljal binarno obliko.V drugi vrstici
je napisan komentar, pred katerim mora biti obvezno znak #, da ga prevajalnik
preprosto preskoči. Tako kot pri grafičnem formatu PGM sta
v tretji vrstici podatka o širini in višini slike. Prvo število pove,
da je slika 4 točke široka, drugo število pa pove, da je slika 4
točke visoka. V naslednji vrstici je število 255, ki predstavlja
največjo svetlost barve in je v mejah od 0 do 255. Vrednost 0 pomeni,
da je barva izklopljena, vrednost 255 pa pomeni, da je barva maksimalno
prisotna.
Tudi pri formatu PPM so v naslednjih vrsticah zapisani podatki o barvi
posamezne točke oziroma pixla. Ker je format PPM namenjen za barvne
slike, pripadajo vsaki točki tri števila, in sicer za rdečo,
zeleno in modro barvo. Tako nam kombinacija števil (0 0 0) predstavlja
črno barvo, kombinacija (255 255 255) pa belo barvo. Rdečo
barvo nato dobimo s kombinacijo (255 0 0), modro (0 0 255) in zeleno (0
255 0). Rastrska slika se začne sestavljati v levem zgornjem kotu
in se zapolnjuje tako, kot si sledijo števila.
Slika 3 prikazuje operacijo konvolucije v slikovni obliki. Bistvo te operacije je konvolucijska maska ali jedro, prikazana s črko M na tej sliki. Tej konvolucijski maski lahko rečemo tudi filter, ki ima ustrezne elemente označene z m(i,j) in svojo dimenzijo m×n. Kot je prikazano na sliki, je vsak element v filtru pomnožen z ustrezno vrednostjo točke vhodne slike P. Rezultate množenja seštejemo in nato delimo z vsoto elementov filtra. Rezultat deljenja je točka oziroma pixel c(x,y) v obdelani sliki C.
Za zgornji primer je izpeljana enačba konvolucije sledeče oblike:
Operacija konvolucije zahteva veliko računsko moč. Za
preračun ene točke je potrebno izvesti m×n množenj,
m×n-1 seštevanj in eno deljenje. Za ivedbo konvolucije s filtrom
3×3 na barvni sliki 1024×1024 točk je tako potrebnih
27 milijonov množenj, 24 milijonov seštevanj in 3 milijone deljenj. Če
pa velikost filtra povečamo na 5×5 ali 8×8 pri še večjih
slikah, potem postanejo številke astronomsko visoke.
Slika 5: Odziv filtra za zameglitev
Na sliki 5 je prikazan odziv omenjenega filtra, ki prepušča nizke
frekvence, visokih pa ne. Z zmanjšanjem visokih frekvenc, ki definirajo
ostre robove, pravimo, da slika postane zamegljena.
Filtri za zameglitev so lahko tudi večjih dimenzij, kar povzroči
večjo zameglitev slike. V mnogih grafičnih programih so na
voljo tudi posebni filtri, ki ustvarijo videz gibanja (Motion blur) ali
pa filtri za krožno zameglitev slike. Pri slednjem je učinek podoben,
kot bi med fotografiranjem zavrteli fotoaparat ali spreminjali goriščno
razdaljo objektiva. Največ pa se uporablja filter, katerega jakost
določimo sami. Pri tem filtru dosežemo željen učinek na sliki
s povprečenjem barv, ki se prilegajo Gaussovi krivulji (Gaussian
blur).
Program ob zagonu od uporabnika zahteva, da izbere zameglitev sivinske ali barvne slike. Po izbiri je potrebno vpisati ime vhodne datoteke grafičnega formata PGM (sivinska slika) ali PPM (barvna slika). Program na začetku prebere glavo datoteke in preveri pravilnost formata, nato pa prebere podatke o točkah. Branje poljubne datoteke omenjenih dveh formatov rešimo na naslednji način:
130 WRITE (*,12) 'Napisi ime vhodne datoteke tipa *.pgm'
12 FORMAT (/A41/)
READ(*,*) VFILE
OPEN(1,FILE=VFILE,STATUS='OLD')
READ(1,*) TD, KOM
IF ((TD=='P2').AND.(KOM=='#')) THEN
READ (1,*) W,H,S
ELSE
WRITE(*,*) 'Napisali ste nepravilen tip datoteke!'
GOTO 130
END IF
READ(1,*,END=140) (vt(k),k=1,n)
140 CONTINUE
CLOSE (1)
Za nadaljno računanje s točkami je ugodno prebrane točke
zapisati v obliki matrike. V glavi datoteke sta zapisani višina (H) in
širina (W) slike, ki nam omogočita enostaven zapis tabele. Pri barvni
sliki je matrika večja, saj vsaki točki pripadajo tri števila:
- sivinska slika
DO j=1,W
DO i=1,H
VTM(i,j)=VT(j+(i-1)*W)
END DO
END DO
- barvna slika
DO j=1,(3*W)
DO i=1,H
VTM(i,j)=VT(j+(i-1)*(3*W))
END DO
END DO
Dobljena matrika 5×5 za format PGM izgleda:
VTM(i-2,j-2) | VTM(i-2,j-1) | VTM(i-2,j) | VTM(i-2,j+1) | VTM(i-2,j+2) |
VTM(i-1,j-2) | VTM(i-1,j-1) | VTM(i-1,j) | VTM(i-1,j+1) | VTM(i-1,j+2) |
VTM(i,j-2) | VTM(i,j-1) | VTM(i,j) | VTM(i,j+1) | VTM(i,j+2) |
VTM(i+1,j-2) | VTM(i+1,j-1) | VTM(i+1,j) | VTM(i+1,j+1) | VTM(i+1,j+2) |
VTM(i+2,j-2) | VTM(i+2,j-1) | VTM(i+2,j) | VTM(i+2,j+1) | VTM(i+2,j+2) |
Pri barvnih slikah pa je matrika za eno barvo nekoliko drugačna:
VTM(i-2,j-6) | VTM(i-2,j-3) | VTM(i-2,j) | VTM(i-2,j+3) | VTM(i-2,j+6) |
VTM(i-1,j-6) | VTM(i-1,j-3) | VTM(i-1,j) | VTM(i-1,j+3) | VTM(i-1,j+6) |
VTM(i,j-6) | VTM(i,j-3) | VTM(i,j) | VTM(i,j+3) | VTM(i,j+6) |
VTM(i+1,j-6) | VTM(i+1,j-3) | VTM(i+1,j) | VTM(i+1,j+3) | VTM(i+1,j+6) |
VTM(i+2,j-6) | VTM(i+2,j-3) | VTM(i+2,j) | VTM(i+2,j+3) | VTM(i+2,j+6) |
Naslednji korak je izvedba operacije konvolucije s katero dosežemo učinek zameglitve. S programom lahko zameglimo izbrano sliko na tri različne načine. Pod izbiro Blur uporabimo enostaven filter velikosti 3×3, kjer imajo vsi elementi filtra vrednost 1. Pri izbiri Blur more je učinek zameglitve opaznejši, saj uporabimo filter velikosti 5×5, kjer imajo vsi elementi vrednost 1. V praksi se največ uporablja Gaussian blur, katerega jakost običajno določimo sami. V programu Tblur pa je uporabljen filter velikosti 5×5, kateremu priredimo vrednosti, ki se prilegajo Gaussovi krivulji. V nadaljevanju so prikazani uporabljeni filtri:
Filter 3×3:
Filter 5×5:
Filter 5×5 (Gauss):
Algoritem povprečenja sosednih točk (konvolucija) za filter
5×5 (Gauss) izdelamo na sledeč način:
- sivinska slika
DO j=1,W
DO i=1,H
IT(i,j)=(VTM(i,j)+0.5*(VTM(i,j+1)+VTM(i,j-1)+VTM(i-1,j)+VTM(i+1,j))+
+0.375*(VTM(i-1,j-1)+VTM(i+1,j-1)+VTM(i-1,j+1)+VTM(i+1,j+1))+
+0.25*(VTM(i-2,j-2)+VTM(i-2,j+2)+VTM(i+2,j-2)+VTM(i+2,j+2))+
+0.2*(VTM(i-2,j)+VTM(i,j+2)+VTM(i,j-2)+VTM(i+2,j))+
+0.175*(VTM(i-2,j-1)+VTM(i-1,j-2)+VTM(i-2,j+1)+VTM(i-1,j+2)+
+VTM(i+1,j-2)+VTM(i+2,j-1)+VTM(i+2,j+1)+VTM(i+1,j+2)))/7.8
END DO
END DO
- barvna slika
! povprečenje rdeče barve
DO j=1,3*W,3
DO i=1,H
IT(i,j)=(VTM(i,j)+0.5*(VTM(i,j+3)+VTM(i,j-3)+VTM(i-1,j)+VTM(i+1,j))+
+0.375*(VTM(i-1,j-3)+VTM(i+1,j-3)+VTM(i-1,j+3)+VTM(i+1,j+3))+
+0.175*(VTM(i-2,j-6)+VTM(i-2,j+6)+VTM(i+2,j-6)+VTM(i+2,j+6))+
+0.25*(VTM(i-2,j)+VTM(i,j+6)+VTM(i,j-6)+VTM(i+2,j))+
+0.2*(VTM(i-2,j-3)+VTM(i-1,j-6)+VTM(i-2,j+3)+VTM(i-1,j+6)+
+VTM(i+1,j-6)+VTM(i+2,j-3)+VTM(i+2,j+3)+VTM(i+1,j+6)))/7.8
END DO
END DO
! povprečenje zelene barve
DO j=2,3*W,3
DO i=1,H
IT(i,j)=(VTM(i,j)+0.5*(VTM(i,j+3)+VTM(i,j-3)+VTM(i-1,j)+VTM(i+1,j))+
+0.375*(VTM(i-1,j-3)+VTM(i+1,j-3)+VTM(i-1,j+3)+VTM(i+1,j+3))+
+0.175*(VTM(i-2,j-6)+VTM(i-2,j+6)+VTM(i+2,j-6)+VTM(i+2,j+6))+
+0.25*(VTM(i-2,j)+VTM(i,j+6)+VTM(i,j-6)+VTM(i+2,j))+
+0.2*(VTM(i-2,j-3)+VTM(i-1,j-6)+VTM(i-2,j+3)+VTM(i-1,j+6)+
+VTM(i+1,j-6)+VTM(i+2,j-3)+VTM(i+2,j+3)+VTM(i+1,j+6)))/7.8
END DO
END DO
! povprečenje modre barve
DO j=3,3*W,3
DO i=1,H
IT(i,j)=(VTM(i,j)+0.5*(VTM(i,j+3)+VTM(i,j-3)+VTM(i-1,j)+VTM(i+1,j))+
+0.375*(VTM(i-1,j-3)+VTM(i+1,j-3)+VTM(i-1,j+3)+VTM(i+1,j+3))+
+0.175*(VTM(i-2,j-6)+VTM(i-2,j+6)+VTM(i+2,j-6)+VTM(i+2,j+6))+
+0.25*(VTM(i-2,j)+VTM(i,j+6)+VTM(i,j-6)+VTM(i+2,j))+
+0.2*(VTM(i-2,j-3)+VTM(i-1,j-6)+VTM(i-2,j+3)+VTM(i-1,j+6)+
+VTM(i+1,j-6)+VTM(i+2,j-3)+VTM(i+2,j+3)+VTM(i+1,j+6)))/7.8
END DO
END DO
Na podoben način zapišemo še v primeru ostalih dveh filtrov. Na koncu mora uporabnik zapisati še ime izhodne datoteke in podatki se v datoteko nato zapišejo:
WRITE(*,*) 'Napisi ime izhodne datoteke tipa *.ppm:'
READ(*,*) IFILE
OPEN(2,FILE=IFILE,STATUS='NEW')
WRITE(2,13) TD,'# Created by Tblur',W,H,S
13 FORMAT(A2/A18/I5,I4/I3)
DO i=1,H
WRITE(2,14) (IT(i,j),j=1,W)
END DO
14 FORMAT (2000(I3,1X))
CLOSE(2)
Če želite lahko program Tblur presnamete na svoj računalnik:
tblur.exe
S programom Tblur lahko sivinsko ali barvno sliko zameglimo na tri načine, kot je prikazano na naslednjih slikah:
Slika 7: Zamegljena slika (Blur)
Slika 8: Zamegljena slika (Gaussian blur)
Slika 9: Zamegljena slika (More blur)
Učinek zgladitve ostrih barvnih prehodov s povprečenjem
barv točk je najbolj opazen pri črnobeli sliki, kjer sta prisotni
le črna in bela barva. Po zameglitvi se na prehodu iz črne
na belo barvo pojavijo tudi sivi odtenki:
Slika 15: Zamegljena slika (More blur)
Slika 11: Zamegljena slika (Blur)
Slika 12: Zamegljena slika (Gaussian blur)
Slika 13: Zamegljena slika (More blur)
Kot primer lahko navedemo filter, ki zamegli sliko v izbrani smeri (Motion blur). Učinek je podoben, kot bi s fotoaparatom slikali predmet v gibanju. Na spodnji sliki je zanimiva predvsem vodoravna smer, to je smer letenja letala. Da dosežemo željeni učinek, moramo v filtru uteži postaviti v izbrani smeri.
Z ustreznim filtrom ustvarimo učinek gibanja:
Slika 16: Zamegljena slika (Motion blur)
Zelo zanimiva je zameglitev slike s poudarkom robov. Učinek dosežemo s
filtrom, ki ima v središču matrike negativno vrednost, vrednosti v sosednijh
celicah pa so pozitivne in simetrično razporejene:
Slika 18: Zameglitev s poudarkom robov