Häviöllinen pakkaus hävittää osan tiedosta, mutta pyrkii mahdollisimman aidonnäköiseen lopputulokseen. Esim. tv-kuvassa pienet virheet, eivät haittaa, eikä nykyisillä pakkausmenetelmillä ihmissilmä havaitse niitä kovin helposti staattisista kuvistakaan.
Pakkausmenetelmät luokitellaan yleensä algoritmin nopeuden ja pakkaustiheyden mukaan. Pakkaustiheyden testaamista varten on erillinen tiedostokirjasto [1]. Nopeus on kaikilla esitetyille algoritmeilla ainakin kohtuullinen. Tähän on otettu mukaan yleisesti hyväksytyt ja käytössä olevat algoritmit.
Esimerkkinä, Eliaksen gamma-koodi [2].
Gamma koodi Luku Bittejä
--------------------------
1
1 1
01x
2-3 3
001xx
4-7 5
0001xxx 8-15
7
00001xxxx 16-31 9
000001xxxxx 32-63 11
0000001xxxxxx 64-127 13
Eli suurimman esiintymistaajuuden omaava luku koodataan vain yhdellä
bitillä (1). Ja kaksi seuraavaksi käytetyintä kahdella bitillä
(01x), jne.
Muita kiinteän koodin koodaustapoja ovat esim. Eliaksen delta-koodi,
fibonancci-koodi, ym. Kiinnostuneet voivat lukeat lisää
viitteestä [2].
Hyvinä puolina kiinteän pituisissa koodeissa on koodien helppo
muodostaminen, ja algoritmin yksinkertaisuus. Huonona puolena mainittakoon,
etteivät koodit suoraan riipu frekvensseistä, vaan olettavat,
että pienempiä lukuja on enemmän.
"BAAAAAADBBABBBBBAAADABCD"
Frekvenssit: A (11) B (9) D (3)
C (1)
Yhdistys 1
Yhdistys 2 Yhdistys
3
'A' 0.458
'A' 0.458 C2
0.542 0\ C3
'B' 0.375
'B' 0.375 0\ C2 'A' 0.458 1/
'D' 0.125 0\ C1
C1 0.167 1/
'C' 0.042 1/
Koko puu näyttää nyt tältä:
C3
0 / \ 1
/ 'A'
C2
0 /
\ 1
'B'
\
C1
0 / \ 1
'D' 'C'
Lähtemällä etenemään puuta juuresta, saadan
merkin bitti-koodi (esim. 0 on vasen haara ja 1 oikea).
Ja esimerkkikoodit ovat luettuna:
'A' = 1 'B' = 00 'C' = 011 'D' = 010
Muita algoritmeja ovat esim. aritmeettinen koodaus.
Yksinkertaisin esimerkki on RLE, run length encoding, jota käytetään mm. joissain Micrsoftin kuvatiedostoissa. Se pakkaa dataa yksinkertaisesti siten, että toistuvat merkit koodataan merkillä ja toiston pituudella, esim. aaaabbb -> 4a 3b.
Toinen kiintoisa esimerkki on Burrows-Wheeler transformaatio. Merkkijonosta luodaan n * n -taulukko, jossa n on merkkijonon pituus. Tämän taulukon vaakarivit järjestetään ensimmäisen kirjaimen mukaan, ja taulukosta tallennetaan viimeinen pystyrivi, ja alkuindeksi. Tämä itseasiassa kasvattaa tiedoston kokoa. Ideani koko algoritmissa onkin, että sen jälkeen ulostulo ohjataan jollekin muulle pakkajaalle - sisältöä ei siis ole pakattu, vaan se on muutettu luonteeltaan paremmin pakkautuvaksi. Lähteen [5] mukaan BW-RLE/aritmeettinen -yhdistelmä pakkaa paremmin kuin PKZip [4].
Muita mainitsemisen arvoisia esimerkkejä ovat mm. LZ-78 ja LZW.
Ensin väriavaruus muunnetaan YUV-muotoon. Tässä muodossa meillä on yksi komponentti kirkkautta varten (kuvittele vastaavaa harmaasävy-arvoa), ja kaksi muuta täsmentävät värin. Tärkein ihmissilmälle on kirkkauskomponentti, joten kahden muun arvosta voidaan tinkiä.
Toiseksi kuva jaetaan 8x8 matriiseihin. UV-komponentit pienennetään 4x4-kokoiseen, yksinkertaisesti laskemalla keskiarvo. Ero ei ole suoraan havaittavissa, koska Y-komponenttia ei kutisteta, ja silmä reagoi kirkkauden muutoksin radikaalimmin, kuin värimuutoksiin.
Sitten kuvalle tehdään DCT (discrete cosine transform), jolloin saadaan jokaisen tilataajuuden spektraalikomponentit. Nämä komponentit ovat voimakkaita origon läheisyydessä, mutta pienenevät mentäessä kauemmaksi. Itse asiassa, ne ovat suurimmaksi osaksi nollaa kaukauna origosta.
Seuraavaksi nämä komponentit pistetään taulukkoon,
josta vielä karsitaan heikoimmat taajuudet pois jakamalla
taulukko seuraavalla taulukolla:
| 1 | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
| 1 | 1 | 2 | 4 | 8 | 16 | 32 | 64 |
| 2 | 2 | 2 | 4 | 8 | 16 | 32 | 64 |
| 4 | 4 | 4 | 4 | 8 | 16 | 32 | 64 |
| 8 | 8 | 8 | 8 | 8 | 16 | 32 | 64 |
| 16 | 16 | 16 | 16 | 16 | 16 | 32 | 64 |
| 32 | 32 | 32 | 32 | 32 | 32 | 32 | 64 |
| 64 | 64 | 64 | 64 | 64 | 64 | 64 | 64 |
Tässä kadotetaan taas tietoa, mutta pienimpien taajuuksien
poisto vaikuttaa vain hyvin vähän. Yleensä jatkuvissa kuvissa
kaikki tieto on ensimmäisissä spektraalikomponenteissa. Jos kuva
taas on epätasainen (esim. tämä teksti ei ole jatkuvaa,
vaan rosoista), voi pieniä häiriöitä ilmestyä
kuvan sisälle.
Tämän jälkeen taulukko käydään läpi
allaolevalla järjestyksellä.
| 1 | 2 | 6 | 7 | 15 | 16 | 28 | 29 |
| 3 | 5 | 8 | 14 | 17 | 27 | 30 | 43 |
| 4 | 9 | 13 | 18 | 26 | 31 | 42 | 44 |
| 10 | 12 | 19 | 25 | 32 | 41 | 45 | 54 |
| 11 | 20 | 24 | 33 | 40 | 46 | 53 | 55 |
| 21 | 23 | 34 | 39 | 47 | 52 | 56 | 61 |
| 22 | 35 | 38 | 48 | 51 | 57 | 60 | 62 |
| 36 | 37 | 49 | 50 | 58 | 59 | 63 | 64 |
Kuten selvästi huomaa, korkeimmat taajuudet käydään
ensin ja lopussa olevat heikot taajuudet viimeiseksi.
Koska loppu on yleensä pelkkää nollaa, sovelletaan jonoon
RLE-algoritmia.
Lopuksi saadut tiedot ajetaan vielä huffman-algoritmin läpi.
MPEG-koodaus jakautuu kolmeen osaan, videoon, audioon ja systeemiin, joista video ja audio koodataan erikseen. Systeemi tarjoaa sitten 90 kHz kellon videon ja audion synkronointiin..
Kuvat koodataan siis kuten JPEG-standardissa, mutta toistuvat matriisit, ts. matriisit, jotka eivät paljon eroa edellisestä tai tulevasta framesta, koodataan vain laittamalla viite edelliseen/seuraavaan frameen. Kirkkaus on 16*16 matriisi ja värikomponentit taas puolet kummassakin suunnassa, eli 8*8.
MPEG-1 määrittelee neljä perustilaa [6]:
MPEG-2 poistaa tilan 4, lisää lisää DCT:n
tarkkuutta 10x10-matriisiin, ja lisää eri tiloja kuvan laatuun.
Mukana on pari perustilaa ja HDTV-tilat, jotka ovat huomattavasti
tarkkuudeltaan muita parempia.
'
Esim. digitaalinen TV pohjautuu MPEG-2 -standardiin [7].
Berkeley Multimedia Research Center, MPEG2 FAQ 1999
<http://bmrc.berkeley.edu/frame/research/mpeg/mpeg2faq.html>
Burrows M. & Wheeler D.J, A Block-sorting Lossless Data Compression
Algorithm, SRC Research Report 10.5.1994
<ftp://ftp.digital.com/pub/DEC/SRC/research-reports/SRC-124.pdf>
comp.compression FAQ, 1999
<http://www.faqs.org/faqs/compression-faq/part2/>
Nelson Mark, Arithmetic Coding + Statistical Modeling = Data Compression,
Part 1 - Arithmetic Coding, Dr.Dobb's Journal helmikuu 1991
<http://www.dogma.net/markn/articles/arith/part1.htm>
Tsutsui Kyoya et al., ATRAC: Adaptive Transform Acoustic Coding for
MiniDisc, the 93rd Audio Engineering Society Convention in San Fransisco,
1992 October 1-4
<http://www.hip.atr.co.jp/~eaw/minidisc/aes_atrac.html>
Ziring Neal, TFTP Compression and Security Options, NSA INTERNET DRAFT
26.5.1999
<http://search.ietf.org/internet-drafts/draft-ziring-nsa-tftp-security-01.txt>
Unisys, License Information on GIF and Other LZW-based Technologies
<http://corp2.unisys.com/LeadStory/lzwfaq.html>
RealNetworks, The Home of Streaming Media
<http://www.real.com>
nullsoft, nullsoft SHOUTcast
<http://www.shoutcast.com>