You are on page 1of 13

2.

BÖLÜM

ÇOĞUL ORTAM VERİ SIKIŞTIRMA

Çoğul ortam veri iletiminde veri miktarını azaltmak için metin, resim, video
veya ses kütükleri kodlanarak sıkıştırılabilir. CODEC (yada kod çözücü),
müzik, video ve resimleri sıkıştırmaya yarayan sistem dosyaları demektir. Veri
sıkıştırma işlemi, belirli uzunluktaki verilerin çeşitli yöntemler kullanarak daha
az bellek kullanması amacıyla geliştirilmiştir. Düşünün ki elinizde 10 Mbyte
boyunda bir dosya var ve bunu internet veya network üzerinden başka bir
bilgisayara aktarmak istiyorsunuz. Ortalama oranda bir CODEC ile bu dosyayı
sıkıştırdığınızda yaklaşık %50 oranda bellek kazancı olur. Bu ise gönderme
süresinin %50 oranda düşürülmesi demektir. Tüm internet hareketleri
düşünülürse binlerce terabyte seviyede kazanç sağlanmaktadır. Bu örnektende
anlaşıldığı üzere resim, video ve müzik dosyaları, hard diskte daha az yer
kaplaması maksadıyla sıkıştırılır. Her CODEC, farklı algoritmalara baska bir
deyişle farklı yöntemlere dayalı olarak çalışır. Elektronik cihazlarda (Müzik
setleri, DVD Player, MP3 çalarlar, Telefon gibi) bir videonun yada müziğin
açılabilmesi için cihaz dosyayla uyumlu CODEC’i desteklemelidir. Yani,
kullanılacak elektronik cihazın açılması istenen dosyanın sıkıştırılmasında
kullandığı CODEC'e sahip olması gerekir. Son yıllarda disk kapasitelerinin hızlı
bir şekilde artması, genel amaçlı sıkıştırma uygulamalarının kullanımını
azalttıysa da, aslında sabit disklerimizde sakladığımız ses, görüntü ve hareketli
görüntü dosyalarının tamamına yakını çeşitli yöntemlerle sıkıştırılmış haldedir.

Sıkıştırma özellikle görüntü dosyalarında çok önemlidir. Özel olarak görüntü


sıkıştırma yöntemleri üç ana esasa dayanır:
 Görüntüdeki uzaysal ilişkilerden yararlanılarak gereksiz bilgilerin atılması,
 Görüntüdeki zamansal ilişkilerden yararlanılarak gereksiz tekrarların
atılması,
 İnsan gözünün ayırt edemeyeceği detayların atılması.

Sabit resimlerde uzaysal benzerlikler, hareketli resimlerde ise hem uzaysal


(resim içi) hemde zaman içindeki (resimler arası) benzerlikler kullanılarak
büyük sıkıştırmalar yapılabilir. Sabit resimlerde 10:1 ile 50:1, hareketli
görüntülerde ise 50:1 ila 200:1 oranlarında bir sıkıştırma yapılabilmektedir.
Ancak, bu kadar yüksek sıkıştırmalar için görüntü kalitesinde az da olsa bir
kayıp söz konusudur. Sıkıştırmada insan gözünün fizyolojik özellikleri de
dikkate alınır. Gözün renk işareti için ayırıcılığı aydınlık işaretine oranla daha
azdır. Yani net siyah/beyaz bir görüntünün üzerine bulanık bir renk konulursa
toplam resim renkli ve net olarak görünür. Buna dayanarak aydınlık işareti
(luminance) 720  480 piksel renk işareti ise sadece 360  240 piksel olarak
taranır. Ayrıca renk bilgisi daha az bit sayısı ile tanımlanabilir. Sonuç olarak

1
renk için gerekli toplam bit sayısı aydınlık işareti için gerekli olandan çok daha
az yapılabilir. İnsan gözü görüntüdeki ince detaylara veya yüksek uzamsal
frekanslı enerjilerdeki seviye değişikliklerie daha az duyarlıdır. Buna bağlı
olarak resimdeki ince ayrıntılar daha az sayıda bitle kodlanabilir. Bütün bu
özellikler kullanılarak yapılan kodlamalarla 100:1 gibi çok yüksek sıkıştırma
oranlarında bile orijinal görüntüye çok yakın görüntüler elde edilebilmektedir.

Özetle veri sıkıştırmaya aşağıdaki nedenlerden ötürü ihtiyaç


duyulmuştur.

Avantajları:

 Minimum alana maksimum veri sığdırmak


 Daha hızlı aktarım sağlayarak erişim süresini azaltmak
 Sıradüzensel verileri daha hızlı işleyebilmek

