Virvtoonimine

**Virvtoonimine** (inglise *dither*) on tahtlik müra lisamine signaali, et muuta kvantimisviga vähem märgatavaks. Näiteks kasutatakse seda, et vältida suurte ühtlast värvi mustrite teket piltides. Virvtoonimist kasutatakse tihti digitaalsete heli- ja pildiandmete töötlemisel.

## Audio
Audio töötlemise käigus kasutatakse virvtoonimist, et lisada natuke müra, mis vähendaks kvantimisvigadest tulenevat moonutust. See on oluline osa analoog helisignaali digitaalseks muutmisel ning võib oluliselt heli kvaliteeti parandada, muutes kvantimisvigadest tulenevaid efekte vähem kuuldavaks. Virvtoonimisest on kasu ka helisignaali bitisügavuse vähendamisel.

## Pildid

Virvtoonimist kasutatakse näiteks halltoonilise pildi mustvalgeks muutmisel. Selle tulemusena kujutatakse eri tumedusega osad pildis eri tihedusega mustade pikslitega nii, et mingi piirkonna pikslite keskmine väärtus oleks umbes sama algse halli tooniga.

Virvtoonimist kasutatakse pilditöötluses, et luua illusioon suuremast värvisügavusest olukordades, kus on pildil piiratud arv värve. Varem oli virvtoonimine sageli vajalik, kuna vanemad arvutid olid mitmel viisil piiratud. Vanematel elektronkiiretoru kasutavatel ekraanidel oli virvtoonimine vähem nähtav. Tänapäeval on peaaegu kõik värvipiirangud meie pilditöötluses ise kehtestatud ja tänapäevastel ekraanidel kuvatav moonutamine ei anna sama efekti. 

## Algoritmid
Mõned virvtoonimise algoritmid:
* **Keskmine virvtoonimine** (inglise *average dithering*) on algoritm, kus iga piksli väärtust võrreldakse mingi kindla lävendiga. See on lihtsaim virvtoonimise algoritm, aga sellega kaasneb suur detailide ja kontuuride kadu.

* **Suvaline virvtoonimine** (inglise *random dithering*) genereerib iga piksli jaoks juhusliku arvu. Kui see on suurem kui pildi väärtus antud punktis, tehakse piksel valgeks ja muudel juhtudel mustaks. See tekitab suure müraga pildi, aga kuigi toodetud kujutis on väga ebatäpne ja mürarikas, ei sisalda see moonutusi, mis on digitaalsest signaalitöötlusest tulenenud.

* **Korrapärane virvtoonimine** (inglise *ordered dithering*) kasutab maatriksi väärtusi pildi iga vastava piksli jaoks lävendina, et määrata selle piksli väärtus. Kui piksel on madalam kui väärtus maatriksil, siis värvitakse piksel mustaks, vastasel juhul valgeks. Näiteks saab kasutada maatriksit \begin{bmatrix} 1 & 3 \\ 4 & 2 \end{bmatrix}, et käia läbi terve pilt ülevalt alla ja vasakult paremale ning võrrelda maatriksil asuvat numbrit ja sellel kohal olevat piksli väärtust, mis on normaliseeritud vahemikku 0 kuni 9. Erinevad maatriksid võivad tekitada pildis erinevaid virvtoonimismustreid.
* **Floydi-Steinbergi virvtoonimine** põhineb vigade hajutamisel. Vea hajutamisel iga pildi piksli jaoks leitakse esmalt lähim saadaolev värv. Seejärel arvutatakse erinevus pildil oleva väärtuse ja lähima värvi vahel, et saada viga. Leitud viga jagatakse kõrval olevate pikslite vahel järgmiselt:\begin{bmatrix} & * &\tfrac{7}{16}\\ \tfrac{3}{16} & \tfrac{5}{16} &\tfrac{1}{16}\end{bmatrix} Vaadeldavaks piksliks on ∗. Kuna vaadeldavast pikslist üleval ja vasakul olevaid ei mõjutata, saab algoritmi rakendada üle pildi ülevalt alla ja vasakult paremale liikudes.
* **Jarvis, Judice & Ninke virvtoonimine** on meetod, mis annab tihti tõhusaid tulemusi suhteliselt väheste korduvate mustrite tekketa. See kipub esile tooma jämedamaid mustreid kui Floydi-Steinbergi virvtoonimise algoritm. Antud algoritm on aeglasem kui Floydi-Steinbergi algoritm, sest kasutatakse suuremat maatriksit ja viga jagatakse 4 piksli asemel 12 lähedase piksli vahel ära järgmiselt: \begin{bmatrix} &  & * & \tfrac{7}{48} & \tfrac{5}{48} \\ \tfrac{3}{48} & \tfrac{5}{48} & \tfrac{7}{48} & \tfrac{5}{48} & \tfrac{3}{48} \\ \tfrac{1}{48} & \tfrac{3}{48} & \tfrac{5}{48} & \tfrac{3}{48} & \tfrac{1}{48} \end{bmatrix}Vaadeldavaks piksliks on ∗ ja algoritmi rakendatakse üle pildi ülevalt alla ja vasakult paremale liikudes.

## Viited