10.6.SIVINSKI SPEKTER DIFUZIJE NAPAK

ABSTRACT

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



Avtor : Primoz Nelec, e-mail:
primoz.nelec@kss-loka.si
Mentor : mag. Leon Kos dipl.ing.str
Datum : 31.8.1999