Dezavantajları:

 Kodlama için ekstra maliyet gerektirir.


 Kod çözme modüllerine gereksinim vardır. Bu da karmaşıklığı arttırır.

Veri sıkıştırma yöntemleri, sıkıştırma biçimlerine göre kayıplı sıkıştırma


yöntemleri ve kayıpsız sıkıştırma yöntemleri olmak üzere ikiye ayrılırlar. Bir veri
kayıplı bir sıkıştırma yöntemi ile sıkıştırılırsa, verinin tamamı değil, sadece belirli
bir kısmı geri getirilebilir. Veri bire bir aynı şekilde geri getirilemediği için bu tür
yöntemlere kayıplı yöntemler denir. Kayıplı veri sıkıştırma genellikle belirli bir
miktar veri kaybının insan gözü ve kulağı tarafından hissedilemeyeceği
durumlarda, örneğin fotoğraf görüntüleri, video ve ses için kullanılır. İnsan gözü
ve kulağı yüksek frekans değerlerine daha az hassasiyet gösterdiği için,
genellikle veri eleme işlemi yüksek frekans değerlerinin simgeleyen veriler
üzerinde yapılır.

Kayıplı sıkıştırma yöntemleri özellikle multimedya verilerinde kullanılmaktadır.


Buna son günlerde çok moda olan bir mpeg standardı olan mp3 formatı örnek
verilebilir. Bu yöntemlerde veri decompress (geri açma) edildiğinde fark
edilemeyecek kadar kayıp vardır. Mesela mp3 formatında insan kulağının
duyamayacağı frekanstaki sesler hesaba alınmaz. Bu sesleri duymadığımıza
göre kaydetmenin manası yoktur. Aynı şekilde kayıplı veri sıkıştırma
yöntemlerine jpeg standartı verilebilir. Bu yöntem ile sıkıştırma yapılırken renk
tonları arasındaki gözün göremeyeceği ayrıntılar silinir. Mesela siyah bir
zemindeki siyah-gri arası tonlar silinir. Bu ayrıntı resme ancak çok yakından
bakıldığında seçilebilir. Kayıpsız sıkıştırma yöntemleri, orijinal veri ile
sıkıştırıldıktan sonra geri getirilecek olan verinin tamamıyla aynı olmasının
gerekli olduğu durumlarda kullanılır. Örneğin metin tipinde veriler kayıpsız
olarak sıkıştırılmalıdırlar. Çünkü geri getirildiklerinde kelimelerinde veya
karakterlerinde eksiklikler olursa metnin okunabilirliği azalacak ve hatta anlam
kayıpları meydana gelebilecektir. Kısacası, insan gözünün ve kulağının
hassasiyeti ile direkt olarak ilgisi bulunmayan, metin belgeleri, kaynak kodları,
çalıştırılabilir program dosyaları gibi dosyalar kayıpsız sıkıştırılmak zorundadırlar.
2
Fotoğraf görüntüleri, video ve ses için de daha hızlı çalışan kayıpsız sıkıştırma
yöntemleri kullanılabilir. Fakat sıkıştırma oranları kayıplı sıkıştırmaya göre
oldukça düşük olacaktır.Özetle; Kayıpsız sıkıştırma yöntemleri ise sayısal
sonuçların önemli olduğu dosyalarda kullanılır. Örneğin bir exe
(çalıştırılabilir) dosyada bir kaç byte"ın farklı olması (exe içindeki data kısımları
dışında) sistemin kilitlenmesine veya exe’nin işlem yapamamasına neden
olabilir. Tüm multimedya formatları kayıplı değildir, Mesela pcx veya gif formatı
kayıpsız olarak sıkıştırma yapmaktadır.

İki tip kayıpsız sıkıştırma yöntemi vardır. Bunlardan ilki değişken uzunluklu
kodlama olarak ta bilinen olasılık (veya istatistik) tabanlı kodlama, ikincisi ise
sözlük tabanlı kodlamadır. Olasılık tabanlı kodlamada, sıkıştırılan verinin bütünü
içinde daha sık kullanılan sembollere bit adedi olarak daha küçük boyutta
kodlar atanması prensibi ile sıkıştırma yapılır. En çok kullanılan kayıpsız ve
olasılık tabanlı teknikler; RLE Kodlaması, Huffman Kodlaması ve Aritmetik
Kodlama’dır. Sözlük tabanlı kodlamada ise, sık tekrarlanan sembol grupları için
tek bir sembol kullanılması ile sıkıştırma yapılır. En çok kullanılan sözlük tabanlı
teknikler; LZ77, LZ78 ve LZW yöntemleridir. Hem olasılık tabanlı kodlamayı,
hem de sözlük tabanlı kodlamayı bir arada kullanan algoritmalar, daha yüksek
sıkıştırma oranları sağlarlar. DEFLATE, Huffman ve LZ77 sıkıştırma tekniklerini
bir arada kullanan bir algoritmadır

