Andmete pakkimine

Allikas: Vikipeedia

Arvutiteaduses ja informatsiooniteoorias on andmete pakkimine (ka andmete tihendamine, andmetihendus; bitimäära vähendamine; (ingl Data compression)) andmete kodeerimine nii, et väljundandmed on mälu mahult väiksemad kui sisendandmed.[1] Pakkimist on kahte tüüpi: kadudega ja kadudeta. Kadudeta andmetihendus vähendab bitimäära statistilise liiasuse leidmise ja elimineerimisega (ingl Statistic redundancy).[2] Kadudeta pakkimisel informatsiooni ei lähe kaduma. Kadudega tihendamisel leitakse ebavajalik informatsioon ja eemaldatakse see. Kui andmed on pakitud, saab neid andmeid uuesti kasutada ainult siis, kui need kindlad andmed on uuesti lahti pakitud.[3]

Tihendus on vajalik, sest see aitab vähendada ressursikulu (nt andmete säilitamise ruum või edastusmaht). Kuna andmed peavad olema kasutamisel lahti pakitud, on andmete tihendus arvutusvõimsuse suhtes nõudlik. See tähendab seda, et andmete tihendus tähendab muude ressursside eraldamist informatsiooni mahu vähendamise nimel. Seega võib näiteks video vaatamisel vaja minna suhteliselt võimsat riistvara, et arvuti suudaks informatsiooni lahti pakkida piisavalt kiiresti, et seda videot ilma probleemideta (näiteks puhverdamisvajaduseta) vaadata. Veel on võimalus see tihendatud andmehulk täielikult lahti pakkida enne, kui seda kasutama tahetakse hakata, kuid see vajab rohkem ruumi ja aega. Seega, andmete pakkimise süsteemid tähendavad, et andmete mahu vähendamise nimel ohverdatakse muid ressursse nagu aeg, arvutuslik võimsus ja andmete enda moonutus (kasutades kadudega pakkimist).

Statistiline liiasus[muuda | redigeeri lähteteksti]

Statistiline liiasus (ingl Statistic redundancy) tähendab bittide hulka, mida kasutati, et sõnumit edastada miinus see bittide hulk, mis hulk informatsiooni selles sõnumis tegelikult oli. Võib ka defineerida, et see on raisatud ruumi hulk, mida kindla andmehulga edastamisel kasutati. Andmete tihendamine on mittetahetud statistilise liiasuse vähendamine või elimineerimine, samas kui kontrollsummadega on statistilist liiasust võimalik kasvatada. Seda tehakse vahepeal selleks, et leida edastamisvigu, kui näiteks andmeid edastatakse üle suure koormusega võrgu.

Liigid[muuda | redigeeri lähteteksti]

Andmeid on võimalik pakkida kahel moel:

  • kadudeta andmetihendus (ingl lossless compression)
  • kadudega andmetihendus (ingl lossy compression)

Kadudeta andmetihenduse korral saavutatakse lahti pakkimisel esialgsed andmed. Kasutatakse seda varianti tavaliselt siis, kui on oluline, et andmed säiliksid nii nagu nad alguses olid. Näiteks teksti andmete tihendamisel.

Kadudega andmetihenduse korral võib originaaliga võrreldes esineda väikseid erinevusi. Kasutatakse peamiselt graafiliste failide puhul. Tuntuim failivorming, kus seda kasutatakse, on JPEG. Kui andmed on pakitud kasutades mõnda kadudega andmete pakkimise algoritmi, ei ole võimalik taastada sellest kadudeta versiooni.

Kadudeta andmetihendus[muuda | redigeeri lähteteksti]

Kadudeta andmete pakkimise algoritmid tavaliselt kasutavad ära statistilist liiasust, et esitada andmeid sisutihedalt ilma informatsiooni kaotamata. Kadudeta andmetihendus on võimalik, sest enamus päris maailma andmetest sisaldab statistilist liiasust. Näiteks, üks pilt võib endas kanda värvide piirkondi kus värv ei muutu üle suure hulga pikslite. Selle asemel, et kodeerida "punane piksel asukohas 2000, punane piksel asukohas 2001 ...", võib andmed kodeerida "279 punast pikslit asukohtades 2000, 2001, 2002" või "punased pikslid asukohtades 2000–2279". See on algeline näide RLE (ingl Run-length encoding) kohta.

Grammatikapõhine andmetihendus (ingl Grammar-based compression) kujutab endas väga efektiivselt väga korduva teksti pakkimist, näiteks bioloogiliste andmete kollektsioon, internetiarhiivid, suure hulga dokumentide kollektsioon jms. Põhiline tööülesanne grammatikapõhisel pakkimisel on leida kontekstivaba korduv osa dokumendis, kustutada see nendest asukohtadest, luua sellest üks koopia ja lisada selle koopia lõppu iga asukoht, kus see lause dokumendis kordus. Näiteks, üks pikk referaat võib endas sisaldada lauset "tiigrite tüüpiline elukoht on" 200 korda. Selle asemel, et seda 208 baiti iga kord uuesti kirjutada, kustutatakse see igast asukohast, luuakse üks koopia ja selle järgi kirjutatakse selle korduva osa asukoht näiteks nii: ""tiigrite tüüpiline elukoht on" asukohtades 2000, 2015, 2090, .." ja selle asemel, et iga kord kasutada 208 baiti, kasutab see igal korral peale esimese ainult 36 baiti.

