Farklı blok boyutlarına sahip jpeg algoritması. JPEG sıkıştırma algoritması. Temel kavram ve çalışma prensiplerinin tanıtılması

  • 10.05.2019
Eski güzel JPEG, birçok inkar edilemez avantajına rağmen, hala önemli sınırlamalar... Bunları kaldırmak için, gelişimi uzun süredir gerçekleştirilen yeni bir görüntü sıkıştırma yöntemi çağrıldı. JPEG2000 artık resmi olarak tanınan bir format haline geldiğine göre, bu, çeşitli yazılım satıcıları tarafından aktif desteğinin başlangıcı olmalıdır.

Bir bilgisayarda grafiklerle çalışan pek çok kişi şu soruyla ilgileniyor: Çok etkileyici miktarda PC belleği kaplayan bir görüntü, diskte çok daha küçük bir boyuta nasıl sıkıştırılabilir? Yayıncılık kariyerimin başlangıcında "sıkıştırma" kelimesinin benim için çok gizemli ve şaşırtıcı olduğunu hatırlıyorum... Aslında, görüntü sıkıştırma nasıl oluyor? dijital Fotoğrafçılık ne de renkli baskı?

Yani sıkıştırma. Kalite kaybına neden olabilir veya olmayabilir. İkinci durum, ( gibi çiftlerle sonuçlanan RLE (Çalışma Uzunluğu Kodlaması) gibi yöntemlerdir. atlamak, değer, nerede atlamak Ardışık sıfırların sayısı ve değer- sonraki değer) ve LZW (Lempel-Ziff-Welch yöntemiyle sıkıştırma), PSD biçimleri, GIF ve TIFF. RAR ve ZIP gibi arşivleyiciler tarafından yaygın olarak kullanılırlar. Kayıpsız sıkıştırmanın ortalama sıkıştırma oranı 2-3 katıdır.

Görüntüyü daha fazla sıkıştırmanız gerekiyorsa, kalite kaybı olmadan yapamazsınız. İlkeler nelerdir? İlk olarak, herhangi bir görüntü, kaldırılması resmin kalitesinde gözle görülür bir değişikliğe yol açmayacak belirli bir miktarda fazlalık içerir. İkincisi, insan gözü parlaklıktaki değişikliklere renkten daha duyarlıdır. Bu nedenle farklı kanallar görüntülere farklı sıkıştırma oranları uygulanır - bilgiler kaybolur, ancak görsel olarak fark edilmez. Ek olarak, gözün küçük görüntü öğelerine duyarlılığı düşüktür, bu da kaliteden ödün vermeden çıkarılmasına olanak tanır. Bu şekilde görüntü (kalitedeki bozulma zaten fark edilebilir olsa bile) kabul edilebilir bir eşiğe kadar sıkıştırılabilir. Her biri için kalite bozulma derecesi belirlenir. özel durum... Basım endüstrisi için, yalnızca minimum düzeyde bozulmalara izin verilir ve İnternet'te (amaca bağlı olarak) yayınlamak için çok daha fazlasına izin verilir.

Kayıplı sıkıştırma yöntemleri arasında en popüler olanı, otuz kat sıkıştırmada bile yeterli görüntü kalitesini koruyan JPEG'dir. Bu arada, çoğu modern veri sıkıştırma yöntemi (örneğin, mp3 olarak bilinen Katman-4 ve ayrıca MPEG), JPEG'e benzer mekanizmalar uygular. Bu biçime daha yakından bir göz atalım, özellikle de çok uzun zaman önce olmayan en son uygulaması olan JPEG2000 nihayet onaylandığından, on yıl boyunca JPEG / MPEG'e yapılan tüm eklemeleri içeriyordu.

JPEG

Sıkıştırma algoritmasının adı, ITU (Uluslararası Telekomünikasyon Birliği) ve ISO (Uluslararası Standartlaştırma Örgütü) uzmanlarından oluşan bir girişim grubu olan Joint Photographic Expert Group'un kısaltmasıdır. Bu nedenle adı Joint önekini içerir. 1992'de JPEG, grafikler için uluslararası standart olarak ilan edildi.

JPEG sıkıştırması kullanılırken kalite her zaman kaybolur. Bu durumda, her zaman bir seçenek vardır: hacim pahasına kaliteyi tercih etmek (dosya boyutu yaklaşık üç kez sıkıştırılacaktır) veya tam tersine, elde etmek için en küçük beden hala tanınabilir kalacağı görüntü (sıkıştırma derecesi 100'e ulaşabilir). Ortaya çıkan görüntü ile orijinal arasındaki kalite farkının hala algılanamadığı sıkıştırma, dosya boyutunda 10 ila 20 kat azalmaya neden olur.

Uygulama alanı

JPEG, fotoğraf kalitesinde tam renkli ve tek renkli görüntüleri sıkıştırmada en iyisidir. Bir indeks paleti ile bir resmi kaydetmeniz gerekiyorsa, önce tam renge dönüştürülür. JPEG yöntemini kullanarak sıkıştırırken, her şeyin görüntülerin doğasına bağlı olduğunu unutmamalısınız: renk değişikliklerinin önemsiz olduğu ve keskin renk geçişlerinin olmadığı yerler çok daha az hacim kaplayacaktır. JPEG, fotoğrafik görüntüleri depolamak için gerekli olan her yerde kullanılır: dijital kameralarda, baskıda (EPS DCS 2.0), İnternet onsuz düşünülemez.

Birkaç JPEG sıkıştırma türü vardır, ancak standart pakette çalışmak için kullanılanlardan yalnızca ikisini ele alacağız. bit eşlemler Adobe photoshop, — temel ve ilerici... Diğer iki yöntem - aritmetik ve kayıpsız - egzotiktir ve bir dizi nedenden dolayı yaygınlaşmamıştır.

Sıkıştırma nasıl çalışır?

1. İlk adım renk modelini dönüştürme görüntüleri (genellikle RGB) parlaklık ve renk bileşenlerinin ayrıldığı bir modele (örneğin, YCbCr veya YUV), bu da her kanal için sıkıştırma seviyelerini en uygun şekilde seçmeyi mümkün kılar (göz tarafından algılanmanın özelliklerini dikkate alarak) . Dönüşüm şu şekilde gerçekleşir:

Y = 0.299xR + 0.587 * G + 0.114xB Cb = (B-Y) / 0.866 / 2 + 128 Cr = (R-Y) / 0.701 / 2 + 128

2. Bir sonraki adım sözde. ön filtreleme Cb ve Cr kanallarının her birinde ayrı ayrı komşu piksellerin yatay ve dikey yönlerde çiftler halinde gruplandığı ve Y parlaklık kanalının değişmeden bırakıldığı . Bundan sonra, dört piksellik grubun tamamı, ilgili Cb ve Cr bileşenlerinin ortalama değerini alır. Kısalık için, böyle bir şema 4: 1: 1 olarak belirlenebilir (DRAW - jpeg penceresine dışa aktarmada aynı sunum şekli benimsenmiştir). Her pikselin 3 bayt (üç kanalın her biri için 256 seviye) ile kodlandığı dikkate alındığında, sonuç olarak veri hacmi otomatik olarak 2 kat azaltılır (12 bayt yerine 4 piksel aktarmak için yeterlidir. sadece 4 + 1 + 1 = 6 bayt aktarın) ... Matematik açısından bakıldığında, böyle bir dönüşüm önemli bir bilgi kaybına yol açar, ancak sıradan fotoğraflarda olduğu için insan gözü kaybı algılamaz. grafik görüntülerönemli bir fazlalık var.

3. Birincil "temizlik" aşamasını geçen alınan bilgiler, her kanalda tekrar bloklar halinde ayrı ayrı gruplandırılır, ancak zaten 8x8 bloklar halinde, bundan sonra onlara ana sıkıştırma uygulanır - sözde. ayrık kosinüs dönüşümü, kısaca - DCT (ayrık kosinüs dönüşümü). Sonuç olarak, bilgi dağıtımda piksellerin parlaklığı, aşağıdakilere dayalı bir dağılımla tanımlandığı başka bir forma dönüştürülür. oluşma sıklığı belirli bir piksel parlaklığı. DCT'nin diğer dönüşümlere (örneğin Fourier dönüşümüne göre) göre birçok avantajı vardır ve daha iyi bilgi kurtarma sağlar.

Görüntüyü oluşturan her blok için 64 değerlik (8x8 piksel) bir dizi yerine 64 frekanslık bir dizi elde ediyoruz. DCT'nin nasıl çalıştığına bir örnekle bakalım. Resmimizin bir bloğundaki piksellerin parlaklığının Şekil 1'de gösterilene benzediğini varsayalım. 1 solda, ardından dönüşüm sonucu sağda gösterildiği gibi olacaktır.

1

Önemli doğruluğa rağmen, bu aşamada hala bazı bilgi kayıpları meydana gelir - bu nedenle JPEG her zaman kalite kaybına yol açar. Dönüşümün temel amacı, daha sonra önemsiz bilgileri ortadan kaldırırken faydalı olacak büyük (şekilde - sol üstte) ve küçük (sağ altta) nesnelerin dağılımının genel resmini bulmaktır.

4. Bir sonraki adım, gözle neredeyse hiç fark edilmeyen bilgileri bloktan çıkarmak veya nicemleme(kuantizasyon). Tüm bileşenler, her birinin önemini belirleyen çeşitli katsayılara bölünmüştür. kaliteli restorasyon orijinal görüntü ve sonuç yuvarlak bir tamsayı değerine. Görüntünün son hacmini azaltarak en büyük kalite kaybını ortaya çıkaran bu prosedürdür. Yüksek frekanslı bileşenler kabaca nicelenir ve düşük frekanslı bileşenler en belirgin olduklarından daha kesin olarak nicelenir. Kalitedeki düşüşü biraz yumuşatmak için luma kanalı, kroma kanallarından daha küçük bölme oranları kullanır. Ancak daha sık (bu, hesaplamaları hızlandırmak için yapılır), özel olarak seçilen değerler yerine, yalnızca bir tane alınır - kullanıcının sıkıştırma seviyesini seçerken girdiği.

Örneğin, neye benziyor Photoshop penceresi Kalite parametresinin (veya daha doğrusu ondan türetilmiş) aynı olduğu Web için Kaydet işlemini kullanarak bir görüntüyü kaydederken yuvarlama faktörü(incir. 2).

Nicelemenin bir sonucu olarak, bunun için bir dizi bileşen elde edilir. orijinal görüntü belirli bir doğrulukla geri yüklenir (Şekil 3).

4

İncirde. Şekil 4, sırasıyla bir, dört ve on beş bileşenli siyah-beyaz bir kareyi geri yüklemenin sonucunu gösterir.

5. Görüntü sıkıştırma üzerindeki ana çalışmayı tamamladıktan sonra, diğer dönüşümler ikincil görevlere indirgenir: kalan bileşenler sırayla toplaöyle bir şekilde ki, önce büyük parçalardan sorumlu olanlar, sonra - tüm küçük parçalar için. Resme bakarsanız, kodlayıcının hareketi zikzak bir çizgi gibi görünüyor. Aşama ZigZag olarak adlandırılır (Şekil 5).

5

Daha sonra elde edilen dizi sıkıştırılır: önce normal RLE, ardından Huffman yöntemi.

6. Son olarak, temiz teknik aşama- veriler, görüntünün geri yüklenebilmesi için tüm sıkıştırma parametrelerini gösteren bir başlık ile sağlanan bir kabuk içine alınır. Ancak bazen bu bilgiler başlıklarda yer almaz, bu da sıkıştırmada ek bir kazanç sağlar, ancak bu durumda dosyayı okuyacak uygulamanın bunları bildiğinden emin olmanız gerekir.

Genel olarak, tüm dönüşümler budur. Şimdi örneğimizde ne kadar sıkıştırma yapıldığını hesaplayalım. Orijinal 8x8 görüntünün geri yükleneceği 7 değerimiz var. Bu nedenle, her iki renk kanalında DCT dönüştürme uygulamasından kaynaklanan sıkıştırma 8x8 / 7 9 katıydı. Kanala parlaklığı yedi değil, 8x8 / 11 verecek 11 katsayı atayalım. Her üç kanal için de (9 + 9 + 6) / 3 = 8 kez çıkacaktır. İkinci aşamada meydana gelen görüntünün "kırılması" sırasında kalitenin düşürülmesi, ek bir çift artış sağlar (parlaklık bileşeninin kodlamasının özelliklerini dikkate alarak şema 4-1-1), nihai sonuç - 16 kez. Bu, bazı yönleri dikkate almayan, ancak gerçek resmi yansıtan kaba bir tahmindir. Dosya boyutunda otuz kat azalma elde etmek için yalnızca 3-4 bileşen bırakmanız gerekir.

Görüntü yeniden oluşturma işlemi ters sırada ilerler: ilk olarak, bileşenler niceleme tablosundaki değerlerle çarpılır ve ters kosinüs dönüşümü için yaklaşık katsayılar elde edilir. Sıkıştırma sırasında kalite ne kadar iyi seçilirse, orijinal oranlara yakınlık derecesi o kadar yüksek olur, bu da görüntünün daha doğru şekilde geri yükleneceği anlamına gelir. Geriye sadece bir eylem eklemek kalıyor: bitişten hemen önce, aralarındaki keskin farkları ortadan kaldırmak için komşu bloklardan kenar piksellerinde bazı ayarlamalar (gürültü) yapın.

JPEG'in dezavantajları

  1. Blok boyutu sınırlaması nedeniyle yüksek sıkıştırma oranlarına ulaşılamaması (sadece 8x8).
  2. Yüksek sıkıştırma oranlarında bloklu yapı.
  3. Bir görüntüdeki keskin köşeleri yuvarlama ve ince öğeleri bulanıklaştırma.
  4. Yalnızca RGB görüntüleri desteklenir (CMYK görüntüleri için JPEG yalnızca EPS formatı DCS aracılığıyla).
  5. Resim tamamen yüklenene kadar görüntülenemez.

JPEG'in standart olarak onaylanmasından bu yana on yıl geçti. Bu süre zarfında, araştırma ekipleri orijinal versiyona bir dizi önemli eklemeler önerdiler ve bu da geçen yılın sonunda yeni bir standardın ortaya çıkmasıyla sonuçlandı.

JPEG2000

1997'den beri, JPEG'in getirdiği tüm sınırlamaları ortadan kaldıracak ve içeriği ne olursa olsun (siyah beyaz, gri tonlamalı, tam renkli ve çok bileşenli) her tür görüntüyle etkili bir şekilde çalışabilecek evrensel bir kodlama sistemi oluşturmaya başlandı. fotoğraflar, yeterince küçük metinler ve hatta çizimler olacaktır). Gelişiminde, uluslararası standardizasyon kuruluşları ile birlikte Agfa, Canon, Fujifilm, Hewlett-Packard, Kodak, LuraTech, Motorola, Ricoh, Sony vb.

