Neredeyse tüm görüntü kalitesi kayıpları bir görüntü JPEG olarak ilk kez sıkıştırıldığında meydana gelir. Bir JPEG'in aynı ayarlarla kaç kez yeniden sıkıştırıldığına bakılmaksızın , üretim kayıpları yuvarlama hatasıyla sınırlıdır.
MCU sınırları hala sağlam (8x8 blok).
Chroma alt örneği devre dışı.
Sabit DQT (aynı kalite ayarı).
Bununla birlikte, yuvarlama hataları , yukarıdaki kriterlerin karşılanmadığı her yineleme için büyük olabilir ve tüm orijinal dosyaların yedeğini almak akıllıca olacaktır.
Renk uzayını dönüştür. İstenirse, alt-örnek renk bilgisi (kroma alt numunesi) (Kayıplı) . Aşağı örneklenmezse, bilgi kaybı yuvarlama hatasının sonucudur .
Segmentasyon. Her kanalı 8x8 bloğa bölün (MCU = Minimal Kodlama Ünitesi). (Kayıpsız)
Not: Eğer kroma alt örneklemesi etkinse, MCU'lar orijinal görüntü bakımından 16x8, 8x16 veya 16x16 olabilir. Ancak, MCU'ların tümü hala 8x8 bloktur.
Her MCU'da ayrık Kosinüs Dönüşümü (DCT). Bilgi kaybı, yuvarlama hatasının sonucudur .
Kuantizasyonu. MCU'nun her bir hücresindeki değer, bir niceleme tablosunda (DQT) belirtilen bir sayıya bölünür. Değerler yuvarlanır ve çoğu sıfır olur. Bu, algoritmanın birincil kayıp kısmıdır.
Zig-Zag Taraması. Bir zig-zag düzenini izleyen her bir MCU'daki değerleri bir dizi diziye yeniden düzenleyin. Ölçme sırasında ortaya çıkan sıfırlar birlikte gruplandırılacaktır. (Kayıpsız)
DPCM = Diferansiyel Darbe Kod Modülasyonu. Sayı dizilerini sıkıştırması kolay bir forma dönüştürün. (Kayıpsız)
RLE = Çalışma Uzunluğu Kodlaması. Ardışık sıfırlar sıkıştırılır. (Kayıpsız)
Entropy / Huffman Kodlaması. (Kayıpsız)
JPEG'leri yeniden sıkıştırma
Not renk kanallarını altörnekleme ve nicemleme sadece kasten kayıplı adımlardır . Şimdilik bir kenara yuvarlama hatası ayarlayarak, diğer tüm adımlar kayıpsızdır. Kantizasyon gerçekleştikten sonra, adımı tersine çevirmek ve tekrarlamak aynı sonuçları verir. Başka bir deyişle, yeniden nicelendirme (aynı DQT ile) kayıpsızdır .
Prensip olarak, ilk geçişten sonra kayıpsız bir yeniden örnekleme algoritması oluşturmak mümkündür. Bununla birlikte, ImageMagick'teki uygulamada, renkler, görüntüde görüldüğü gibi sabit bir duruma ulaşılmadan önce ciddi şekilde değişebilir.
Optimum koşullar göz önüne alındığında, bir JPEG’in aynı kalite ayarlarıyla yeniden sıkıştırılması, aynı JPEG’le sonuçlanacaktır. Başka bir deyişle, JPEG'leri yeniden sıkıştırmak potansiyel olarak kayıpsızdır . Uygulamada, JPEG'lerin yeniden sıkıştırılması kayıpsız değildir, ancak yuvarlama hatasına tabidir ve bunlarla sınırlıdır. Yuvarlama hataları sıklıkla sonunda sıfıra yaklaşsa da , aynı görüntünün yeniden oluşturulmasına rağmen , kroma alt örnekleme önemli renk değişikliklerine neden olabilir.
Gösteri (aynı kalite ayarı)
bash
Bir JPEG dosyasını belirli bir kalite ayarında tekrar tekrar sıkıştırmak için ImageMagick'i kullanan aşağıdaki betiği yazdım :
#!/usr/bin/env bash
n=10001; q1=90
convert original.png -sampling-factor 4:4:4 -quality ${q1} ${n}.jpg
while true ; do
q2=${q1} # for variants, such as adding randomness
convert ${n}.jpg -quality ${q2} $((n+1)).jpg
#\rm $((n-5)).jpg # uncomment to avoid running out of space
n=$((n+1))
echo -n "$q2 "
md5sum ${n}.jpg
done
Birkaç yüz tekrar çalışmasına izin verdikten sonra md5sum
sonuçlara baktım :
d9c0d55ee5c8b5408f7e50f8ebc1010e original.jpg
880db8f146db87d293def674c6845007 10316.jpg
880db8f146db87d293def674c6845007 10317.jpg
880db8f146db87d293def674c6845007 10318.jpg
880db8f146db87d293def674c6845007 10319.jpg
880db8f146db87d293def674c6845007 10320.jpg
Gerçekten de, yuvarlama hatasının sıfıra yakınlaştığını ve aynı görüntünün tekrar tekrar çoğaltıldığını görebiliriz .
Bunu farklı görüntüler ve kalite ayarlarıyla defalarca tekrarladım. Genellikle kararlı durum ulaşıldığında ve tam aynı görüntü üzerinde çoğaltılabilir ve üzeri edilir.
Ubuntu 18.04'teki Imagemagick'i kullanarak mattdm sonuçlarını çoğaltmaya çalıştım. Orijinal, Rawtherapee'de TIFF'e yapılan ham bir dönüşümdü, ancak artık mevcut görünmüyor. Onun yerine, büyütülmüş halini aldım ve orijinal boyutuna indirdim (256x256). Sonra tekrar yakınsam 75'e yakınsama yaptım. İşte sonuç (orijinal, 1, n, fark):
Sonuçlarım farklı. Gerçek orijinal olmadan, farkın nedenini belirlemek imkansızdır.
Görüntüyü, montajın sol üst köşesinden 90’da yakınsamaya kadar yeniden sıkıştırdım. Sonuç bu (orijinal, 1, n, fark):
Chroma alt örneklemesinin etkinleştirilmesinden sonra, renklerin sabit duruma geldiği zaman renkler değişir .
Az sayıda ayar arasında geçiş yapma
Değişkeni değiştirerek, q2
kalite ayarı eşit dağılmış değerlerle sınırlandırılabilir.
q2=$(( (RANDOM % 3)*5 + 70 ))
Bir İçin ayar seçenekleri az sayıda, denge sonunda ulaşılan olabilir md5 değerleri yinelenen başladığında görülür ki,. Set büyüdükçe, dengeye ulaşılmadan önce daha uzun sürebilir ve görüntü daha da kötüleşir.
Dengedeki gibi görünen şey, nicelleştirmeden önceki DCT katsayısının, kuantum değerlerinin tümü (veya çoğunun) bölünebilir olması gerekir. Örneğin, DCT katsayısının dönüşümlü olarak 3 ve 5'e bölündüğü iki DQT arasında geçiş yapılırsa, DCT katsayısı 15 ile bölünebilir olduğunda dengeye ulaşılır. Bu, kalite düşüşünün neden orijinal ayarlar arasındaki farktan daha büyük olduğunu açıklar.
Daha fazla ayar arasında geçiş yapma
Eeyore böyle q2
değiştiğinde mutlu olmaz :
q2=$(( (RANDOM % 9) + 90 ))
Bir video yapmak için şunu kullanın ffmpeg
:
rename 's@1@@' 1*.jpg
ffmpeg -r 30 -i %04d.jpg -c:v libx264 -crf 1 -vf fps=25 -pix_fmt yuv420p output.mp4
İzlemek ilk 9999 tekrarlamalar neredeyse su kaynatın izlemek gibidir. İzleme hızını iki katına çıkarmak isteyebilirsiniz. 11999 yinelemeden sonra Eeyore:
MCU sınırları değişirse ne olur?
Değişiklikler sınırlı sayıda gerçekleşirse, tekrar tekrar sıkıştırmanın sabit duruma ulaşması muhtemeldir. Her yinelemede değişiklik olursa, görüntü muhtemelen DQT değiştiğindekine benzer şekilde düşer.
- Bu içinde ne olduğudur döndürmek videolar 8 ile bölünebilir olmayan boyutlara sahip bir görüntü.
Peki ya düzenleme?
Düzenlemeden sonra yeniden sıkıştırmanın etkisi, gerçekleştirilen belirli düzenlemeye bağlıdır. Örneğin, JPEG yapılarını azalttıktan sonra aynı kalite ayarında kaydetme, aynı yapıyı yeniden ortaya koyar. Bununla birlikte, bir iyileştirme fırçası gibi yerel bir değişimin uygulanması, dokunulmayan alanları etkilemeyecektir.
Görüntü kalitesindeki en büyük düşüş, dosya belirli bir kalite ayarında ilk kez sıkıştırıldığında gerçekleşir. Daha sonra aynı ayar ile yeniden sıkıştırma, yuvarlama hatasından daha büyük bir değişiklik getirmemelidir. Bu yüzden, aynı kalitede ayarlarla kaydedilen herhangi bir görüntüye benzeyen belirli bir kalite ayarında düzenleme-kurtarma döngüleri beklerdim (MCU sınırları bozulmadan kaldığı ve kroma örnekleme devre dışı bırakıldığı sürece ).
Peki ya bu videolar?
Orijinalleri yeniden sıkıştırılmış JPEG'lerle fazla yazabilir miyim?
Tüm orijinal dosyaların yedeklerini saklamak akıllıcadır, ancak yanlışlıkla birinin üzerine yazarsanız, zarar muhtemelen sınırlıdır. Ayrıca , kroma alt örneklemenin devre dışı bırakılmasıyla JPEG’de çalışmak iyi olur .
JPEG, renk başına 8 bitten fazlasını kullanan görüntüler için kullanılamaz.