Veri sıkıştırma yöntemlerini uygulama alanlarına göre ayrıca sınıflandıracak


olursak:
• Metin ve ikili tabanlı veri sıkıştırma alanında, her bit değerli olduğu için
kayıpsız yaklaşımların kullanılması şarttır.
• Ses verisi sıkıştırma alanında, iyi sıkıştırma oranları sağladığı için genellikle
kayıplı yaklaşımlar tercih edilirken, her bitin önemli olduğu profesyonel amaçlı
uygulamalar için ise kayıpsız yaklaşımlar kullanılır.
• Görüntü verisi sıkıştırma alanında, şekiller ve taranmış metin görüntüleri gibi
düşük frekanslı görüntülerde kayıpsız, fotoğraflarda ise genellikle kayıplı
sıkıştırma kullanılır.
• Hareketli görüntü (video) sıkıştırma alanında, ses verisi sıkıştırma alanında
olduğu gibi, profesyonel amaçlı bazı uygulama alanları haricinde genellikle
kayıplı sıkıştırma kullanılır.

2.1. Run-Length Kodlama Algoritması

Aynı byte dizilerinin sık kullanıldığı dosyalar için uygundur. Bir dizideki
aynı değer birden fazla kez ortaya çıkarsa 3 byte ile yer değiştirir. Bu 3 byte:

 Özel bir escape karakteri (Run-Length kodu belirtecisi. FFh)


 Tekrar eden değer
 Değerin tekrar etme sıklığı

3
Aşağıdaki veri seti bu algoritmaya göre kodlayalım:

Kodlama sonucunda:

Veri setinin boyutu kodlama sonucunda 18 byte’dan 11 byte’a düşmüştür. Bu


kodlama, belirli bir miktar alan kazanmayı garanti etmez. Bazı
durumlarda, sıkıştırılan veri seti, orjinal veri setinden daha büyük
olabilmektedir.

2.2. Entropi-Ek Notlar

2.3. Huffman Kodlaması-Ek Notlar

MIT’de Robert Fano tarafından kurulan ve bilişim teorisi alanında bir ilk olan
sınıfta öğrenci olan David Huffman tarafından verilen bir ödev üzerine
geliştirilmiştir. GZIP, JPEG, MPEG gibi yaygın olarak kullanılan sıkıştırma
yöntemlerinde son işlem olarak kullanılır ve sıkıştırma algoritmalarında en
yaygın olarak kullanılan bileşendir. CCITT’nin (Consultive Committee on
International Telephone and Telegraph) faks iletimi için geliştirdiği 1-boyutlu
kodlama, tipik bir Huffman kodlamasıdır.

Huffman kodlaması, kayıpsız bir sıkıştırma algoritmasıdır. Bu kodlama


değişken uzunlukta bir kodlama olup veri setindeki karakterlerin
frekansına bağlıdır. Algoritma, bir veri setinde daha çok rastlanan bir
sembolün daha düşük uzunluktaki bir kodla, daha az rastlanan sembolü ise
daha büyük uzunluktaki bir kodla temsil edilmesine dayanmaktadır. Veri
setindeki sembol sayısına ve bu sembollerin tekrarlama sayısına bağlı olarak
%10 ile %90 arasında değişen oranlarda bir sıkıştırma elde edilebilir.
Huffman tekniğinde semboller(karakterler) ASCII'de olduğu gibi sabit
uzunluktaki kodlarla kodlanmazlar. Her bir sembol değişken sayıda
uzunluktaki kod ile kodlanır. Bir veri kümesini sıkıştırabilmek için bu küme
içerisindeki sembollerin tekrar etme sıklıklarının bilinmesi gerekmektedir. Her
sembolün ne kadar sıklıkta tekrar ettiğini gösteren tabloya frekans tablosu
denir.

Huffman Kodlaması İşlem Adımları:

İlk olarak, veri setine ait frekans tablosu oluşturulur. Ardından, hangi karakterin
hangi bitlerle temsil edileceğini gösteren Huffman ağacı oluşturulur.

4
Örnek 1.

Adım 1

Adım 2

5
Adım 3

Adım 4

Adım 5

6
Adım 6