Kadudega andmetihendus[muuda | redigeeri lähteteksti]

Kadudega andmetihenduse algoritme kasutatakse ainult olukordades kus täielik perfektsus pole nii tähtis. Kaotades mittevajalikkud detailid andmetehulgast saab säästa mäluruumi. Kadudega tihendamise algoritmid on ehitatud üles erinevate uurimiste põhjal, kuidas inimene tajub võib märkab kindlat informatsiooni. Näiteks, inimese silm on rohkem tundlik väikestele heleduse muutustele kui värvi muutustele. Selle põhjal saab teha väikseid kompromisse informatsiooni säilitamise ja andmehulga vähendamise vahel. Mitmed populaarsed pakkimisvormingud kasutavad ära neid väikseid tajumise erinevusi nagu näiteks JPEG või muud muusika, piltide või video pakkimise algoritmid.

Kadudega piltide pakkimist saab kasutada digitaalkaamerates, et vähendada mälu kasutust piltide poolt, kuid selle nimel ohverdatakse võimalikult minimaalne hulk pildi kvaliteeti. Sarnaselt kasutatakse DVD-del kadudega MPEG-2 video pakkimise vormingut või kodekit, nagu seda kutsutakse heli ja video pakkimisel. Kadudega heli pakkimisel kasutatakse psühhoakustika (ingl psychoacoustics) uuringutega kooskõlas leiutatud meetodeid, et eemaldada mitte-kuuldavaid (või vaevu kuuldavaid) komponente kogu andmete hulgast.[4] Inimese kõnet pakitakse tihti veel spetsiifilisemate tehnikatega. Kõne kodeerimine või hääle kodeerimine on tihti eristatud tavalisest helipakkimisest. Häälepakkimist kasutatakse näiteks internetitelefonide puhul ja helipakkimist kasutatakse näiteks muusika CD-de puhul, kus muusika kirjutatakse CD-plaadile tihendatud vormis ja heliesitusseadmed peavad helifailid lahti pakkima.

Arhiveerimine[muuda | redigeeri lähteteksti]

Kindlasti tuleks eristada andmete pakkimisest teist tüüpi andmemahu vähendamist – arhiveerimist. Kuigi enamik levinumatest pakkimisprogrammidest lubab ka arhiveerimist (Näiteks WinZip, WinRar, WinAce, arj, jne), on need siiski kaks eri asja.

Pakkimine on ainult kindla andmehulga tihendamine, mis lubab vähendada selle kindla andmehulga mahtu. Arhiveerimine on mitme andmehulga, vahepeal ka eri tüüpi andmehulga, tihendus üheks failiks (arhiivifailiks).

Algoritmid[muuda | redigeeri lähteteksti]

Kadudeta andmete pakkimisel kasutatavad algoritmid on:

  • DEFLATE
  • RLE
  • GZIP
  • BZIP2
  • LZW
  • JPEG 2000

Kadudega andmete pakkimisel kasutatavad algoritmid on:

  • MPEG1
  • MPEG2
  • MPEG3
  • MPEG4
  • JPEG (sisaldab ka kadudeta andmete tihendamise võimalust)
  • MP3
  • DOLBY AC-3

Andmete pakkimise maksimaalsuse saavutamiseks kasutatakse erinevaid algoritme koos.

Kasutusalad[muuda | redigeeri lähteteksti]

Heli[muuda | redigeeri lähteteksti]

Heliandmete tihendamist, mida eristatakse dünaamilise ulatuse tihendamisest (ingl Dynamic range compression), kasutatakse selleks, et vähendada edastamiseks vajalikku ribalaiust ja ladustamiseks vajalikku mälumahtu. Heli andmete tihendamise algoritme implementeeritakse tarkvarasse ja neid kutsutakse helikodekiteks (ingl Codec). Kadudega heliandmete pakkimise algoritmid või kodekid võimaldavad efektiivsemat andmete pakkimist, kuid halvendavad kvaliteeti, ja neid kasutatakse väga paljudes heliga seotud rakendustes. Need algoritmid peaaegu kõik tuginevad psühhoakustika uurimustöödele, mis leida ja vähendada inimesele vähem tajutavad vähem kuuldavad või mittetähenduslikud helid, seega vähendades mäluruumi ja ribalaiuse vajadust ladustamise või edastamise puhul.

Nii kadudega kui ka kadudeta pakkimisel vähendatakse informatsiooni liiasust, kasutades meetodeid nagu kodeerimine, mustri eristamine ja lineaarne ennustamine, et vähendada andmete hulka, mis esindab tihendamata informatsiooni[5].

Dünaamilise ulatuse tihendamine (ingl Dynamic range compression) tähendab valjude helide vaigistamist ja vaiksete helide valjemaks tegemist, mis jätab helitugevuse teatud valjuduse ja vaiksuse limiidi vahele. See eemaldab erandlikud olukorrad, kus helitugevus on liiga kõrge või liiga madal, ja seeläbi vähendab helifaili mahtu.

