Yazan : Şadi Evren ŞEKER
Oldukça basit ve hızlı olan bu sıkıştırma algoritmasına göre ardışık olarak gelen veriler arasındaki fark alınarak verilerin boyutu küçültülmüş olur.
Örneğin aşağıdaki sayıları ele alalım:
183 193 233 234 230
Bu sayıları sıkıştırmak için ilk sayıyı sonuç dizisine kopyalıyoruz ve diğer elemanlar ile farkı alıyoruz:
183 10 40 1 -4
Görüldüğü üzere sıkıştırma sonucunda elde edilen sayıların kapladığı yer daha azdır. Bu algoritmada sıkıştırma sonucu verinin kapladığı yerin azalması garanti edilmez. Bunun sebebi örneğin sayılar arasındaki farklar çok yüksekse farlkarı tuttuğumuz sonuç bilgisindeki sayıların orjinal sayılardan büyük olma ihtimalidir.
Algoritmanın açma aşamasında ilk sayıya eklenerek hesaplama yapılır:
183 -> 183
183 + 10 -> 193
193 + 40 -> 233
233 + 1 -> 234
234 + (-4) -> 230
şeklinde veri açılarak orjinal değerler bulunmuş olur.
Algoritmanın sıkıştırma (compress) kısmı aşağıdaki şekilde C dilinde kodlanabilir:
int a[]={183,193,233,234,230}; // sıkıştırılacak olan dizimiz
int b[5]; // sonucun bulunacağı dizi
b[0] = a[0]; //ilk eleman aynen kopyalanıyor
for(int i = 1;i<5;i++){ // dizinin bütün elemanlarını geçiyoruz
b[i] = a[i]-a[i-1];
}
yukarıdaki kodda sonuçta b dizisinde elde edilend eğer sıkıştırılmış değerdir. Algoritmanın açma kısmı için (decompress) aşağıdaki kod yazılabilir:
int a[]={183,10,40,1,-4}; // açılacak olan dizimiz
int b[5]; // sonucun bulunacağı dizi
b[0] = a[0]; //ilk eleman aynen kopyalanıyor
for(int i = 1;i<5;i++){ // dizinin bütün elemanlarını geçiyoruz
b[i] = b[i-1]+a[i];
}
Yukarıdaki kodların ikiside tek dizi kullanarak da çözülebilmektedir. Algoritma yapısı itibariyle kayıpsız sıkıştırma (lossless compression) bir örnektir çünkü orjinal verinin sıkışıtırılmış hali açıldığında orjinal veri kayıpsız olarak bulunabilmektedir.
Bu uygulama komşu sayıların birbirine yakın olduğu durumlarda sıkıştırma için öncül bir işlem olarak kullanılabilir.
Örneğin elimizde A = {2, 5, 8, 10, 12, 15} gibi bir dizi olsun.
Bu hali ile LZM gibi bir sıkıştırma uygulandığında benzer bir sözcük dizimi olmadığı için sıkıştırma çok verimli olmayacaktır. Lakin Delta Sıkıştırması uygulanıp dizi B = {2, 3, 3, 2, 2, 3} hale getirilirse elemanların frekans değerleri arttırılıp sıkıştırma verimi arttırılabilir. Eğer sayılar arasında farklar benzer çıkmamış olsaydı bu durumda sözcüksel tabanlı sıkıştırma için değişen bir şey olmazdı. Çünkü burada önemli olan nokta frekansların artmasıdır. Frekans sabit ise yaklaşık olarak sıkıştırılan veri yine aynı oranda sıkışacaktır.
Genel olarak görüntü sıkıştırma için elverişli bir yöntemdir çünkü görüntü içerisindeki komşu pikseller birbirine yakın sayılardır. Yeri gelmişken faydası olur diye eklemek istedim. Birilerinin işine yarayacaktır elbet.