Veri seti ASCII kodu ile kodlanırsa, her karakter için 1 byte(8 bit)’lık alan
gerektiğinden toplamda 155 byte(1240 bit)’a ihtiyaç olacaktı. Huffman
kodlaması ile bu sayı :

60x1 + 40x2 + 25x3 + 20x4 +10x4= 335 bittir.

Sonuç olarak; 335/1240=0.27

7
Örnek 2.

Üzerinde Huffman kodlamasını gerçekleştireceğimiz kelime PAPAĞAN olsun.

8
Huffman Kodunun Çözümü

Frekans tablosu ve sıkıştırılmış veri mevcutsa bahsedilen işlemlerin


tersi yapılarak kod çözülür. Diğer bir deyişle sıkıştırılmış verinin ilk biti alınır.
Eğer alınan bit bir kod sözcüğüne karşılık geliyorsa, ilgili kod sözcüğüne denk
düşen karakter yerine konulur.
Eğer alınan bit bir kod sözcüğü değil ise sonraki bit ile birlikte alınır ve yeni
dizinin bir kod sözcüğü olup olmadığına bakılır. Bu işlem dizinin sonuna kadar
yapılır. Böylece Huffman kodu çözülerek karakter dizisi elde edilmiş olur.

2.4. Aritmetik Kodlama-Ek Notlar

2.5. Lempel Ziv Kodlama

2.5.1. LZ77 Kodlama-Ek Notlar

2.5.2. LZ78 Kodlaması-Ek Notlar

Lempel ve Ziv, LZ77’de yer alan tampon büyüklüğünün sınırlı olmasının


yarattığı sıkıntıları ortadan kaldırmak için, tampon kullanmayan çok farklı bir
yöntem geliştirerek 1978’in Eylül ayında yayınlanan “Compression of Individual
Sequences via Variable-Rate Coding” isimli makaleyi yayınlamıştır. Bu
makalede, geliştirdikleri algoritmayı LZ78 (veya LZ2) ailesi olarak
adlandırılmışlardır. Algoritma, LZ77’den farklı olarak, sadece metin tabanlı
sıkıştırmada değil aynı zamanda bitmap gibi farklı sayısal veriler üzerinde de
başarıyla uygulanabilmiştir. Lempel-Ziv kodlamasının birçok farklı türü
bulunmaktadır. Unix ortamındaki zip-unzip komutları ile compress
uncompress komutları bu kodlamayı kullanmaktadır.

9
Örnek 1.

2 harften meydana gelen bir alfabeye sahip “aaababbbaaabaaaaaaabaabb“ veri


dizisini LZ78 kodlaması ile kodlayalım.

Kural : Karakter seti daha önceden hiç görülmeyen en küçük parçacıklara


ayrılır.

a ve b harflerinin ASCII kodları a=97 ve b=98


<0,97><1,97><0,98><1,98><3,98><2,97><3,97>><6,97><2,98><9,98>

Toplam bit sayısı: 10.4+10.8=120 bit

10
LZ78 algoritması kalıpları bulma ve ayrı ayrı saklama becerisine sahip olsa da,
en önemli dezavantajı, sözlüğün sınırsız bir şekilde büyümesidir. Pratikte,
sözlüğün büyümesi belirli bir noktada durdurulmalı; ya gereksiz girdiler
elenmeli ya da kodlama sabit sözlük şemasına zorlanmalıdır.

2.5.3. LZW Kodlaması

Terry Welch 1984’te Unisys için çalışırken LZ78 yaklaşımını yüksek performanslı
disk ünitelerine uyarlamış, ve ortaya çıkan yeni algoritma LZW olarak kabul
görmüştür. LZW hem sıkıştırma hem de açma performansı açısından LZ78
ailesinin en iyisi olmayı başarmıştır. Her tip veri üzerinde iyi sonuçlar veren bir
algoritma olduğu için, kendisinden sonra gelen birçok algoritma LZW’yi temel
almıştır. 1985 yılından beri Unisys LZW’nin patentini elinde bulundurmaktadır.

Örnek: Aşağıdaki harf dizisini LZW ile kodlayınız.

a, b, c ve d harflerinin ASCII kodları a=97 , b=98 , c=99 , d=100 dür.

abcaabbcdddaaabbbbbbb
a | b | c | aa | bb | c | d | dd | aaa |bbb|bbbb
97 98 99 256 257 99 100 258 259 260 261

<97><98><99><256><257><99>><100>><258>><259>><260>><261>

Toplam bit sayısı: 5.8+6.9= 94 bit