Video[muuda | redigeeri lähteteksti]

Videoandmetihendusel kasutatakse tänapäevaseid kodeerimistehnikaid, et vähendada liiasust video andmetes. Enamik videoandmete pakkimise algoritme või kodekeid kombineerib ruumilise pildi pakkimise (ingl Spatial image compression) ja ajalise liikumise kompenseerimise (ingl Temporal motion compensation). Enamik videokodekeid kasutab helipakkimistehnikaid paralleelselt videopakkimistehnikatega, aga andmed on ühendatud üheks hulgaks[6].

Enamik videoandmetihenduse algoritme kasutab kadudega tihendamist. Tihendamata video nõuab väga suurt andmeedastuskiirust. Kuigi kadudeta tihendamise kodekid suudavad pakkuda keskmiselt kolmekordset tihendust, suudab tüüpiline MPEG-4-vormingu kadudega tihendus vähendada andmemahtu 20–200 korda[7]. Nagu kõikides kadudega tihendamise algoritmides, on loodud kompromiss video kvaliteedi, arvuti jõudluse maksumuse ja süsteeminõuete vahel.

Kodeerimise teooria[muuda | redigeeri lähteteksti]

Video andmeid saab kujutada kui seeriat paigal olevaid pilte (kaadreid). Piltide (kaadrite) jada sisaldab endas ajalist ja ruumilist liiasust, mida videopakkimise algoritmid üritavad elimineerida või kodeerida väiksemasse mahtu. Sarnasused saab kodeerida näiteks ladustades ainult erinevused kahe järjestikuse kaadri vahel, või kasutades inimese taju iseärasusi. Näiteks, väikeseid värvi erisusi on raskem inimese jaoks tajuda, kui erinevusi heleduses. Pakkimisalgoritmid saavad seetõttu luua mitme järgneva pildi värvide keskmise ja kasutada seda värvi, et vähendada ruumi.

Üks võimsamaid tehnikaid video pakkimiseks on kaadriväline tihendus (ingl Interframe compression), kus kasutatakse varasemaid või järgnevaid kaadreid jadas, et pakkida käesolev kaader, kuid sarnane meetod, kaadrisisene tihendus (ingl Intraframe compression), kasutab ainult käesolevat kaadrit, olles rohkem pildi tihendus[8].

Kaadrivälise pakkimise puhul võrreldakse igat kaadrit jadas eelnevaga, et näha, kas järgneval kaadril on alasid, kus midagi ei ole muutunud. Kui selline ala eksisteerib, siis kopeeritakse see ala lihtsalt eelmiselt pildilt järgnevale. Kui selle ala asukoht on muutunud, siis pööratakse ja liigutatakse eelmisel kaadril olevat ala. See siiski on palju vähem mälumahtu nõudev, kui iga pilt uuesti mälusse jätta ja vajadusel esitada. Kaadriväline tihendus töötab ideaalselt programmide puhul, mis lihtsalt esitavad video vaatajale.[9]

Probleem kaadrivälise pakkimisega on aga see, et kuna see algoritm kopeerib andmeid ühelt kaadrilt teisele, võib ette tulla olukordi, kus vajalik kaader on kaduma läinud. Sel juhul ei ole võimalik konstrueerida järgmisi kaadreid õigesti.

Vaata ka[muuda | redigeeri lähteteksti]

Viited[muuda | redigeeri lähteteksti]

  1. Mahdi, O.A.; Mohammed, M.A.; Mohamed, A.J. (November 2012). "Implementing a Novel Approach an Convert Audio Compression to Text Coding via Hybrid Technique". International Journal of Computer Science Issues 9 (6, No. 3): 53–59. Vaadatud 6. märts 2013. 
  2. Pujar, J.H.; Kadlaskar, L.M. (Mai 2010). "A New Lossless Method of Image Compression and Decompression Using Huffman Coding Techniques". Journal of Theoretical and Applied Information Technology 15 (1): 18–23. 
  3. Salomon, David (2008). A Concise Introduction to Data Compression. Berlin: Springer. ISBN 9781848000728. 
  4. Arcangel, Cory. "On Compression". Vaadatud 12. detsember 2013. 
  5. Mahdi, O.A.; Mohammed, M.A.; Mohamed, A.J. (November 2012). "Implementing a Novel Approach an Convert Audio Compression to Text Coding via Hybrid Technique". International Journal of Computer Science Issues 9 (6, No. 3): 53–59. Vaadatud 6. märts 2013. 
  6. "Video Coding". Center for Signal and Information Processing Research. Georgia Institute of Technology. Vaadatud 12. detsember 2013. 
  7. Graphics & Media Lab Video Group (2007). Lossless Video Codecs Comparison. Moscow State University. 
  8. Faxin Yu, Hao Luo, Zheming Lu (2010). Three-Dimensional Model Analysis and Processing. Berlin: Springer. p. 47. ISBN 9783642126512. 
  9. Bhojani, D.R. "4.1 Video Compression". Hypothesis. Vaadatud 12. detsember 2013.