Yeni algoritmanın evrensel olduğu iddia edildiğinden, ek olarak kullanmakla görevlendirildi. Farklı yollar veri iletimi (içinde gerçek mod Bu, özellikle multimedya uygulamalarında, örneğin İnternet üzerinden gerçek zamanlı yayınlarda kritik öneme sahiptir.

JPEG2000 formatı için temel gereksinimler:

  1. JPEG'e kıyasla daha yüksek bir sıkıştırma oranı elde etmek.
  2. Görüntüleri metinle sıkıştırmak için kullanılmasına izin verecek tek renkli görüntüler için destek.
  3. Sıkıştırma olasılığı genellikle kayıpsızdır.
  4. Görüntüleri aşamalı olarak iyileştirilmiş ayrıntılarla çıktılayın (aşamalı GIF gibi).
  5. Kalitenin görüntünün geri kalanından daha yüksek ayarlanabileceği görüntüde öncelikli alanların kullanılması.
  6. Gerçek zamanlı kod çözme (gecikme yok).

Sıkıştırma prensibi

JPEG2000'deki ana sıkıştırma mekanizması, JPEG'den farklı olarak, tüm görüntüye uygulanan bir filtre sistemi olan bir dalgacık dönüşümü kullanır. Sıkıştırmanın ayrıntılarına girmeden sadece ana noktalara değineceğiz.

6
İlk olarak, JPEG ile aynı şekilde, görüntü YCrCb sistemine dönüştürülür, ardından gereksiz bilgilerin birincil olarak kaldırılması (zaten bilinen komşu pikselleri 2x2 bloklarda birleştirerek). Daha sonra tüm görüntü, her biri üzerinde diğerlerinden bağımsız olarak daha fazla dönüşüm gerçekleşecek olan aynı boyuttaki parçalara (karolar) bölünür (bu, bellek ve hesaplama kaynakları için gereksinimleri azaltır). Ayrıca, her kanal, düşük geçişli ve yüksek geçişli filtrelerle satırlar ve sıralar halinde ayrı ayrı filtrelenir, bunun sonucunda ilk geçişten sonra dört tane daha küçük resimler(alt bant). Hepsi orijinal görüntü hakkında bilgi taşır, ancak bilgi içerikleri çok farklıdır (Şekil 6).

Örneğin, satırlar ve satırlar (sol üst) tarafından düşük frekanslı filtrelemeden sonra elde edilen bir görüntü en fazla miktarda bilgiyi taşır ve yüksek frekanslı filtrelemeden sonra elde edilen görüntü minimumdur. Satırların düşük geçişli filtrelemesinden ve sütunlar için yüksek frekanslı filtrelemeden (ve tersi) sonra elde edilen görüntülerin bilgi içeriği ortalamadır. En bilgilendirici görüntü yeniden filtrelenir ve elde edilen bileşenler jpeg sıkıştırmasında olduğu gibi nicelenir. Bu birkaç kez olur: kayıpsız sıkıştırma için, döngü genellikle kayıplarla 3 kez tekrarlanır - 10 yineleme boyut, kalite ve açma hızı arasında makul bir uzlaşma olarak kabul edilir. Sonuç, küçük bir görüntü ve ince ayrıntılara sahip bir dizi resim, sırayla ve belirli bir doğrulukla geri yüklenir. normal boyut... Açıkçası, daha fazla döngü ayarlanabildiğinden, en büyük sıkıştırma büyük görüntülerde elde edilir.

Pratik uygulama

JPEG2000 sıkıştırmasının temelleri atıldığından beri, bir dizi şirket uygulanması için oldukça etkili algoritmalar geliştirdi.

Başlıca yazılım geliştiricileri arasında Corel'in not edilebilir (bu arada, onur ve övüldüğü paketlerinde dalga dönüşümlerine dayalı wi formatı desteğini ilk sunanlardan biriydi) - tüm görüntüler CD'lerde sağlandı. CorelDRAW paketi ile dokuzuncu sürüme kadar bu şekilde sıkıştırılmıştır.

Daha sonra, Adobe onu çekti. JPEG2000'de bulunan bazı fikirler, Photoshop 6 geliştiricileri tarafından bir görüntüyü JPEG formatında kaydederken (geleneksel, kosinüs dönüşümüne dayalı) gelişmiş seçenekler biçiminde uygulandı. Bunların arasında aşamalı JPEG (Web için Kaydet penceresindeki Aşamalı seçeneği) bulunur. Bu algoritma öncelikle gerçek zamanlı sistemler için tasarlanmıştır ve aşamalı GIF ile aynı şekilde çalışır. İlk olarak, yalnızca birkaç büyük bloktan oluşan görüntünün kaba bir kopyası görünür ve zamanla, verilerin geri kalanı yüklendiğinde, yapı giderek daha net bir şekilde görüntülenmeye başlar, sonunda, son görüntü tamamen iyileşmeyecektir. GIF'den farklı olarak, bu algoritma, iletilen her sürüm için tüm dönüştürme döngüsünü tamamlaması gerekeceğinden, görüntüleyici üzerinde ağır bir yük oluşturur.

Diğer eklemelerin yanı sıra, dosyaya birkaç JPEG'in dahil edildiğini not ediyoruz. sıkıştırılmış görüntüler değişen derecelerde sıkıştırma, çözünürlük ve hatta renk modelleri ile. Buna göre Photoshop 6'da görüntüdeki alanları tek tek seçmek ve onlar için diğer sıkıştırma ayarlarını uygulamak mümkün hale geldi ( İlgi Alanı, ilk kez böyle bir mekanizma 1995'te önerildi), daha fazlasını kullanarak düşük değerler nicemleme tablosunda. Bunu yapmak için gerekli alanı ayarlayın (örneğin, görüntüde yeni bir kanal olarak) ve Kalite öğesinin yanındaki maske simgesine tıklayın. Görünen pencerede, kaydırıcıları hareket ettirerek görüntüyü deneyebilirsiniz - bitmiş sonuç ekranda görüntülenerek kalite ve boyut arasında gerekli uzlaşmayı hızlı bir şekilde bulmanızı sağlar.

Özel dönüştürücüler ve görüntüleyiciler

Standart, sıkıştırma/açma yöntemlerinin belirli uygulamalarını şart koşmadığından, bu, üçüncü taraf geliştiriciler sıkıştırma algoritmaları Aslında, basitleştirilmiş bir dalga dönüştürme algoritması kullanabilir ve böylece sıkıştırma işlemini hızlandırabilir veya tersine daha karmaşık bir tane uygulayabilirsiniz ve buna bağlı olarak daha fazla sistem kaynağı gerektirir.

Diğer şirketlerden özelleştirilmiş çözümler, ticari gelişmeler olarak mevcuttur. Bazıları ayrı programlar (Aware tarafından geliştirilen JPEG 2000), diğerleri - en yaygın programlar için ek modüller olarak uygulanır. bitmap düzenleyicileri(Pegasus Imaging tarafından ImagePress JPEG2000 ve LEAD Technologies tarafından LEAD JPEG2000). Bu konuyla uzun süredir uğraşan LuraTech, arka planlarında öne çıkıyor. LuraWave teknolojisini bağımsız ürün LuraWave SmartCompress'te destekler (üçüncü sürüm zaten mevcuttur) ve Photoshop, Paintshop, Photopaint için modüller sunar. Ayırt edici bir özellik daha yüksek hız birkaç megabayt boyutunda resimlerle bile çalışır (neredeyse anında dönüştürme). Buna göre, bu modülün fiyatı en yüksek - 79 dolar.

JPEG2000 görüntülerini tarayıcılarda görüntülemek için özel bir görüntüleme modülü yüklemeniz gerekir (tüm geliştiriciler bunu ücretsiz olarak sunar). Herhangi bir eklenti gibi bir html belgesine resim eklemek, EMBED yapısını (ek parametrelerle) kullanmaya gelir. Örneğin, aşamalı bir görüntü aktarım yönteminin kullanılacağı anlamına gelir. Yani, örneğimizde (139 KB boyutunda bir dosya), ilk önce kaba bir görüntünün oluşturulacağı yalnızca 250 bayt aktarılır, ardından 500 bayt yüklendikten sonra görüntü güncellenir ( bu, LIMIT değerine ulaşılana kadar devam eder).

Daha iyi bir görüntü elde etmek istiyorsanız sağ tuş ile açılan menüden İyileştir seçeneğini seçmeniz gerekmektedir (Şekil 9). Dört indirmede, görüntünün tamamı tam olarak yüklenecektir.

9

sonuçlar

Böylece, JPEG2000 nesnel olarak gösterir En iyi skorlar JPEG'den yalnızca yüksek sıkıştırma oranlarında. 10-20 kez sıkıştırıldığında çok fazla fark hissedilmez. Yaygın formatın yerini alabilecek mi yoksa basitçe rekabet edebilecek mi? Yakın gelecekte - pek olası değil, çoğu durumda JPEG tarafından sağlanan kalite / boyut oranı oldukça kabul edilebilir. Ve JPEG2000'in görsel olarak aynı kalitede sağladığı %10-20'lik ek sıkıştırmanın popülaritesini artırması pek olası değildir.

Öte yandan, ışığa duyarlı matrislerin boyutları her yıl düzenli olarak arttığından ve görüntüleri belleğe yerleştirmek giderek zorlaştığından, dijital kamera üreten şirketler yeni formata büyük ilgi gösteriyor. Ve sonra yeni format daha yaygın hale gelecek ve kim bilir, belki bir süre sonra JPEG2000, JPEG'e eşit olacak. Her durumda, Analog Micro Devices yakın zamanda donanım düzeyinde yeni bir teknoloji kullanarak sıkıştırma / açma işleminin uygulandığı özel bir çip yayınladı ve ABD Savunma Bakanlığı, casus uydulardan elde edilen fotoğrafları kaydetmek için zaten aktif olarak yeni bir format kullanıyor.

Gerçekler ve varsayımlar

1.JPEG açıldığında kalitesini kaybeder ve yeniden kaydetme dosya.

Doğru değil. Kalite, yalnızca görüntünün kaydedildiği sıkıştırma oranından daha düşük bir sıkıştırma oranı seçildiğinde kaybolur.

2. JPEG, bir dosyayı düzenlerken kalitesini kaybeder.

Hakikat. Değiştirilen dosyayı kaydettiğinizde, tüm dönüştürmeler yeniden gerçekleştirilir - bu nedenle sık sık görüntü düzenleme yapmaktan kaçının. Bu sadece dosya kapatıldığında geçerlidir; dosya açık kalırsa endişeye mahal yoktur.

3. Farklı programlarda aynı parametrelerle sıkıştırmanın sonucu aynı olacaktır.

Doğru değil. Farklı programlar, kullanıcı tarafından girilen değerleri farklı yorumlar. Örneğin, bir programda kaydedilen görüntünün kalitesi (örneğin Photoshop'ta olduğu gibi), diğerinde - sıkıştırma derecesi (karşılıklı) belirtilir.

4. Kurulum sırasında maksimum kalite görüntü kalite kaybı olmadan kaydedilir.

Doğru değil. JPEG her zaman kayıpla sıkıştırır. Ancak, örneğin %100 yerine %90 kalitenin ayarlanması, algılanan kalite düşüşünden daha büyük bir dosya boyutu küçültmesiyle sonuçlanır.

5. Herhangi JPEG dosyası JPEG formatını anlayan herhangi bir düzenleyicide açılabilir.

Doğru değil. Bu tür JPEG, progresif (JPEG) gibi bazı editörler anlamaz.

6. JPEG şeffaflığı desteklemez.

Hakikat. Bazen görüntünün bir kısmı saydam gibi görünebilir, ancak aslında rengi html sayfasının arka plan rengiyle eşleşecek şekilde seçilir.

7. JPEG, GIF'den daha iyi sıkıştırır.

Doğru değil. Onlarda var farklı alan başvuru. Genel olarak, JPEG'e dönüştürdükten sonra tipik bir GIF görüntüsü daha büyük bir boyuta sahip olacaktır.

JPEG2000 ve JPEG

7
1. Yirmi ila otuz kat sıkıştırmada, JPEG2000 ve JPEG yaklaşık olarak aynı kaliteyi verir (bu arada Photoshop sıkıştıramaz normal fotoğraf bu sınırdan fazla).

2. Daha fazla sıkıştırma ile JPEG kalitesi 2000, JPEG'den önemli ölçüde daha yüksektir, bu da fazla kayıp olmadan 50 kata kadar ve biraz kayıpla (İnternet için görüntülerden bahsediyoruz) - 100'e ve hatta 200'e kadar sıkıştırılmasına izin verir.

3. Düzgün bir renk değişiminin olduğu alanlarda yüksek sıkıştırma oranları ile görüntü, basit bir JPEG için tipik olan bloklu yapıyı elde etmez. JPEG2000 ayrıca keskin kenarları hafifçe lekeliyor ve yuvarlatıyor - fotoğraflara bakın (Şek. 7 ve 8).

Farklı sıkıştırma derecelerine sahip bir test dosyasının sıkıştırma sonuçlarını gösterir (solda - Photoshop'ta JPG formatında, sağda - JPEG2000 formatında). Şekildeki görüntü için 7, 20, 40, 70 ve 145 sıkıştırma oranları seçilmiştir (JPEG2000'de kaydedilirken açıkça belirtilebilirler), derece JPG sıkıştırma dosya boyutu, JPEG2000 tarafından sıkıştırıldıktan sonraki ile aynı olacak şekilde seçilmiştir. Dedikleri gibi, sonuçlar açıktır. Netlik için, görüntü üzerinde daha keskin ayrıntılara sahip (10, 20, 40 ve 80 sıkıştırma oranlarıyla) ikinci bir deney yapıldı. Avantaj yine JPEG2000 tarafındadır (Şekil 8).

8

4. Aslında, farklı çözünürlükteki kopyalar tek bir JPEG2000 dosyasında saklandığından

Yani internette resim galerileri oluşturanlar için küçük resimler oluşturmaya gerek yoktur.

5. Bozulma olmadan sıkıştırma (kayıpsız mod) özellikle ilgi çekicidir. Yani, test dosyası Photoshop'tan LZW sıkıştırması ile 827 KB ve sıkıştırılmış JPEG2000 - 473 KB aldı.

6. JPEG ile karşılaştırıldığında, daha gelişmiş adaşı, önemli ölçüde daha fazla sistem kaynağı tüketir. Ancak son birkaç yılda önemli ölçüde artan bilgisayarların gücü, görüntü sıkıştırma sorunlarını yeni bir yöntemle başarılı bir şekilde çözmeyi mümkün kılıyor.

7. Tarayıcılarda JPEG2000 desteği eksikliği. Bu tür görüntüleri görüntülemek için oldukça büyük bir eklenti modülü (1.2 MB) indirmeniz gerekir.

8. Görüntüleri yeni biçimde kaydetmek için ücretsiz yazılım eksikliği.

Serbestçe erişilebilen dergiler.

Aynı konuda:


Kayıplı arşivleme algoritmalarıyla ilgili sorunlar

Görüntüleri arşivlemek için önce tanıdık algoritmalar kullanıldı. Yedekleme sistemlerinde, dağıtım oluştururken vb. kullanılanlar ve kullanılanlar. Bu algoritmalar bilgileri değişmeden arşivledi. Ancak son yıllardaki ana eğilim, yeni görüntü sınıflarının kullanılması olmuştur. Eski algoritmalar artık arşivleme gereksinimlerini karşılamıyor. “Bir bakışta” bariz fazlalıkları olmasına rağmen, birçok görüntü pratik olarak sıkıştırılmadı. Bu, yeni bir tür algoritmanın - kayıplı sıkıştırma algoritmalarının - yaratılmasına yol açtı. Kural olarak, arşivleme oranı ve dolayısıyla bunlardaki kalite kaybı derecesi ayarlanabilir. Bu, boyut ve görüntü kalitesi arasında bir ödünleşimdir.

Bilgisayar grafiklerinin ciddi sorunlarından biri, görüntü kalitesi kaybını değerlendirmek için yeterli bir kriterin henüz bulunamamasıdır. Ve sürekli olarak kaybolur - dijitalleştirme sırasında, sınırlı bir renk paletine aktarırken, baskı için başka bir renk temsil sistemine aktarırken ve özellikle bizim için önemli olan, kayıplarla arşivleme yaparken. Basit bir kritere örnek verilebilir: piksel değerlerinin standart sapması (L 2 ölçü veya ortalama kare - RMS):

Buna göre, parlaklık sadece %5 düşürüldüğünde görüntü ciddi şekilde zarar görecektir (göz bunu fark etmeyecektir - parlaklık ayarı farklı monitörler için çok daha fazla değişir). Aynı zamanda, “kar” içeren görüntüler - bireysel noktaların renginde keskin bir değişiklik, zayıf çizgiler veya “hare” “neredeyse değişmemiş” olarak kabul edilecektir (Nedenini açıklayın?). Diğer kriterlerin de hoş olmayan yanları vardır.

Örneğin, maksimum sapmayı düşünün:

Bu ölçü, tahmin edebileceğiniz gibi, tek tek piksellerin vuruşuna karşı son derece hassastır. Onlar. tüm görüntüde, yalnızca bir pikselin değeri önemli ölçüde değişebilir (ki bu gözle neredeyse algılanamaz), ancak bu ölçüye göre görüntü ciddi şekilde zarar görecektir.

Şimdi pratikte kullanılan ölçü, tepeden tepeye sinyal-gürültü oranı (PSNR) olarak adlandırılır.

Bu ölçü aslında standart sapmaya benzer, ancak ölçeğin logaritmik ölçeği nedeniyle kullanılması biraz daha uygundur. Standart sapma ile aynı dezavantajlara sahiptir.

Görüntü kalitesindeki kayıp en iyi gözlerimiz tarafından değerlendirilir. Arşivleme, orijinal ve sıkıştırılmamış görüntüleri gözle ayırt etmenin imkansız olduğu mükemmel olarak kabul edilir. İyi - hangi resimlerin arşivlendiğini anlayabildiğinizde, yalnızca yan yana iki resmi karşılaştırabilirsiniz. Sıkıştırma oranındaki bir artışla, kural olarak, bu algoritmanın karakteristik yan etkileri fark edilir hale gelir. Uygulamada, mükemmel kalitede koruma ile bile, görüntüde düzenli, özel değişiklikler yapılabilir. Bu nedenle, daha sonra yüksek kalitede basılacak veya görüntü tanıma programları tarafından işlenecek görüntülerin sıkıştırılması için kayıplı arşivleme algoritmaları önerilmez. Daha önce de söylediğimiz gibi, bu tür görüntülerde hoş olmayan etkiler, basit görüntü ölçekleme ile bile ortaya çıkabilir. JPEG algoritması

JPEG, en yeni ve en güçlü algoritmalardan biridir. Uygulamada, tam renkli görüntüler için fiili standarttır. Algoritma, parlaklığın ve rengin nispeten yumuşak bir şekilde değiştiği 8x8 alanlarla çalışır. Sonuç olarak, böyle bir bölgenin matrisi kosinüs cinsinden bir çift seri halinde genişletildiğinde (aşağıdaki formüllere bakın), yalnızca ilk katsayılar anlamlıdır. Böylece, JPEG'de sıkıştırma, görüntüdeki renklerde yumuşak değişiklikler pahasına gerçekleştirilir.

Bir grup fotoğraf uzmanı tarafından özellikle 24 bit görüntüleri sıkıştırmak için geliştirilen bir algoritma. JPEG - Ortak Fotoğraf Uzman Grubu - ISO - Uluslararası Standardizasyon Örgütü içindeki bir bölüm. Algoritmanın adı ["jei" peg] olarak okunur. Genel olarak, algoritma, bazı yeni katsayılar matrisi elde etmek için görüntü matrisine uygulanan ayrı bir kosinüs dönüşümüne (bundan sonra DCT olarak anılacaktır) dayanmaktadır. Orijinal görüntüyü elde etmek için ters bir dönüşüm uygulanır.

DCT, görüntüyü belirli frekansların genliklerine ayrıştırır. Böylece, dönüştürürken, birçok katsayının sıfıra yakın veya eşit olduğu bir matris elde ederiz. Ek olarak, insan görüşünün kusurlu olması nedeniyle, katsayıları görüntü kalitesinde gözle görülür bir kayıp olmadan daha kabaca tahmin etmek mümkündür.

Bunun için kuantizasyon kullanılır. çok basit durum sağa aritmetik bir bitsel kaydırmadır. Bu dönüşüm ile bazı bilgiler kaybolur, ancak büyük sıkıştırma oranları elde edilebilir.

Algoritma nasıl çalışır?

Öyleyse, algoritmaya daha yakından bakalım. Diyelim ki 24 bitlik bir görüntüyü sıkıştırıyoruz.

Aşama 1.

Görüntüyü renkten çeviriyoruz RGB alanı, noktanın renginin kırmızı (Kırmızı), yeşil (Yeşil) ve mavi (Mavi) bileşenlerinden sorumlu bileşenlerle, YCrCb renk uzayında (bazen YUV olarak adlandırılır).

İçinde Y parlaklık bileşenidir ve Cr, Cb renkten sorumlu bileşenlerdir (kromatik kırmızı ve kromatik mavi). İnsan gözünün renge karşı parlaklıktan daha az duyarlı olması nedeniyle, Cr ve Cb bileşenleri için dizileri yüksek kayıplarla ve buna bağlı olarak yüksek sıkıştırma oranlarıyla arşivlemek mümkün hale gelir. Bu dönüşüm televizyonda uzun süredir kullanılmaktadır. Renkten sorumlu sinyallere daha dar bir frekans bandı atanır.

RGB renk alanından YCrCb renk alanına basitleştirilmiş çeviri, bir geçiş matrisi kullanılarak temsil edilebilir:

Ters dönüşüm, YUV vektörünün ters matris ile çarpılmasıyla gerçekleştirilir.

Adım 2.

Orijinal görüntüyü 8x8 matrislere bölün. Her bileşen için ayrı ayrı - 8 bitten üç adet çalışan DCT matrisi oluşturuyoruz. Daha yüksek sıkıştırma oranlarında bu adım biraz daha zor olabilir. Görüntü Y bileşenine bölünür - ilk durumda olduğu gibi ve Cr ve Cb bileşenleri için matrisler bir çizgi ve bir sütun aracılığıyla yazılır. Onlar. orijinal 16x16 matrisinden yalnızca bir çalışan DCT matrisi elde edilir. Aynı zamanda kolay görüleceği gibi görüntünün renk bileşenleri ile ilgili faydalı bilgilerin 3/4'ünü kaybediyor ve aynı anda iki katı sıkıştırma elde ediyoruz. Bunu YCrCb uzayında çalışarak yapabiliriz. Uygulamanın gösterdiği gibi, bunun elde edilen RGB görüntüsü üzerinde çok az etkisi vardır.

Aşama 3.

Her iş matrisine DCT uygularız. Bu durumda, sol üst köşedeki katsayıların görüntünün düşük frekans bileşenine ve sağ altta - yüksek frekans bileşenine karşılık geldiği bir matris elde ederiz.

Basitleştirilmiş bir biçimde, bu dönüşüm aşağıdaki gibi temsil edilebilir:

Adım 4.

nicelleştiriyoruz. Temel olarak, bu sadece çalışma matrisini niceleme matrisi elemanına elemana bölmektir. Her bileşen için (Y, U ve V), genel durumda, kendi niceleme matrisi q (bundan böyle MK olarak anılacaktır) belirtilir. Bu adımda sıkıştırma oranı kontrol edilir ve en büyük kayıp meydana gelir. MK'yi büyük katsayılarla belirterek daha fazla sıfır ve dolayısıyla daha büyük bir sıkıştırma oranı elde edeceğimiz açıktır.

Kuantizasyon ayrıca algoritmanın belirli etkileriyle de ilişkilidir. Gama katsayısının büyük değerlerinde, düşük frekanslardaki kayıp o kadar büyük olabilir ki görüntü 8x8 karelere bölünür. Yüksek frekanslardaki kayıplar, keskin bir renk geçişi ile konturların etrafında bir tür "halo" oluştuğunda, sözde "Gibbs etkisi" olarak kendini gösterebilir.

Adım 5.

8x8 matrisini "zikzak" tarama kullanarak 64 elemanlı bir vektöre çeviriyoruz, yani. (0,0), (0,1), (1,0), (2,0) ...

Böylece, vektörün başlangıcında, aşağıdakilere karşılık gelen matrisin katsayılarını elde ederiz. düşük frekanslar, ve sonunda - yüksek.

Adım 6.

Grup kodlama algoritmasını kullanarak vektörü sararız. Bu durumda, "atlama"nın atlanan sıfırların sayacı olduğu ve "sayı"nın bir sonraki hücreye konulması gereken değer olduğu türde (atlama, sayı) çiftler elde ederiz. Böylece, 42 3 0 0 0 -2 0 0 0 0 1 ... vektörü çiftler halinde katlanır (0.42) (0.3) (3, -2) (4.1) ....

Adım 7.

Elde edilen çiftleri sabit bir tabloyla Huffman kodlaması ile sarın.

Bu algoritmadaki görüntü geri yükleme işlemi tamamen simetriktir. Yöntem, bazı görüntüleri ciddi bir kayıp olmadan 10-15 kez sıkıştırmanıza izin verir.


JPEG algoritmasında kullanılan işlem hattı.

Algoritmanın önemli olumlu yönleri şunlardır:

  1. Sıkıştırma oranı ayarlanır.
  2. Hafta sonu renkli bir görüntü nokta başına 24 bit olabilir.
Algoritmanın dezavantajları şunlardır:
  1. Sıkıştırma oranı arttıkça görüntü ayrı karelere (8x8) bölünür. Bunun nedeni, kuantizasyon sırasında düşük frekanslarda büyük kayıpların meydana gelmesidir ve orijinal verileri geri yüklemek imkansız hale gelir.
  2. Gibbs etkisi kendini gösterir - keskin renk geçişlerinin sınırları boyunca haleler.
Belirtildiği gibi, JPEG nispeten yakın zamanda standart hale getirildi - 1991'de. Ancak o zaman bile daha az kalite kaybıyla daha güçlü sıkıştıran algoritmalar vardı. Gerçek şu ki, standart geliştiricilerin eylemleri, o sırada var olan teknolojinin gücü ile sınırlıydı. Yani, kişisel bir bilgisayarda bile, algoritmanın ortalama bir görüntü üzerinde bir dakikadan daha az çalışması ve donanım uygulamasının nispeten basit ve ucuz olması gerekiyordu. Algoritmanın simetrik olması gerekiyordu (dekompresyon süresi yaklaşık olarak arşivleme süresine eşittir).

İkinci gereklilik, dijital kameralar gibi oyuncakların - küçük bir video kamera boyutundaki cihazların 10-20 MB PCMCIA flash kartında 24 bit fotoğraflar çekmesini mümkün kıldı. Daha sonra bu kart dizüstü bilgisayarınızdaki yuvaya takılır ve ilgili program görüntüleri okumanızı sağlar. Doğru olmaz mıydı, algoritma asimetrik olsaydı, cihaz “yeniden şarj olana” kadar uzun bir süre beklemek tatsız olurdu - görüntüyü sıkıştırır.

JPEG'in pek hoş olmayan bir başka özelliği de, genellikle yatay ve dikey çizgiler ekranda kesinlikle görünmezler ve sadece hareli desen şeklinde basıldığında görünebilirler. Bir eğik baskı raster görüntünün yatay ve dikey şeritleri üzerine bindirildiğinde oluşur. Bu sürprizler nedeniyle JPEG'in baskı endüstrisinde aktif olarak kullanılması önerilmez, ayar yüksek oranlar... Ancak, insan görüntüleme amaçlı görüntüleri arşivlerken, şu anda yeri doldurulamaz.

JPEG'in yaygın kullanımı uzun zaman belki de yalnızca 24 bitlik görüntülerle çalıştığı gerçeğiyle sınırlandırılmıştır. Bu nedenle, resmi ekranda kabul edilebilir kalitede görüntülemek için geleneksel monitör 256 renk paletinde, uygun algoritmaların ve dolayısıyla belirli bir sürenin kullanılmasını gerektiriyordu. Oyunlar gibi seçici bir kullanıcıyı hedefleyen uygulamalarda bu tür gecikmeler kabul edilemez. Ek olarak, örneğin sahip olduğunuz görüntüler 8 bit GIF formatında 24 bit JPEG'e dönüştürülür ve ardından tekrar görüntülenmek üzere GIF'e dönüştürülürse, her iki dönüştürmede de kalite kaybı iki kez meydana gelir. Bununla birlikte, arşivlerin boyutundaki kazanç genellikle çok büyüktür (3-20 kat!), Ve kalite kaybı o kadar küçüktür ki, görüntüleri JPEG'de depolamak çok verimlidir.

Bu algoritmanın modifikasyonları hakkında birkaç söz söylenmelidir. JPEG bir ISO standardı olmasına rağmen, dosya formatı sabitlenmemiştir. Üreticiler bundan yararlanarak kendi uyumsuz formatlarını oluştururlar ve bu nedenle algoritmayı değiştirebilirler. Böylece, ISO tarafından önerilen algoritmanın iç tabloları, kendileriyle değiştirilir. Ek olarak, bir kayıp oranı belirlenirken biraz kafa karışıklığı vardır. Örneğin, test ederken, “mükemmel” kalite, “%100” ve “10 puan”ın önemli ölçüde farklı resimler verdiği ortaya çıkıyor. Aynı zamanda “%100” kalite kayıpsız sıkıştırma anlamına gelmez. Belirli uygulamalar için JPEG seçenekleri de vardır.

Bir ISO standardı olarak JPEG, bilgisayar ağları üzerinden görüntü alışverişinde daha yaygın olarak kullanılmaktadır. JPEG algoritması Quick Time, PostScript Level 2, Tiff 6.0 formatlarında desteklenmektedir ve şu anda multimedya sistemlerinde önemli bir yer tutmaktadır.

algoritma özellikleri JPEG:

Görüntü sınıfı: Ani renk geçişleri olmayan tam renkli 24 bit veya gri tonlamalı görüntüler (fotoğraflar).

Simetri: 1

Özellikler: Bazı durumlarda, algoritma görüntüdeki keskin yatay ve dikey kenarların etrafında bir “halo” oluşturur (Gibbs etkisi). Ayrıca sıkıştırma oranı yüksek olduğunda görüntü 8x8 piksellik bloklara bölünür.

fraktal algoritma

Yöntem fikri

Fraktal arşivleme, görüntüyü daha kompakt bir biçimde - Yinelenen İşlev Sisteminin (bundan sonra IFS olarak anılacaktır) katsayılarını kullanarak temsil ettiğimiz gerçeğine dayanmaktadır. Arşivleme sürecinin kendisine bakmadan önce, IFS'nin bir imajı nasıl oluşturduğuna bir göz atalım, yani. dekompresyon süreci.

Kesin olarak konuşursak, IFS, bizim durumumuzda bir görüntüyü diğerine dönüştüren bir dizi üç boyutlu afin dönüşümdür. Üç boyutlu uzaydaki noktalar dönüştürülür (x_koordinatı, y_koordinatı, parlaklık).

Bu süreç en açık şekilde Barnsley tarafından Fraktal Görüntü Sıkıştırma adlı kitabında gösterilmiştir. Orada, orijinal resmin görüntülendiği bir ekrandan ve görüntüyü başka bir ekrana yansıtan bir mercek sisteminden oluşan bir Fotokopi Makinesi konsepti tanıtıldı:

  • Lensler görüntünün bir kısmını yansıtabilir serbest çalışma yeni görüntüde başka bir yerde.
  • Alanlar hangisinde görüntüler yansıtılır kesişme.
  • Lens olabilir parlaklığı değiştir ve kontrastı azalt.
  • Lens olabilir ayna ve döndür görüntünün parçası.
  • Lens NS ölçeklemek(azalt) görüntü parçanızı.

Lensleri yerleştirerek ve özelliklerini değiştirerek ortaya çıkan görüntüyü kontrol edebiliriz. Makinenin çalışmasının bir yinelemesi, tasarım yardımıyla orijinal görüntüden yenisinin oluşturulması ve ardından yenisinin ilk görüntü olarak alınmasıdır. Yineleme sürecinde, değişmeyi bırakacak bir görüntü elde edeceğimiz iddia ediliyor. Yalnızca lenslerin konumuna ve özelliklerine bağlı olacaktır ve orijinal görüntüye bağlı olmayacaktır. Bu görüntünün adı “ sabit nokta" veya cazibe merkezi bu IFS'nin. Karşılık gelen teori, her IFS için tam olarak bir sabit nokta olduğunu garanti eder.

Mercek eşlemesi sıkıştırıcı olduğundan, her mercek açıkça şunları belirtir: kendine benzer imajımızdaki alanlar. Kendi kendine benzerlik sayesinde, herhangi bir büyütmede karmaşık bir görüntü yapısı elde ederiz. Bu nedenle, yinelenebilir işlevler sisteminin tanımladığı sezgisel olarak açıktır. fraktal(gevşek - kendine benzer matematiksel nesne).

En iyi bilinenleri iki IFS görüntüsüdür: Sierpinski Üçgeni ve Barnsley Eğreltiotu. “Sierpinski üçgeni” üç, “Barnsley eğreltiotu” ise dört afin dönüşümle (veya bizim terminolojimizde “mercekler”) tanımlanır. Her dönüşüm, kelimenin tam anlamıyla okunan baytlarla kodlanırken, onların yardımıyla oluşturulan görüntü birkaç megabayt alabilir.

Etkinlik: Görüntünün tamamını kaplayacak şekilde birleştirilecek ve her biri görüntünün tamamına benzeyen 4 alan çizin (eğreltiotu sapını unutmayın).

Yukarıdan, arşivleyicinin nasıl çalıştığı ve neden bu kadar uzun sürdüğü anlaşılır. Aslında fraktal sıkıştırma, bir görüntüde kendine benzer bölgelerin aranması ve bunlar için afin dönüşümlerin parametrelerinin belirlenmesidir.

=>
En kötü durumda, optimizasyon algoritması uygulanmazsa, farklı boyutlardaki tüm olası görüntü parçalarının bir numaralandırılması ve karşılaştırılması gerekecektir. Küçük görüntüler için bile, ayrılığı hesaba katarak, sıralanacak astronomik sayıda seçenek elde ediyoruz. Ayrıca, örneğin yalnızca belirli sayıda ölçekleme nedeniyle dönüşüm sınıflarının keskin bir şekilde daralması bile, zaman içinde gözle görülür bir kazanç sağlamaz. Ayrıca görüntü kalitesi de kayboluyor. Fraktal sıkıştırma alanındaki araştırmaların ezici çoğunluğu artık yüksek kaliteli bir görüntü elde etmek için gereken arşivleme süresini azaltmayı hedefliyor.

Tanım.

nerede a,b,c,d,e,f gerçek sayılar ve denir iki boyutlu afin dönüşüm.

Tanım. Şu şekilde temsil edilen dönüşüm

a, b, c, d, e, f, p, q, r, s, t, u reel sayılardır ve üç boyutlu afin dönüşüm olarak adlandırılır.

Tanım. X uzayında bir dönüşüm olsun. Noktaya ne denir sabit nokta(çekici) dönüşüm.

Tanım. Bir metrik uzayda (X, d) bir dönüşüme, eğer bir sayı varsa, daralma denir. s:, öyle ki

Yorum Yap: Resmi olarak, fraktal sıkıştırma için herhangi bir daralma eşlemesi kullanabiliriz, ancak gerçekte katsayılar üzerinde oldukça güçlü kısıtlamalarla birlikte yalnızca üç boyutlu afin dönüşümler kullanılır.

Teorem. (Sözleşme dönüşümü hakkında)

Tam bir metrik uzayda olsun (X, NS). O zaman bu dönüşümün tam olarak bir sabit noktası vardır ve herhangi bir nokta için dizi için yakınsar.

Bu teoremin daha genel bir formülasyonu yakınsamayı garanti eder.

Tanım. resim birim karede tanımlanan ve 0'dan 1'e kadar değerler alan bir S fonksiyonudur veya

Üç boyutlu afin dönüşüm şeklinde yazalım.

ve Kartezyen kare x'in kompakt bir alt kümesinde tanımlanır. Sonra yüzeyin bir kısmını aktaracak S bir vardiya ile bulunan bir alana (e, f) ve matris tarafından verilen döndürme

Ayrıca, değeri yorumlarsak S karşılık gelen noktaların parlaklığı olarak azalacaktır. P kez (dönüşüm sıkıştırıcı olmalıdır) ve vardiyaya geçiş Q.

Tanım. sonlu nüfus W etki alanlarında tanımlanan üç boyutlu afin dönüşümleri daraltma denir yinelenebilir işlevler sistemi ( IFS).

Yinelenen işlevler sistemi, sabit bir nokta olan bir görüntü ile benzersiz bir şekilde ilişkilendirilir. Böylece, sıkıştırma işlemi sistemin katsayılarının bulunmasından oluşur ve açma işlemi, elde edilen görüntü sabitlenene kadar sistemin yinelenmesidir ( sabit nokta IFS). Pratikte 7-16 tekrar yeterlidir. Alanlar aşağıda olarak anılacaktır sıralanmış, ve alanlar - ihtisas.

algoritma yapımı

Yukarıdan da anlaşılacağı gibi, fraktal algoritmanın sıkıştırılmasındaki ana görev, karşılık gelen afin dönüşümleri bulmaktır. En genel durumda, herhangi bir boyut ve şekildeki görüntü alanlarını çevirebiliriz, ancak bu durumda, şu anda bir süper bilgisayarda bile işlenemeyen, farklı parçaların varyantları üzerinde yinelenen astronomik sayıda elde ederiz.

V algoritmanın eğitim versiyonu aşağıda belirtildiği gibi, alan adlarında aşağıdaki kısıtlamalar yapılır:

  1. Tüm bölgeler kenarları görüntünün kenarlarına paralel olan karelerdir. Bu sınırlama oldukça katıdır. Aslında, tüm geometrik şekillere sadece karelerle yaklaşacağız.
  2. Bir alan alanını sıralanmış bir alana çevirirken, boyut küçültme gerçekleştirilir tam olarak iki kez... Bu, hem kompresörü hem de dekompresörü büyük ölçüde basitleştirir, çünkü küçük alanları ölçekleme görevi önemsiz değildir.
  3. Tüm alan blokları karelerdir ve sabit boyut... Görüntü, tek tip bir ızgara ile bir dizi etki alanı bloğuna bölünür.
  4. Etki alanı kapsamları alınır Hem X boyunca hem de Y boyunca "bir noktadan", bu da aramayı hemen 4 kat azaltır.
  5. Bir etki alanı alanını bir küpün sıra dönüşüne çevirirken, sadece 0 0, 90 0, 180 0 veya 270 0'da... Ayna yansımasına da izin verilir. Toplam olası dönüşüm sayısı (boş sayılır) 8'dir.
  6. Dikey olarak ölçekleme (sıkıştırma) (parlaklık) gerçekleştirilir sabit sayıda kez- 0.75.
Bu kısıtlamalar şunları yapmanızı sağlar:
  1. Oldukça büyük görüntülerde bile nispeten az sayıda işlem gerektiren bir algoritma oluşturun.
  2. Bir dosyaya yazmak için verileri temsil etmek çok kompakttır. IFS'deki her afin dönüşüm için ihtiyacımız var:
  • etki alanı bloğunun ofsetini ayarlamak için iki sayı. Giriş görüntülerini 512x512 ile sınırlarsak, her sayı için 8 bit yeterli olacaktır.
  • Bir etki alanı bloğunu bir sıra bloğuna çevirirken simetri dönüşümünü ayarlamak için üç bit.
  • Çeviri sırasında parlaklık kaymasını ayarlamak için 7-9 bit.
Blok boyutu bilgileri dosya başlığında saklanabilir. Böylece, bir afin dönüşüm için 4 bayttan daha az harcadık. Bloğun boyutuna bağlı olarak görüntüde kaç blok olacağını hesaplayabilirsiniz. Böylece, sıkıştırma derecesinin bir tahminini alabiliriz.

Örneğin, blok boyutu 8 piksel olan 512x512 piksel gri tonlamalı 256 renkli bir dosya için afin dönüşümler 4096 (512 / 8x512 / 8) olacaktır. Her biri 3.5 bayt gerektirir. Sonuç olarak, orijinal dosya 262144 (512x512) bayt ise (başlık hariç), katsayılı dosya 14336 bayt kaplayacaktır. Arşivleme oranı 18 katıdır. Aynı zamanda, katsayılı dosyanın da fazlalık olabileceğini ve kayıpsız bir arşivleme yöntemi, örneğin LZW kullanılarak arşivlenebileceğini hesaba katmıyoruz.

Önerilen kısıtlamaların dezavantajları:

  1. Tüm alanlar kare olduğundan, karelerden uzak nesnelerin (gerçek görüntülerde oldukça yaygın olan) benzerliğinden yararlanmak imkansızdır.
  2. Benzer şekilde, benzerlik katsayısı 2'den çok farklı olan görüntüdeki nesnelerin benzerliğini kullanamayacağız.
  3. Algoritma, aralarındaki açı 90 0'ın katı olmayan görüntüdeki nesnelerin benzerliğinden yararlanamayacaktır.
Bu ücret sıkıştırma hızı ve katsayıları bir dosyaya paketlemenin basitliği için.

Paketleme algoritmasının kendisi, tüm etki alanı bloklarını numaralandırmaya ve karşılık gelen her bir sıra bloğunu seçmeye indirgenmiştir. Aşağıda bu algoritmanın bir diyagramı bulunmaktadır.

for (tüm aralık blokları) (
min_mesafe = MaksimumMesafe;
r ij= görüntü-> CopyBlock (i, j);
for (tüm alan blokları) (// dönüşler ve negatifler ile.
akım = Akımın koordinatları. dönüşümler;
D = görüntü-> CopyBlock (geçerli);
akım_mesafe = R ij.L2mesafe (D);
if (geçerli_mesafe< min_distance) {
// En iyi oranlar daha kötüyse:
min_mesafe = akım_mesafe;
en iyi = akım;
}
) // Sonraki aralık
Save_Coectives_to_file (en iyi);
) // Sonraki etki alanı

Yukarıdaki algoritmadan da anlaşılacağı gibi, her rank bloğu için, tüm olası etki alanı bloklarıyla (simetri dönüşümünü geçenler dahil) kontrol ediyoruz, en küçük ölçülü L seçeneği buluyoruz. 2 (en küçük standart sapma) ve bu dönüşümün katsayılarını bir dosyaya kaydedin. Katsayılar (1) bulunan bloğun koordinatları, (2) simetri dönüşümünü (dönüşü, bloğun yansıması) karakterize eden 0 ila 7 arasında bir sayı ve (3) bu blok çifti için parlaklık kaymasıdır. Parlaklık kayması şu şekilde hesaplanır:

,

nerede r ij- rank bloğunun piksel değerleri ( r), a NS ij- alan bloğunun piksellerinin değerleri ( NS). Bu durumda, önlem şu şekilde kabul edilir:

.

L'nin karekökünü hesaplamıyoruz 2 ölçün ve bölmeyin n, bu dönüşümler monoton olduğundan ve ekstremumu bulmamıza engel olmayacağından, ancak her blok için iki daha az işlem yapabileceğiz.

Gri tonlamalı 256 renkli 512x512 piksel ve blok boyutu 8 piksel olan bir görüntüyü sıkıştırmak için gereken işlem sayısını hesaplayalım:

Böylece sıkıştırma algoritmasının işlem sayısını oldukça hesaplanabilir (birkaç saat içinde de olsa) değerlere indirmeyi başardık.

Görüntü sıkıştırma algoritması diyagramı

Fraktal sıkıştırma algoritmasının dekompresyonu son derece basittir. Katsayıları sıkıştırma aşamasında elde edilen üç boyutlu afin dönüşümlerinin birkaç yinelemesini gerçekleştirmek gerekir.

Kesinlikle herhangi bir görüntü (örneğin, kesinlikle siyah) ilk görüntü olarak alınabilir, çünkü karşılık gelen matematiksel aparat bize IFS yinelemeleri sırasında elde edilen görüntü dizisinin hareketsiz bir görüntüye (orijinal olana yakın) yakınsamasını garanti eder. Bunun için tipik olarak 16 yineleme yeterlidir.

Dosyadan tüm blokların katsayılarını okuyun;
İstenilen boyutta siyah bir görüntü oluşturun;
Kadar (görüntü hareket etmeyecek) (
(her aralık (R)) için (
D = resim-> CopyBlock (D_coord_for_R);
için (her piksel ( ben, j) blokta (
r ij = 0.75 NS ben + Ö R;
) // Sonraki piksel
) // Sonraki blok
) // Sonuna kadar

Blokların katsayılarını yazdığımızdan beri r ij(tartıştığımız gibi, bizim özel durumumuzda aynı büyüklükteki karelerdir) sürekli, afin dönüşümü kullanarak görüntüyü bölme ızgarasının kareleriyle sırayla doldurduğumuz ortaya çıktı.

Hesaplayabileceğiniz gibi, geri yükleme sırasında gri tonlamalı bir görüntünün bir pikseli başına işlem sayısı alışılmadık derecede küçüktür (N işlem “+”, 1 işlem “*”, burada N yineleme sayısıdır, yani 7-16). Bu nedenle, fraktal algoritma için görüntülerin sıkıştırılması, örneğin 64 “+” işlemin ve 64 “? ”(RLE adımları ve Huffman kodlaması hariç!). Bu durumda, fraktal algoritma için çarpma, her blok için bir rasyonel sayı ile gerçekleşir. Bu, ilk olarak, kayan nokta aritmetiğinden önemli ölçüde daha hızlı olan tamsayılı rasyonel aritmetiği kullanabileceğimiz anlamına gelir. İkinci olarak, bir vektörün bir sayı ile çarpımı, JPEG durumunda gerekli olan iki vektörün nokta çarpımına kıyasla, genellikle işlemci mimarisine (SGI işlemciler, Intel MMX ...) dahil edilen daha basit ve daha hızlı bir işlemdir. . Tam renkli bir görüntü için durum niteliksel olarak değişmez, çünkü her iki algoritma da başka bir renk uzayına çeviri kullanır.

Kayıpların tahmini ve düzenleme yöntemleri

Algoritmanın basitleştirilmiş versiyonunun bir özetinde birçok önemli soru atlanmıştır. Örneğin, algoritma görüntünün herhangi bir parçası için benzer bir tane bulamazsa ne olur? Oldukça açık bir çözüm, bu parçayı daha küçük parçalara bölmek ve onları aramaya çalışmaktır. Aynı zamanda, bu prosedürün süresiz olarak tekrarlanamayacağı açıktır, aksi takdirde gerekli dönüşümlerin sayısı o kadar büyük olur ki, algoritma bir sıkıştırma algoritması olmaktan çıkar. Bu nedenle, görüntünün bir kısmında kaybolmaya izin veriyoruz.

Fraktal sıkıştırma algoritması ve diğer kayıplı sıkıştırma algoritmaları için sıkıştırma oranını ve kayıp oranını ayarlamanın mümkün olacağı mekanizmalar çok önemlidir. Bugüne kadar, oldukça büyük bir bu tür yöntemler seti geliştirilmiştir. İlk olarak, sıkıştırma oranının sabit bir değerden düşük olmamasını bilerek, afin dönüşümlerin sayısını sınırlamak mümkündür. İkinci olarak, işlenmiş parça ile en iyi yaklaşımı arasındaki farkın belirli bir eşik değerinden daha yüksek olduğu bir durumda, bu parçanın ezilmesini (bunun için birkaç “mercek” gereklidir) talep etmek mümkündür. Üçüncüsü, örneğin dört noktadan daha küçük parçaları bölmeyi yasaklayabilirsiniz. Bu koşulların eşik değerlerini ve önceliğini değiştirerek, görüntünün sıkıştırma oranını bit bazında herhangi bir sıkıştırma oranına kadar kontrol etmek için çok esnek olacağız. Bu esnekliğin en yakın rakibi olan JPEG algoritmasından çok daha yüksek olacağını unutmayın.

Fraktal algoritmanın özellikleri :

Sıkıştırma Oranları: 2-2000 (Kullanıcı tanımlı).

Görüntü sınıfı: Ani renk geçişleri olmayan tam renkli 24 bit veya gri tonlamalı görüntüler (fotoğraflar). Daha büyük öneme sahip alanların (algı için) daha zıt ve keskin olması ve daha az öneme sahip alanların - düşük kontrastlı ve bulanık olması arzu edilir.

Simetri: 100-100000

Özellikler: Fermuarı açarken görüntüyü serbestçe ölçekleyebilir, "merdiven efekti" görünümü olmadan 2-4 kez büyütebilir. Sıkıştırma derecesi arttıkça, görüntüdeki blokların sınırlarında “bloklu” bir etki belirir.

Özyinelemeli (dalga) algoritma

Özyinelemeli sıkıştırmanın İngilizce adı dalgacıktır. Rusça'ya dalga sıkıştırması ve patlamaları kullanan sıkıştırma olarak çevrilir. Bu tür arşivleme uzun zamandır bilinmektedir ve doğrudan alanların tutarlılığını kullanma fikrinden kaynaklanmaktadır. Algoritma, yumuşak geçişlerle renkli ve siyah beyaz görüntülere odaklanır. Röntgen gibi resimler için idealdir. Sıkıştırma oranı ayarlanır ve 5-100 aralığında değişir. Keskin kenarlarda, özellikle köşegen boyunca geçenlerde daha yüksek bir katsayı ayarlamaya çalıştığınızda, bir “merdiven efekti” belirir - farklı parlaklıktaki adımlar, birkaç piksel boyutunda.

Algoritmanın fikri, farkı bir dosyaya kaydetmemizdir - görüntüdeki komşu blokların ortalama değerleri arasındaki sayı, genellikle 0'a yakın değerler alır.

yani iki sayı a 2ben ve a 2ben +1 her zaman olarak temsil edilebilir B 1 ben=(a 2ben +a 2ben +1 ) / 2 ve B 2 ben=(a 2ben -a 2ben +1 ) / 2. Benzer şekilde, sıra a bendiziye ikili olarak çevrilebilir B 1,2 ben.

analiz edelim özel örnek: 8 piksel parlaklık değerinden oluşan bir diziyi sıkıştıralım ( a ben): (220, 211, 212, 218, 217, 214, 210, 202). Aşağıdaki dizileri elde ederiz B 1 ben, ve B 2 ben: (215.5, 215, 215.5, 206) ve (4.5, -3, 1.5, 4). değerlere dikkat edin B 2 ben0'a yeterince yakın. B 1 ben nasıl a ben... Bu eylem, özyinelemeli olarak gerçekleştirilir, bu nedenle algoritmanın adı. (215.5, 215, 215.5, 206): (215.25, 210.75) (0.25, 4.75). Elde edilen katsayıları, tamsayılara yuvarlanmış ve sıkıştırılmış, örneğin, sabit tablolarla Huffman algoritmasını kullanarak bir dosyaya koyabiliriz.

Dönüşümümüzü zincire yalnızca iki kez uyguladığımıza dikkat edin. Gerçekte, dalgacık dönüşümünü 4-6 kez uygulayabiliriz. Ayrıca, düzgün olmayan adım Huffman tabloları kullanılarak ek sıkıştırma elde edilebilir (yani, tablodaki en yakın değer için Huffman kodunu saklamamız gerekecek). Bu teknikler, fark edilir sıkıştırma oranları elde etmenizi sağlar.

Egzersiz:(215, 211) (0, 5) (5, -3, 2, 4) zincirini dosyadan geri yükledik (örneğe bakın). Dalga sıkıştırma algoritmasının yeniden oluşturacağı sekiz piksel parlaklık değerinden oluşan bir dizi oluşturun.

2B veriler için algoritma benzer şekilde uygulanır. Parlaklığı olan 4 noktalı bir karemiz varsa a 2 ben, 2 j,a 2 ben +1, 2j,a 2 ben, 2 j +1, ve a 2 ben +1, 2 j +1, sonra

Orijinal B1 B2
resim B3 B4

Bu formülleri kullanarak, 512x512 piksellik bir görüntü için, ilk dönüşümden sonra, 256x256 elemanlı 4 matris elde ederiz:

-- Birincisi, tahmin edebileceğiniz gibi, görüntünün küçültülmüş bir kopyasını saklayacaktır. İkincisinde, yatay olarak piksel değerleri çiftlerinin ortalama farklılıkları. Üçüncüsü, dikey boyunca piksel değerleri çiftlerinin ortalama farklılıkları. Dördüncüsü, köşegen boyunca piksel değerlerindeki ortalama farklılıkları içerir. İki boyutlu duruma benzeterek, dönüşümümüzü tekrarlayabilir ve ilk matris yerine 128x128 boyutunda 4 matris alabiliriz. Dönüşümümüzü üçüncü kez tekrarlayarak, sonuç olarak: 4 matris 64x64, 3 matris 128x128 ve 3 matris 256x256. Uygulamada, bir dosyaya yazarken, elde edilen değerler son satır() genellikle ihmal edilir (hemen dosya boyutunun yaklaşık üçte birini kazanır - 1 - 1/4 - 1/16 - 1/64 ...).

Bu algoritmanın avantajları, görüntüyü ağ üzerinden iletirken görüntünün kademeli olarak "gelişme" olasılığını kolayca gerçekleştirmenize izin vermesine bağlanabilir. Ek olarak, aslında görüntünün başında bir küçük resim kopyasını sakladığımız için, başlığa göre "kaba" resmin görüntülenmesini kolaylaştırır.

JPEG ve fraktal algoritmanın aksine, bu yöntem bloklar halinde çalışmaz, örneğin 8x8 piksel. Daha doğrusu 2x2, 4x4, 8x8 vb. bloklarla çalışıyoruz. Ancak, bu bloklar için katsayıları bağımsız olarak kaydettiğimiz için, görüntüyü “mozaik” karelere bölmekten oldukça kolay kurtulabiliriz.

Dalga algoritması özellikleri:

Sıkıştırma Oranları: 2-200 (Kullanıcı Tanımlı).

Görüntü sınıfı: Fraktal ve JPEG gibi.

Simetri: ~1.5

Özellikler: Ayrıca sıkıştırma oranı yüksek olduğunda görüntü ayrı bloklara bölünür.

Çözüm

Sonuç olarak, yukarıda tartıştığımız çeşitli görüntü sıkıştırma algoritmalarının parametrelerini bir araya getiren tabloları ele alalım.

algoritma Sıkıştırmanın meydana geldiği görüntünün özellikleri
RLE Ardışık özdeş renkler: 2 2 2 2 2 2 15 15 15
LZW Özdeş zincirler: 2 3 15 40 2 3 15 40
Huffman Farklı renk frekansı: 2 2 3 2 2 4 3 2 2 2 4
CCITT-3 Görüntüde beyazın baskınlığı, tek renkle dolu geniş alanlar
özyinelemeli Pürüzsüz renk geçişleri ve keskin kenarlar yok
JPEG Keskin sınırlar yok
fraktal Görüntü öğeleri arasındaki benzerlik
algoritma Sıkıştırma kiti zaman simetrisi Ne için
odaklı
kayıplar Boyut
RLE 32, 2, 0.5 1 3.4 bit Numara 1B
LZW 1000, 4, 5/7 1.2-3 1-8 bit Numara 1B
Huffman 8, 1.5, 1 1-1.5 8 bit Numara 1B
CCITT-3 213(3), 5, 0.25 ~1 1 bit Numara 1B
JBIG 2-30 kez ~1 1 bit Numara 2B
Kayıpsız JPEG 2 kez ~1 24 bit, gri Numara 2B
JPEG 2-20 kez ~1 24 bit, gri Evet 2B
özyinelemeli sıkıştırma 2-200 kez 1.5 24 bit, gri Evet 2B
fraktal 2-2000 kez 1000-10000 24 bit, gri Evet 2.5D

Bir JPEG grafik görüntüsünü dönüştürme algoritması, görüntü üzerinde birbiri ardına sırayla gerçekleştirilen birkaç aşamadan oluşur:

- renk uzayı dönüşümleri,

- alt örnekleme,

- ayrık kosinüs dönüşümü (DCT),

- niceleme,

- kodlama.

Renk uzayını dönüştürme aşamasında, görüntü RGB renk uzayından YCbCr'ye dönüştürülür (burada Y parlaklıktır ve Cb ve Cr, görüntü noktasının renk farkı bileşenleridir):

uzay uygulaması YCbCr her zamanki yerine RGB insan görüşünün fizyolojik özellikleriyle, yani insan sinir sisteminin parlaklığa karşı çok daha büyük bir duyarlılığa sahip olmasıyla açıklanır ( Y) renk farkı bileşenlerinden (içinde bu durum Cb ve cr). Ters renk uzayı dönüşümü ( YCrCb v RGB) şu şekle sahiptir:

JPEG sıkıştırma algoritması, farklı renk düzlemi boyutlarına sahip görüntüleri sıkıştırır. ile belirtelim x ben ve ben genişlik ve yükseklik ben görüntünün renk düzlemi. İzin vermek x= maksimum(x ben), Y= maksimum(ben), her düzlem için katsayıları tanımlarız Selam= x/ x ben ve ben= Y/ ben... için en yüksek değer x ve Y JPEG algoritmasına göre 2 16'ya eşittir ve Selam ve ben- 2 2. Böylece renk düzlemlerinin genişliği ve yüksekliği, en büyük düzlemin boyutlarından 1 ila 4 kat daha küçük olabilir. Sıradan için RGB görüntülerde, tüm renk düzlemlerinin boyutları eşittir.

Aşağı örnekleme, düzlemlerin boyutlarının küçültülmesinden oluşur. cr ve Cb... En yaygın azalma 2 kat genişlik ve 2 kat yüksekliktir (bkz. Şekil 1). Bunun için cr ve Cb görüntü düzlemleri 2'ye 2 punto büyüklüğünde bloklara bölünür ve blok bir renk farkı bileşeni örneği ile değiştirilir (mevcut 4 örneğin yerine, her blok için aritmetik ortalamaları koyulur, bu da mümkün kılar orijinal görüntünün boyutunu 2 kat küçültmek için).

Şekil 1 - Yaygın altörnekleme türleri

Ardından, her bir renk alanı bileşeni için ayrı ayrı Y, Cb ve cr, bir doğrudan ayrık kosinüs dönüşümü gerçekleştirilir. Bunu yapmak için, görüntü 8 x 8 piksel boyutunda bloklara bölünür ve her blok aşağıdaki formüle göre dönüştürülür:

Ayrık bir kosinüs dönüşümünün kullanılması, bir görüntünün uzamsal temsilinden spektral bir temsile geçiş yapmanızı sağlar. Ters ayrık kosinüs dönüşümü:

Bundan sonra, alınan bilgileri nicelleştirmeye devam edebilirsiniz. Kuantizasyonun arkasındaki fikir, bir miktar bilgiyi atmaktır. İnsan gözünün yüksek frekanslara (özellikle renk farkı bileşenlerinin yüksek frekanslarına) daha az duyarlı olduğu bilinmektedir; çoğu fotoğrafik görüntü az sayıda yüksek frekanslı bileşen içerir. Ek olarak, yüksek frekansların ortaya çıkması, sayısallaştırma sürecinin bir sonucudur, yani. eşlik eden örnekleme ve gürültünün nicemlenmesinin ortaya çıkması nedeniyle. Bu aşamada sözde nicemleme tabloları- elemanları görüntü bloklarının karşılık gelen frekanslarına bölünmüş, 8'e 8 boyutunda pozitif tam sayılardan oluşan matrisler, sonuç bir tam sayıya yuvarlanır:



.

Dekuantizasyon işlemi, kuantizasyon işlemiyle aynı tabloları kullanır. Dekuantizasyon, nicelleştirilmiş frekansların nicemleme tablosunun karşılık gelen öğeleriyle çarpılmasından oluşur:

Böylece nicemleme faktörü arttıkça atılan bilgi miktarı da artar. Bunu bir örnekle daha ayrıntılı olarak ele alalım.

Kuantizasyondan önce blok:

3862, –22, –162, –111, –414, 12, 717, 490,

383, 902, 913, 234, –555, 18, –189, 236,

229, 707, –708, 775, 423, –411, –66, –685,

231, 34, –928, 34, –1221, 647, 98, –824,

–394, 128, –307, 757, 10, –21, 431, 427,

324, –874, –367, –103, –308, 74, –1017, 1502,

208, –90, 114, –363, 478, 330, 52, 558,

577, 1094, 62, 19, –810, –157, –979, –98

Niceleme tablosu (kalite 90):

24, 16, 16, 24, 40, 64, 80, 96,

16, 16, 24, 32, 40, 96, 96, 88,

24, 24, 24, 40, 64, 88, 112, 88,

24, 24, 32, 48, 80, 136, 128, 96,

32, 32, 56, 88, 112, 176, 168, 120,

40, 56, 88, 104, 128, 168, 184, 144,

80, 104, 128, 136, 168, 192, 192, 160,

112, 144, 152, 160, 176, 160, 168, 160

Kuantizasyondan sonra blok:

161, –1, –10, –5, –10, 0, 9, 5,

24, 56, 38, 7, –14, 0, –2, 3,

10, 29, –30, 19, 7, –5, –1, –8,

10, 1, –29, 1, –15, 5, 1, –9,

–12, 4, –5, 9, 0, 0, 3, 4,

8, –16, –4, –1, –2, 0, –6, 10,

3, –1, 1, –3, 3, 2, 0, 3,

5, 8, 0, 0, –5, –1, –6, –1

3864, –16, –160, –120, –400, 0, 720, 480,

384, 896, 912, 224, –560, 0, –192, 264,

240, 696, –720, 760, 448, –440, –112, –704,

240, 24, –928, 48,–1200, 680, 128, –864,

–384, 128, –280, 792, 0, 0, 504, 480,

320, –896, –352, –104, –256, 0,–1104, 1440,

240, –104, 128, –408, 504, 384, 0, 480,

560, 1152, 0, 0, –880, –160,–1008, –160

Niceleme tablosu (kalite 45):

144, 96, 88, 144, 216, 352, 456, 544,

104, 104, 128, 168, 232, 512, 536, 488,

128, 112, 144, 216, 352, 504, 616, 496,

128, 152, 192, 256, 456, 776, 712, 552,

160, 192, 328, 496, 600, 968, 912, 680,

216, 312, 488, 568, 720, 920, 1000, 816,

432, 568, 696, 776, 912, 1072, 1064, 896,

640, 816, 840, 872, 992, 888, 912, 880

Kuantizasyondan sonra blok:

27, 0, –2, –1, –2, 0, 2, 1,

4, 9, 7, 1, –2, 0, 0, 0,

2, 6, –5, 4, 1, –1, 0, –1,

2, 0, –5, 0, –3, 1, 0, –1,

–2, 1, –1, 2, 0, 0, 0, 1,

2, –3, –1, 0, 0, 0, –1, 2,

0, 0, 0, 0, 1, 0, 0, 1,

1, 1, 0, 0, –1, 0, –1, 0

Sonra engelle ters dönüşüm:

3888, 0, –176, –144, –432, 0, 912, 544,

416, 936, 896, 168, –464, 0, 0, 0,

256, 672, –720, 864, 352, –504, 0, –496,

256, 0, –960, 0,–1368, 776, 0, –552,

–320, 192, –328, 992, 0, 0, 0, 680,

432, –936, –488, 0, 0, 0,–1000, 1632,

0, 0, 0, 0, 912, 0, 0, 896,

640, 816, 0, 0, –992, 0, –912, 0

Gördüğünüz gibi, ilk durumda, değişiklik DC sıkıştırma sonucu katsayı 2'dir ve ikinci 26'da nicelleştirilmiş iken DC ikinci durumda katsayı birinciden 6 kat daha azdır.

Kodlama, sıkıştırmanın son aşamasıdır, bu sırada görüntü blokları, form blokları tarafından belirlenen kurala göre vektör formuna dönüştürülür:

0, 1, 5, 6, 14, 15, 27, 28,

2, 4, 7, 13, 16, 26, 29, 42,

3, 8, 12, 17, 25, 30, 41, 43,

9, 11, 18, 24, 31, 40, 44, 53,

10, 19, 23, 32, 39, 45, 52, 54,

20, 22, 33, 38, 46, 51, 55, 60,

21, 34, 37, 47, 50, 56, 59, 61,

35, 36, 48, 49, 57, 58, 62, 63

burada matrisin karşılık gelen bileşenlerinin vektör indeksleri bloğun elemanları olarak belirtilir. Bu durumda sıfır elemanı, önceki bloğun sıfır elemanı ile fark olarak kodlanır. Sıfır elemanlar gösterir DC, bloğun sabit bileşenini içerirler (diğer tüm AC elemanları genellikle gösterilir AC).

Elde edilen veriler daha sonra aritmetik kodlama veya Huffman algoritmasının bir modifikasyonu kullanılarak sıkıştırılır. Bu aşama, grafik görüntülerde steganografi açısından çok ilgi çekici değildir, bu nedenle incelememizin kapsamı dışındadır.

2000*1000 piksellik sıkıştırılmamış tam renkli bir görüntünün yaklaşık 6 megabayt boyutunda olacağını hesaplamak kolaydır. Profesyonel kameralardan veya tarayıcılardan elde edilen görüntülerden bahsedecek olursak yüksek çözünürlük, o zaman boyutları daha da büyük olabilir. Depolama kapasitesindeki hızlı büyümeye rağmen, çeşitli görüntü sıkıştırma algoritmaları hala çok önemlidir.
Her şey mevcut algoritmalar iki büyük sınıfa ayrılabilir:

  • Kayıpsız sıkıştırma algoritmaları;
  • Kayıplı sıkıştırma algoritmaları.
Kayıpsız sıkıştırma hakkında konuştuğumuzda, sıkıştırma algoritmasının tam tersi olan ve orijinal görüntüyü doğru bir şekilde geri yüklemenizi sağlayan bir algoritma olduğunu kastediyoruz. Kayıplı sıkıştırma algoritmaları için ters algoritma yoktur. Orijinaliyle tam olarak eşleşmeyen bir görüntüyü geri yükleyen bir algoritma vardır. Sıkıştırma ve kurtarma algoritmaları, görüntünün görsel kalitesini korurken yüksek sıkıştırma oranı elde etmek için seçilir.

Kayıpsız sıkıştırma algoritmaları

RLE algoritması
RLE serisindeki tüm algoritmalar çok basit bir fikre dayanmaktadır: tekrar eden eleman grupları bir çift ile değiştirilir (tekrar sayısı, tekrar eden eleman). Örnek olarak bir bit dizisi kullanan bu algoritmayı ele alalım. Bu sırada, sıfırlar ve birler grupları değişecektir. Ayrıca, gruplar genellikle birden fazla öğeye sahip olacaktır. Daha sonra 11111 000000 11111111 00 dizisi aşağıdaki sayı 5 6 8 2'ye karşılık gelecektir. Bu sayılar tekrar sayısını gösterir (sayma birlerden başlar), ancak bu sayıların da kodlanması gerekir. Tekrar sayısının 0 ile 7 arasında olduğunu varsayacağız (yani tekrar sayısını kodlamamız için 3 bit yeterlidir). Daha sonra yukarıda ele alınan dizi, aşağıdaki sayı dizisi 5 6 7 0 1 2 ile kodlanır. Orijinal diziyi kodlamak için 21 bitin gerekli olduğunu hesaplamak kolaydır ve sıkıştırılmış olarak RLE yöntemi bu dizi 18 bit alır.
Bu algoritma çok basit olmasına rağmen, etkinliği nispeten düşüktür. Ayrıca bazı durumlarda bu algoritmanın uygulanması dizinin uzunluğunda bir azalmaya değil, bir artışa yol açmaktadır. Örneğin, aşağıdaki 111 0000 11111111 00 dizisini göz önünde bulundurun. Karşılık gelen RL dizisi şöyle görünür: 3 4 7 0 1 2. Orijinal dizinin uzunluğu 17 bit, sıkıştırılmış dizinin uzunluğu 18 bittir.
Bu algoritma en çok siyah beyaz görüntüler için etkilidir. Ayrıca daha karmaşık algoritmaların sıkıştırılmasının ara aşamalarından biri olarak sıklıkla kullanılır.

Sözlük algoritmaları

Sözlük algoritmalarının arkasındaki fikir, orijinal dizideki öğe dizilerinin kodlanmasıdır. Bu kodlamada, orijinal diziden elde edilen özel bir sözlük kullanılır.
Bütün bir kelime algoritması ailesi var, ancak geliştiricileri Lepel, Ziv ve Welch'in adını taşıyan en yaygın LZW algoritmasına bakacağız.
Bu algoritmadaki sözlük, algoritma çalışırken kodlama dizeleriyle dolu bir tablodur. Sıkıştırılmış kodun kodunu çözerken, sözlük otomatik olarak geri yüklenir, bu nedenle sözlüğü sıkıştırılmış kodla birlikte aktarmaya gerek yoktur.
Sözlük, tüm tekil dizelerle başlatılır, yani. sözlüğün ilk satırları kodlama yaptığımız alfabeyi temsil eder. Sıkıştırma, sözlüğe önceden yazılmış en uzun zinciri arar. Sözlüğe henüz yazılmamış bir dizeyle her karşılaşıldığında, oraya eklenir ve sözlükte önceden yazılmış dizeye karşılık gelen sıkıştırılmış bir kod çıkar. Teoride, sözlüğün boyutuna herhangi bir kısıtlama getirilmez, ancak pratikte bu boyutu sınırlamak mantıklıdır, çünkü zamanla artık metinde bulunmayan zincirler oluşmaya başlar. Ayrıca tablonun boyutu iki katına çıktığında, sıkıştırılmış kodları depolamak için fazladan bir bit ayırmamız gerekir. Bu tür durumların önüne geçebilmek için uygulamaya konulmuştur. özel kod, tüm tekil dizeler tarafından tablonun başlatılmasını sembolize eder.
Algoritma tarafından yapılan bir sıkıştırma örneğini ele alalım. Guguk kuşunun ipini sıkacağız, guguk kuşu, guguk kukuleta aldı. Sözlüğün 32 konum içereceğini varsayalım, bu da kodlarının her birinin 5 bit alacağı anlamına gelir. Başlangıçta, sözlük şu şekilde doldurulur:

Bu tablo hem bilgiyi sıkıştıranın hem de paketi açanın yanındadır. Şimdi sıkıştırma işlemine bakacağız.

Tablo, sözlüğü doldurma sürecini göstermektedir. Ortaya çıkan sıkıştırılmış kodun 105 bit aldığını ve orijinal metnin (bir karakteri kodlamak için 4 bit harcadığımızı varsayarak) 116 bit aldığını hesaplamak kolaydır.
Aslında, kod çözme işlemi, kodların doğrudan şifresinin çözülmesine indirgenirken, tablonun kodlama sırasındakiyle aynı şekilde başlatılması önemlidir. Şimdi kod çözme algoritmasına bakalım.


Sözlüğe eklenen dizgiyi i-inci adımda tam olarak sadece i+1'de tanımlayabiliriz. Açıkçası, i. satır, i + 1 satırının ilk karakteri ile bitmelidir. O. az önce bir sözlüğü nasıl geri yükleyeceğimizi bulduk. cScSc biçimindeki bir dizinin kodlandığı, burada c'nin bir karakter olduğu ve S'nin bir dize olduğu ve cS kelimesinin zaten sözlükte olduğu durum biraz ilgi çekicidir. İlk bakışta, kod çözücü bu durumu çözemeyecek gibi görünebilir, ancak aslında bu türdeki tüm satırlar her zaman başladıkları karakterle bitmelidir.

Entropi kodlama algoritmaları
Bu dizideki algoritmalar, en sık kullanılan dizi öğelerine en kısa sıkıştırılmış kodu atar. Onlar. aynı uzunluktaki diziler, farklı uzunluktaki sıkıştırılmış kodlarla kodlanmıştır. Ayrıca, dizi ne kadar sık ​​olursa, karşılık gelen sıkıştırılmış kod o kadar kısa olur.
Huffman algoritması
Huffman algoritması, önek kodları oluşturmanıza olanak tanır. Önek kodlarını bir ikili ağaç üzerindeki yollar olarak düşünebilirsiniz: Bir düğümden sol oğluna geçiş, kodda 0'a ve sağ oğluna - 1'e karşılık gelir. Ağacın yapraklarını kodlanmış karakterlerle işaretlersek, ikili ağaç biçiminde önek kodunun bir temsilini alın.
Bir Huffman ağacı oluşturmak ve Huffman kodlarını elde etmek için bir algoritma tanımlayalım.
  1. Giriş alfabesindeki karakterler, serbest düğümlerin bir listesini oluşturur. Her sayfa, sembolün oluşma sıklığına eşit bir ağırlığa sahiptir.
  2. Ağacın en az ağırlığa sahip iki serbest düğümü seçilir
  3. Ebeveynleri, toplam ağırlıklarına eşit bir ağırlıkla yaratılmıştır.
  4. Ebeveyn, ücretsiz düğümler listesine eklenir ve iki çocuğu bu listeden çıkarılır.
  5. Ebeveynden ayrılan bir yay bit 1'e atanır, diğerine - bit 0
  6. İkinciden başlayan adımlar, serbest listede yalnızca bir boş düğüm kalana kadar tekrarlanır. Ağacın kökü olarak kabul edilecek.
Bu algoritmayı kullanarak, belirli bir alfabe için karakterlerin oluşma sıklığını dikkate alarak Huffman kodlarını elde edebiliriz.
aritmetik kodlama
Aritmetik kodlama algoritmaları, eleman dizilerini kesirlere kodlar. Bu, elemanların frekans dağılımını dikkate alır. Şu anda aritmetik kodlama algoritmaları patentlerle korunmaktadır, bu nedenle sadece temel fikri ele alacağız.
Alfabemiz sırasıyla a1,…, aN ve bunların frekansları p1,…, pN olmak üzere N adet sembolden oluşsun. Yarım aralığı bölelim)