11
LZ ailesinin en çok kullanılan üyesi LZW’dir. Hızı ve sıkıştırma performansı
yüksektir. Fakat, LZ78’de olduğu gibi, LZW algoritmasında da sözlük
büyüklüğünün sürekli artması sorun yaratmaktadır. Çözüm olarak birçok farklı
yöntem geliştirilmiştir.LZW tabanlı çalışan bir kayıpsız görüntü sıkıştırma
algoritması olan GIF, ve Unix’teki “Compress”, sözlük büyüklüğü 2b değerine
eriştiğinde (b değeri önceden belirlenir), sözlüğü iki katına (2b+1) çıkartır.
Sözlük daha da büyüdüğünde, statik sözlük yaklaşımına döner. Eğer sıkıştırma
oranı belli bir seviyenin altında kaldıysa sözlüğü boşaltarak, sözlük oluşturma
işlemini yeniden başlatır. British Telecom’un geliştirdiği BTLZ standartında ise
en az kullanılan girdi çıkartılarak sözlük küçültülür.

2.6.BWT Kodlaması - Ek Notlar

2. BÖLÜM GENEL DEĞERLENDİRME SORULARI

1. CODEC nedir? Veri sıkıştırmaya neden ihtiyaç duyulmuştur?

2. Veri sıkıştırma tiplerini ve üç adet veri sıkıştırma yöntemi ismini yazınız.

3. Veri sıkıştırmasının dezavantajlarını yazınız.

4. Görüntü sıkıştırma yöntemlerinin dayandığı üç esası yazınız.

5. ”10 23 24 24 24 24 24 24 24 24 24 25 25 25 25 25 26 26 26 26 26 26 26 25 24” şeklindeki


veri seti “RLE sıkıştırma tekniği” ile sıkıştırılarak iletiliyor. Sıkıştırılmış veri dizisini elde ediniz ve
sıkıştırma verimini hesaplayınız. Bu sıkıştırma tekniğinin avantajını ve dezavantajını belirtiniz.

6. ”abcabbbcdaabccdaabb” harf dizisi Huffman sıkıştırma algoritması ile sıkıştırılıyor. Huffman


ağacının en son halini oluşturarak gerçekleştirilebilecek sıkıştırma oranını hesaplayınız.

7. Bir metin dosyasında “a” karakteri 50 defa, “b” karakteri 35 defa, “k” karakteri 20 defa, “m”
karakteri 10 defa, “d” karakteri 8 defa ve “ğ” karakteri ise 4 defa geçiyor. İlgili karakterler için
Huffman ağacının en son halini oluşturunuz. Önemli Not: Huffman ağacı işlem basamaklarını
göstermenize, işlemler için açıklama yapmanıza ve ağacı oluşturduktan sonra karakterleri bitlerle
kodlamanıza gerek yoktur.

9.

12
Yukarıda “KAHRAMANMARAŞ” kelimesinin Huffman Ağacı verilmiştir. Ağaçtaki boşlukları
doldurarak harflerin kod karşılıklarını tabloya yazınız.

10.“papaganpapagan” kelimesini LZ ve LZW kodlayınız.

11. “ hata ” kelimesinin Huffman kodunu elde ederek ortalama sembol uzunluğunu (L)
hesaplayınız.

12. “abc” diziliminde P(a)=0.5, P(b)=0.3, P(c)=0.2 ‘dir. “cac” dizilimi için aritmetik kod etiket
değrini hesaplayınız.

13. “ ECE ” için P(E)=0.6, P(C)=0.4 aritmetik kod etiket değerini hesaplayınız ve alıcıda
gönderilecek bit dizisini elde ediniz.

14. ” abracadabrarray ” Pencere Boyutu (WS)=14 karakter ve İleri Tampon Boyutu (LBS)= 6
karakter için LZ77 kodlayınız.

15. Bir LZ77 kodlayıcı-dekodlayıcı için Pencere Boyutu 12 , İleri Tampon Boyutu 7 ve Arama
Tamponu 5 karakterdir. Dekodlayıcıdaki arama tamponu ilk anda “wabba” olduğu durum için
<4,6,a><2,4,w><3,1,b> kod dizisini dekodlayınız.

16. Harflerden oluşan bir veri dizisi Pencere Boyutu (WS)=13 , İleri Tampon Boyutu (LBS)=6
karakter ve Arama tamponu(SB) ise ilk anda “ cabraca ” ile dolu olan bir LZ77 kodlamasıyla
kodlanıyor. Elde edilen kod <0,0,d><7,4,r><3,5,d> olup kodlanmış bu LZ77 kod dizisinden
dekodlama ile esas veri dizisini elde ediniz.

17. < 2 , p a e p l > BWT dekodlaması uygulayınız.

13

You might also like