Selama bertahun-tahun, saya percaya bahwa mengkompres ulang file JPEG beberapa kali secara bertahap akan menurunkan kualitasnya sampai menjadi kekacauan yang tidak dapat dikenali, seperti yang dilakukan oleh fotokopi dari fotokopi. Ini secara intuitif masuk akal karena JPEG adalah format lossy. Ada juga Tanya Jawab lain yang mengklaim demikian:
Kualitas gambar apa yang hilang saat menyimpan kembali gambar JPEG di MS Paint?
Apakah hanya dengan membuka dan menutup file JPEG menurunkan kualitas gambar?
Namun, saya juga membaca bahwa mengkompresi JPEG pada tingkat kualitas yang sama tidak akan menurunkan kualitas gambar. Ini bertentangan dengan degradasi bertahap yang dijelaskan di tempat lain.
Apa yang secara teknis terjadi ketika JPEG dikompresi ulang? Apa yang hilang dan bagaimana caranya? Akankah gambar benar-benar berubah menjadi kekacauan bersalju yang dulu muncul di televisi? Bagaimana dengan video yang menampilkan gambar yang berantakan setelah dikompres berulang kali?
(Tolong jangan hanya melambaikan tangan dan memohon konsep umum tentang rasa kehilangan.)
(Pertanyaan ini, dan jawaban yang telah menarik sejauh ini, fokus pada faktor teknis (pengaturan khusus dan manipulasi gambar) yang menyebabkan atau mencegah degradasi gambar ketika file JPEG dikompresi berulang kali.)
sumber
Jawaban:
Hampir semua kehilangan kualitas gambar terjadi pertama kali gambar dikompresi sebagai JPEG. Terlepas dari berapa kali JPEG dikompres ulang dengan pengaturan yang sama , kerugian generasi terbatas pada kesalahan pembulatan.
Batas MCU tetap utuh (8x8 blok).
Subsampel Chroma dinonaktifkan.
DQT Konstan (pengaturan kualitas yang sama).
Namun, kesalahan pembulatan mungkin besar untuk setiap iterasi bahwa kriteria di atas tidak terpenuhi, dan bijaksana untuk menyimpan cadangan semua file asli.
Algoritma kompresi JPEG
Konversi colorspace. Jika diinginkan, kurangi informasi warna (subsampel kroma) (Rugi) . Jika tidak downsampled, kehilangan informasi adalah hasil dari kesalahan pembulatan .
Segmentasi. Bagilah setiap saluran menjadi 8x8 blok (MCU = Minimal Coding Unit). (Rugi)
Catatan: Jika chroma subsampling diaktifkan, MCU mungkin secara efektif 16x8, 8x16, atau 16x16, dalam hal gambar asli. Namun, MCU masih 8x8 blok.
Discrete Cosine Transform (DCT) pada setiap MCU. Kehilangan informasi adalah hasil dari kesalahan pembulatan .
Kuantisasi. Nilai dalam setiap sel MCU dibagi dengan angka yang ditentukan dalam tabel kuantisasi (DQT). Nilai dibulatkan ke bawah, banyak yang akan menjadi nol. Ini adalah bagian lossy utama dari algoritma.
Pemindaian Zig-Zag. Atur ulang nilai di setiap MCU menjadi urutan angka mengikuti pola zig-zag. Nol yang terjadi selama kuantisasi akan dikelompokkan bersama. (Rugi)
DPCM = Modulasi Kode Pulsa Diferensial. Ubah urutan angka menjadi bentuk yang lebih mudah untuk dikompres. (Rugi)
RLE = Run Encoding Panjang. Nol berturut-turut dikompresi. (Rugi)
Pengodean Entropi / Huffman. (Rugi)
Mengkompresi JPEG
Perhatikan bahwa downsampling saluran warna dan kuantisasi adalah satu-satunya langkah yang sengaja hilang . Mengesampingkan kesalahan pembulatan untuk saat ini, semua langkah lainnya adalah lossless. Setelah kuantisasi terjadi, membalikkan dan mengulangi langkah memberikan hasil yang identik. Dengan kata lain, re-kuantisasi (dengan DQT yang sama) adalah lossless .
Pada prinsipnya, dimungkinkan untuk membuat algoritma resampling yang lossless setelah lulus pertama. Namun, dengan implementasi di ImageMagick, warna dapat berubah secara drastis sebelum kondisi stabil tercapai, seperti yang terlihat pada gambar ths.
Dengan kondisi yang optimal, mengkompres ulang JPEG dengan pengaturan kualitas yang sama akan menghasilkan JPEG yang sama persis. Dengan kata lain, mengkompresi JPEG berpotensi kehilangan . Dalam praktiknya, mengkompresi ulang JPEG bukanlah kerugian, tetapi tunduk pada, dan dibatasi oleh, kesalahan pembulatan. Meskipun kesalahan pembulatan seringkali akhirnya menyatu menjadi nol , sehingga gambar yang sama persis dibuat kembali, subsampel kroma dapat mengakibatkan perubahan warna yang signifikan.
Demonstrasi (pengaturan kualitas yang sama)
Saya menulis
bash
skrip berikut , yang menggunakan ImageMagick untuk berulang kali mengkompres ulang file JPEG pada pengaturan kualitas yang diberikan:Setelah membiarkannya berjalan selama beberapa ratus iterasi, saya berlari
md5sum
pada hasilnya:Kita dapat melihat bahwa, memang, kesalahan pembulatan telah menyatu ke nol, dan gambar yang persis sama sedang direproduksi, berulang kali .
Saya telah mengulangi ini berkali-kali dengan gambar yang berbeda dan pengaturan kualitas. Biasanya, kondisi mantap tercapai, dan gambar yang sama persis direproduksi berulang-ulang.
Bagaimana dengan hasil @ mattdm ?
Saya telah mencoba mereplikasi hasil mattdm menggunakan Imagemagick di Ubuntu 18.04. Dokumen asli adalah konversi mentah ke TIFF di Rawtherapee, tetapi tampaknya tidak tersedia lagi. Sebagai gantinya, saya mengambil versi yang diperbesar dan menguranginya ke ukuran aslinya (256x256). Kemudian saya berulang kali mengkompres ulang pada usia 75 hingga saya mendapatkan konvergensi. Inilah hasilnya (asli, 1, n, perbedaan):
Hasil saya berbeda. Tanpa dokumen asli, alasan perbedaannya tidak mungkin ditentukan.
Bagaimana dengan montase @ ths ?
Saya mengkompres ulang gambar dari sudut kiri atas montase hingga konvergensi pada 90. Ini hasilnya (asli, 1, n, perbedaan):
Setelah mengaktifkan subsampling kroma, warna berubah pada saat kondisi mantap tercapai.
Mengubah di antara sejumlah kecil pengaturan
Dengan memodifikasi variabel
q2
, pengaturan kualitas dapat dibatasi pada satu set nilai yang terdistribusi secara merata.Untuk sejumlah kecil pilihan pengaturan, keseimbangan mungkin akhirnya tercapai , yang terlihat ketika nilai md5 mulai berulang. Tampaknya semakin besar himpunan, semakin lama waktu yang dibutuhkan, dan semakin buruk gambarnya, sebelum keseimbangan tercapai.
Apa yang tampaknya terjadi pada kesetimbangan adalah koefisien DCT sebelum kuantisasi harus dapat membagi semua (atau sebagian besar) nilai-nilai kuantum. Misalnya, jika beralih di antara dua DQT di mana koefisien DCT dibagi secara bergantian dengan 3 dan 5, keseimbangan akan tercapai ketika koefisien DCT dibagi dengan 15. Ini menjelaskan mengapa penurunan kualitas jauh lebih besar daripada perbedaan antara pengaturan awal.
Mengubah di antara sejumlah besar pengaturan
Eeyore tidak senang ketika
q2
diubah seperti ini:Untuk membuat video, gunakan
ffmpeg
:Menonton iterasi 9999 pertama hampir seperti menonton air mendidih. Mungkin ingin menggandakan kecepatan pemutaran. Inilah Eeyore setelah 11999 iterasi:
Bagaimana jika batas MCU berubah?
Jika perubahan terjadi beberapa kali, berulang kali kompresi ulang kemungkinan akan mencapai kondisi stabil. Jika perubahan terjadi pada setiap iterasi, gambar mungkin akan menurun dengan cara yang mirip dengan ketika DQT berubah.
Bagaimana dengan pengeditan?
Efek dari kompresi ulang setelah pengeditan tergantung pada pengeditan tertentu yang dilakukan. Misalnya, menyimpan pada pengaturan kualitas yang sama setelah mengurangi artefak JPEG akan memperkenalkan kembali artefak yang sama. Namun, menerapkan perubahan yang dilokalisasi, seperti sikat penyembuhan, tidak akan memengaruhi area yang tidak disentuh.
Penurunan kualitas gambar terbesar terjadi saat file pertama kali dikompres pada pengaturan kualitas yang diberikan. Selanjutnya, kompres ulang dengan pengaturan yang sama tidak boleh menyebabkan perubahan lebih besar dari kesalahan pembulatan. Jadi saya berharap siklus edit-resave pada pengaturan kualitas yang diberikan terlihat seperti gambar lain yang disimpan dengan pengaturan kualitas yang sama (selama batas MCU tetap utuh dan subsampel kroma dinonaktifkan ).
Bagaimana dengan video-video itu?
Implementasi JPEG yang salah? ( Hemat ulang 500 kali dengan Photoshop pada 10/12. )
Mengubah pengaturan kualitas. (Sebagian besar video.)
Mengganggu batas MCU. (Memotong atau Memutar )
Manuver lain yang mengurangi kualitas gambar atau mengganggu algoritma JPEG?
Bisakah saya menulis ulang dokumen asli saya dengan JPEG yang dikompresi ulang?
Adalah bijaksana untuk menyimpan cadangan semua file asli, tetapi jika Anda secara tidak sengaja menimpa satu, kerusakan kemungkinan terbatas. Ini juga baik untuk bekerja dalam format JPEG dengan subsampling chrom dinonaktifkan.
JPEG tidak dapat digunakan untuk gambar yang menggunakan lebih dari 8 bit per warna.
sumber
Kehilangan kompresi adalah nyata, terutama ketika bekerja dengan tingkat kompresi JPEG yang lebih tinggi.
Secara teori, jika Anda menyimpan kembali file JPEG dengan parameter yang sama persis dan telah menyelaraskan crop Anda menjadi 8 × 8 blok, degradasi harus minimal. Namun, jika Anda menggunakan kompresi tingkat tinggi, Anda akan melihat kerugian lebih lanjut, karena artefak yang diperkenalkan oleh kompresi awal adalah perubahan permanen pada gambar dan akan dikompresi ulang juga, menyebabkan lebih banyak artefak.
Jika Anda menyimpan ulang dengan tingkat kompresi rendah (kualitas tinggi, seperti "100" di Gimp atau 11 atau 12 di Photoshop), artefak yang baru ditambahkan akan sulit untuk diperhatikan. Itu tidak akan membuat gambar lebih baik , tetapi tidak jauh lebih buruk. Namun, itu akan memperkenalkan perubahan di seluruh gambar.
Sebagai tes cepat, saya menggunakan ImageMagick untuk mengkompres ulang gambar JPEG berulang pada 75%. Sampel di bawah ini diunggah sebagai file PNG untuk menghindari kompresi lebih lanjut, dan ukurannya berlipat ganda ketika saya dikonversi ke PNG untuk membuat efeknya lebih jelas. (Dokumen asli yang digunakan dalam pengujian tidak digandakan.) Ternyata setelah delapan kali resampling, efeknya menyatu pada hasil yang sangat stabil, di mana pengompresan kembali menghasilkan file identik bit-for-bit yang identik.
Ini asli yang tidak dikompresi:
Inilah hasil mencapai 75% JPEG:
Dan inilah yang disimpan kembali:
Penghematan satu detik itu menyebabkan sejumlah besar degradasi tambahan!
Dan inilah gambar konvergen terakhir (pass ke-8):
Sekali lagi, warna pasti jauh lebih aneh, termasuk beberapa pola warna palsu, dan artefak gumpal melompat lebih banyak. Algoritma menyatu, tetapi ke versi yang terdegradasi secara signifikan. Jadi, jangan lakukan itu.
Tapi ini hal yang sama dengan tingkat kualitas 99%, setelah 9 operan (titik di mana konvergen melewati lebih lanjut identik):
Di sini, perbedaannya hampir tidak terdaftar. (Maksud saya secara harfiah; bandingkan mereka piksel demi piksel dengan versi yang tidak dikompresi dan penyimpangannya hanya sedikit noise acak.) Jadi, bagaimana jika saya kembali ke gambar 75% pertama dan kemudian resave pada 99%? Nah, ini, (setelah sekali saja):
Menyimpan dengan kualitas tinggi jelas terlihat lebih baik daripada menyimpan ulang dengan parameter yang sama, agak mengejutkan saya. Tapi, ada degradasi baru yang jelas di sekitar pemangkasan pink dan mata. Dengan versi daur ulang dari pengaturan yang sama, artefak JPEG dibesar-besarkan dengan masing-masing kompresi ulang. Dengan resolusi rendah dan kualitas rendah yang saya pilih, yang ternyata lebih buruk daripada mengkompres ulang semuanya secara berbeda.
Di video-video itu: Saya menemukan ini sebagai hit Google teratas. Perhatikan bahwa ia mengatakan dalam deskripsi:
Penekanan ditambahkan - ini menjelaskan mengapa tidak ada konvergensi, karena alih-alih menyimpan dengan pengaturan yang sama, atau menyimpan dengan kualitas super tinggi, pengaturan acak digunakan setiap kali .
The video kedua saya menemukan kata:
Jadi, sekali lagi, sesuatu dilakukan untuk menjaga akumulasi kesalahan.
Dalam kasus apa pun, untuk penyuntingan foto praktis , perlu disebutkan bahwa menghemat 75% satu kali jauh lebih buruk daripada menyimpan 99% sejuta kali . Dalam contoh kasus saya, artefak di 75% sangat jelas bahwa degradasi lebih lanjut seperti membuang air di lautan. Jika Anda menyimpan pada tingkat yang cukup tinggi sehingga artefak ini tidak benar-benar terlihat, menyimpannya kembali dengan pengaturan asli adalah strategi yang baik. Tentu saja, jika Anda bisa tetap bekerja dari aslinya yang tidak dikompresi, Anda lebih baik.
Jika karena alasan tertentu Anda harus (atau sangat suka) hanya bekerja dengan JPEG, atur kamera Anda untuk menyimpan dalam kualitas setinggi mungkin , bahkan jika Anda tidak melihat perbedaan dalam file awal. Lihat Apakah layak menggunakan pengaturan kualitas Premium JPEG Pentax? untuk lebih lanjut tentang itu - belum tentu benar-benar Pentax spesifik.
sumber
Rekompresi memang memiliki efek yang terukur pada kualitas gambar dan efek itu jauh lebih nyata ketika mengubah tingkat kompresi.
Sebagai pemeriksaan cepat di sini karena beberapa nilai SSIM untuk operasi dilakukan pada gambar uji yang berisi kombinasi fitur garis dan fitur berkelanjutan. Saya memilih JPG95 karena itulah yang saya diajarkan untuk digunakan di sekolah Ad-photo dan JPG83 karena itu umum di antara penyedia konten digital.
Jadi jumlah kemiripan struktural yang hilang karena resaving pada kompresi yang sama 10 kali adalah 1/10 dari yang hilang karena menyelamatkannya pada kualitas dari tiff. Namun, kehilangan kualitas dari mengubah kompresi JPG bahkan sekali sama dengan kualitas yang hilang untuk menyimpan gambar itu dari Tiff ke JPG.
Saya akan menjalankan tes ini beberapa cara lagi dan memperbarui.
Metodologi : Dalam ImageJ:
CATATAN: banyak orang yang melihat nilai SSIM untuk pertama kali membacanya sebagai persentase dan menganggap perbedaannya kecil. Ini belum tentu benar. Nilai SSIM harus dibandingkan relatif satu sama lain daripada dianggap sebagai varian dari 1.
sumber
Tidak seperti eksperimen. Skrip bash berikut (ditulis di Linux, dapat berfungsi di OSX jika Anda memiliki ImageMagick ):
step000.jpg
)Hasilnya adalah:
Tentu saja semua ini mengasumsikan bahwa JPEG disimpan oleh perangkat lunak yang sama dengan parameter yang sama setiap kali.
Untuk saat ini saya tidak akan menampilkan hasilnya, saya lebih suka membiarkan Anda bereksperimen dengan gambar Anda sendiri. Dengan komentar yang cukup, saya akan menambahkan sampel.
sumber