Following javascript program shows grey scale ramp
transformed by ERROR DIFFUSION method and FLOYD and STEINBERG
algorithm. Computers make grey specters from 256 colors: number
0 means black and 255 means white. With error diffusion method
we can show grey specter with only two colors: black(0) and white(255).
KAZALO:
1.Definicija naloge
2.Teoreticne osnove
3.Opis programiranja in program
4.Komentar
5.Viri in literatura
1.DEFINICIJA NALOGE
V jeziku javascript s povezavo na java rastrski applet izvedite difuzijo napak,
kot je to ze bilo izvedeno v 4.16.
2.TEORETICNE OSNOVE
Eden od nacinov zapisa racunalniske slike je s pomocjo posameznih tock - pikslov. Barvo piksla definiramo s pomocjo treh osnovnih barv: rdece, zelene in modre. Za vsako barvo imamo na voljo 256 odtenkov. S kombinacijo teh odtenkov lahko na racunalniku prikazemo piksle z 16.5 milijona razlicnih barv. Za prikaz sivinskega spektra imamo na voljo 256 odtenkov; dobimo jih v primeru, ko imajo osnovne barve isto vrednost odtenka. Tako crno popišemo s stevilkami (0 0 0), belo pa z (255 255 255).
Metoda difuzije napake (error diffusion) nam omogoca izdelavo sivinskega
spektra ter
s tem tudi slik s samo dvema barvama:z belo in crno. Z metodo preverimo
vsak piksel v sliki in ga zaokrozimo na crno (0) ali belo (255) vrednost.
Prav tako okoliskim zgornjim ali spodnjim (odvisno v katero smer poteka
transformacija) ter desnemu pikslu
pristejemo razliko trenutnega piksla in zaokrozene vrednosti pomnozene z
Floyd in Stebergovimi koeficienti. Te koeficienti se glasijo:
3/16 | 5/16 | 1/16 |
trenutni piksel | 7/16 |
Za te koeficiente velja pravilo, da njihova vsota ne sme
biti vecja od 1.
3.OPIS PROGRAMIRANJA IN PROGRAM
Osnova programske kode je sledeca:
for (var t=0 ; t<10; t++) //omogoca pisanje v naslednjo vrstico spektra(10 vrstic)//
{
matrika = new Array (300) //definira matriko//
for (var z=20*t ; z < 20*(t+1) ; z++)
{
matrika[z] = new Array (300)
}
for (var v=20*t; v<20*(t+1) ; v++) //omogoca skok za 1 v y smer//
{
for (var l=0; l<200 ; l++) //omogoca skok za 1 v x smer//
{
matrika [v][l]=l*25.5/200+25.5*t //definira sivine posameznega piksla//
}
}
for ( var y = 20*t; y < 20*(t+1); y++) //skok za 1 v y smer//
for ( var x = 0; x < 200; x++) //skok za 1 v x smer//
{
if (matrika [y][x] > 127) {a=255) //zaokrozi vrednost trenutnega piksla na 0 ali 255//
else {a=0}
p.set_pixel(x,y,a,a,a); //izrise piksel x,y s sivinsko vrednostjo a//
p.pixel_update(); //obnovi piksel//
var err = matrika [y][x] - a //izracuna napako//
matrika [y][x+1] = 7/16 * err + matrika [y][x+1] //doloci vrednost naslednjega piksla v x smeri//
if (y<20*(t+1)-1) //pogoj, ki prepreci branje matrik, ki se niso definirane//
{matrika [y+1][x] = 5/16 * err + matrika [y+1][x] //doloci vrednos
matrika [y+1][x-1] = 3/16 * err + matrika [y+1][x-1] matrik nad
matrika [y+1][x+1] = 1/16 * err + matrika [y+1][x+1] } trenutno matriko//
Ker javascript ne omogoca resnega dela z grafiko, sem za delo s
piksli uporabil rastrski applet, ki sem ga dobil na strezniku
LECAD. Za prikaz pikslov na ekranu je potreben se program
Microsoft virtual machine.
Do programa za izris sivinskega spektra transformiranega z metodo
difuzije napake pridete s pritiskom na spodnjo povezavo:
Program
4.KOMENTAR
Sivinski spekter izdelan z metodo difuzije napake nam prikaze
glavno prednost metode; veliko stevilo razlicnih sivinskih odtenkov, brez
ocitne zunanje strukture. Kako izgledajo fotografije transformirane z metodo
difuzije napake si lahko ogledate na strani:
Rastros crnobelih odtenkov
5.VIRI IN LITERATURA
Peter Hribar : Spoznajmo javascript
Robert Ulichney : Digital Halftoning