JPEG'dir. Sıkıştırma algoritması

Tekrar merhaba! Bu makaleyi Mayıs 2019'da yazılmış olarak buldum. Bu, WAVE ve JPEG ile ilgili bir dizi makalenin devamıdır, burada ilk. Bu yayın, bir bütün olarak görüntü kodlama algoritması ve formatın kendisi hakkında bilgiler içerecektir.

Bir tutam tarih

Bir çorba kaşığı Vikipedi makalesi:

JPEG (Joint Photographic Experts Group), fotoğrafların ve benzer görüntülerin saklanması için kullanılan popüler raster grafik formatlarından biridir.

Bu standart, etkin görüntü sıkıştırma amacıyla 1991 yılında Joint Photographic Experts Group tarafından geliştirilmiştir.

Görüntüler raw'dan JPEG'e nasıl geçer?

Bazı insanlar JPEG görüntülerinin Huffman yöntemi kullanılarak sıkıştırılmış ham veriler olduğunu düşünüyor ancak bu doğru değil. Kontrol sıkıştırmasından önce veriler uzun bir yol kat eder.

İlk olarak renk modeli RGB'den YCbCr'ye değiştirilir. Bunun için özel bir algoritma bile var - burada. Parlaklıktan sorumlu olduğu için Y'ye dokunulmaz ve değişimi fark edilir olacaktır.

Resimle yapılacak ilk şey "inceleme" (alt örnekleme). Anlamak kolaydır: 2x2'lik bir piksel dizisi alınır, ardından Cb ve Cr alınır - bu 4 pikselin YCbCr bileşenlerinin her birinin ortalama değerleri. Bu yüzden, 6 bayt kazandık4 Y, 4 Cb, 4 Cr yerine 4 Y ve her biri için aynı Cb ve Cr'yi elde ettik (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). 2x2 ölçeğinde bile, 2:1 sıkıştırma oranına sahip kayıplı sıkıştırma kulağa sağlam geliyor. Bu, görüntünün tamamı için geçerlidir. Ve böylece yarım boyuta düştüler. Ve renk algımız sayesinde bu tekniği kullanabiliyoruz. Bir kişi, küçük bir piksel bloğu üzerinden ortalaması alınırsa parlaklıktaki farkı kolayca fark edecektir, ancak renkte fark olmayacaktır. İnceltme yatay ve dikey olarak 4 piksellik bir çizgi halinde de yapılabilir. İlk seçenek daha sık kullanılır. Görüntü kalitesi önemliyse, yok etme hiç yapılmaz.
İnceltmenin görsel bir örneği (Habr, gif eklememe izin vermedi) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Hazırlığın ana kısmı

DCM

Şimdi en zor ve en gerekli kısım geliyor. Görüntünün tamamı 8x8 bloklara bölünmüştür (çözünürlük blok tarafının katı değilse doldurma kullanılır).

Şimdi her bloğa uygula DCT (Ayrık Kosinüs Dönüşümü). Bu bölümde gereksiz olan her şey resimden çıkarılır. DCT'yi kullanarak, belirli bir bloğun (8x8) görüntünün herhangi bir monoton bölümünü tanımlayıp tanımlamadığını anlamanız gerekir: gökyüzü, duvar; veya karmaşık bir yapı (saç, semboller vb.) içerir. Benzer renkteki 64 pikselin yalnızca 1 ile tanımlanabilmesi mantıklıdır, çünkü blok boyutu zaten biliniyor. Sıkıştırma için bu kadar: 64'e 1.

DCT bloğu bir spektruma dönüştürür ve okumaların keskin bir şekilde değiştiği yerde katsayı pozitif olur ve geçiş ne kadar keskin olursa çıkış da o kadar yüksek olur. Katsayı daha yüksek olduğunda, resim renk ve parlaklıkta net geçişler gösterir; daha düşük olduğunda ise bloktaki YCbCr bileşenlerinin değerlerinde zayıf (düzgün) değişiklikler olur.

Niceleme

Sıkıştırma ayarları burada zaten uygulanmıştır. 8x8'lik matrislerin her birindeki katsayıların her biri belirli bir sayıya bölünür. Tüm değişikliklerden sonra görüntü kalitesini düşürmezseniz bölen bir olmalıdır. Bu fotoğrafın kapladığı hafıza sizin için daha önemliyse bölen 1'den büyük olacak ve bölüm yuvarlanacaktır. Yuvarlamadan sonra çoğu zaman bir sürü sıfır elde ettiğiniz ortaya çıktı.

Daha da fazla sıkıştırma olanağı yaratmak için niceleme yapılır. y = sin(x) grafiğini niceleme örneğini kullandığımızda şöyle görünür:

JPEG'dir. Sıkıştırma algoritması

sıkıştırma

İlk önce matrisi zig-zag düzeninde inceliyoruz:

JPEG'dir. Sıkıştırma algoritması

Sayılardan oluşan tek boyutlu bir dizi elde ediyoruz. İçinde çok fazla sıfır olduğunu görüyoruz, bunlar kaldırılabilir. Bunu yapmak için çok sayıda sıfırdan oluşan bir dizi yerine 1 sıfır ve ardından dizideki sayılarını gösteren bir sayı giriyoruz. Bu şekilde tüm dizinin boyutunu 1/3'e sıfırlayabilirsiniz. Daha sonra bu diziyi Huffman yöntemini kullanarak sıkıştırıp dosyanın kendisine yazıyoruz.

Nerede kullanılır

Her yer. PNG gibi JPEG de kameralarda, işletim sistemlerinde (şirket logoları, uygulama simgeleri, küçük resimler olarak) ve görüntülerin verimli bir şekilde depolanması gereken tüm olası alanlarda kullanılır.

Aviator apk

Şu anda JPEG bilgisi artık yalnızca eğitim amaçlı değerlidir, çünkü zaten her yerde yerleşiktir ve büyük insan grupları tarafından optimize edilmiştir, ancak bilimin graniti hala lezzetlidir.

kaynaklar

Vikipedi'de YCbCr hakkında madde
JPEG ile ilgili Wikipedia makalesi
Pikabu gönderisinden PrEP hakkında biraz
PrEP ile ilgili Vikipedi makalesi

Kaynak: habr.com

Yorum ekle