12 puan yazan xguru 2021-11-25 | 3 yorum | WhatsApp'ta paylaş
<p>"Quite OK Image" <br /> - PNG'ye benzer boyutta RGB/RGBA sıkıştırması gerçekleştiriyor<br /> → sıkıştırma 20x-50x daha hızlı, açma ise 3~4x daha hızlı <br /> → 300 satırlık tek başlık dosyalı C kodu açık kaynak <br /> → SIMD kullanmayan basit tek iş parçacıklı uygulama <br /> - Teknik ayrıntılar <br /> → görüntüyü tek geçişte encode/decode ediyor <br /> → tüm piksellere yalnızca bir kez dokunuluyor ve her piksel 4 yöntemden biriyle encode ediliyor <br /> ⇨ hemen önceki pikselle aynıysa önceki pikselin run-length değeri artırılıyor, farklıysa yeni piksel aşağıdaki 3 yöntemden biriyle paketleniyor <br /> ⇨ daha önce işlenmiş bir pikselle aynıysa o pikselin indeksi kullanılıyor. Bunun için son 64 pikseli tutan bir dizi bulunuyor<br /> ⇨ önceki pikselle fark çok büyük değilse o RGBA fark değeri saklanıyor <br /> ⇨ yukarıdaki 3 yöntem başarısız olursa pikselin RGBA değeri saklanıyor. Ancak yalnızca önceki pikselle farklı olan kısımlar saklanıyor </p>

3 yorum

 
lifthrasiir 2021-11-25
<p>Biraz abartılı söylersek, QOI PNG’den zlib’i çıkarıp yalnızca filtrelemeyi bırakmış ve sonra onu iyileştirmiş hâlidir.<br /> <br /> PNG’nin de kullandığı zlib/gzip/DEFLATE sıkıştırma algoritması yaygın olarak kullanılıyor, ancak hem fazla eski olduğu için verimliliği düşebiliyor hem de zlib başta olmak üzere LZ77 türü algoritmalar “yakın zamandaki baytlar içinde aynı ardışık bayt dizisinin birkaç kez ortaya çıktığı” temel varsayımına dayanır (örneğin girdi "to be or not to be" ise "to be" kısmının iki kez geçtiğini kullanmak gibi). Ancak görüntüler bu tür varsayımların pek işlemediği bir veri türü olduğu için PNG, zlib’i fiilen yalnızca entropi kodlama için kullanır (başka ek bağlam olmadan bir sonraki baytın çıkma olasılığına göre sıkıştırma yapan yaklaşım) ve ön işleme aşamasında basit filtreleme kullanarak zlib’e girecek veriyi bu varsayıma mümkün olduğunca uydurmaya çalışır; fakat aslında bunun çok verimli olduğu söylenemez.<br /> <br /> Modern kayıpsız görüntü formatları bunu genel olarak iki yolla iyileştirir: PNG’deki filtrelemeye karşılık gelen piksel tahminini geliştiren yaklaşım vardır (filtreleme türlerini büyük ölçüde artırmak ya da görüntünün farklı bölümlerine farklı filtreleme uygulamak gibi) ve PNG’deki zlib’e karşılık gelen entropi kodlamayı geliştiren yaklaşım vardır. QOI’nin yaklaşımı da benzerdir, ancak sadelik uğruna piksel tahmininde mevcut konumun üstündeki pikseli hiç kullanmaması ve entropi kodlamadan vazgeçip deneyime dayalı birden fazla fark (delta) kodlaması hazırlamasıyla öne çıkar. Özellikle ilk özellik nedeniyle, sıkıştırma/açma performansından bağımsız olarak PNG’den bile daha düşük bir sıkıştırma oranı gösterme eğilimindedir; ancak bunun sadelikten biraz ödün verilerek iyileştirilebileceği görülüyor.</p>
 
xguru 2021-11-25
<p>Ek açıklama için teşekkürler. İlginçmiş.</p>
 
xguru 2021-11-25
<p>Başka formatların yerini almak amacıyla kullanılması zor görünse de, kodu sade ve implementasyonunu da iyi açıkladıkları için okuması keyifli bir kod gibi duruyor.<br /> https://github.com/phoboslab/qoi/blob/master/qoi.h<br /> </p>