Saat membuat JPEG, bagaimana saya bisa meminimalkan kemunculan artefak?

10

Ada 2 faktor utama yang tampaknya mengarah pada artefak digital saat membuat gambar JPEG: Aliasing dan Compression.

Contoh:

Mengubah PNG dengan karakter di atasnya menjadi JPEG atau menempatkan gambar vektor di atas foto, akan menghasilkan pixelisasi di tepinya. Antialiasing umumnya menciptakan semacam blur di sekitar mereka, tetapi jika gambar dikompresi lossy , bagian dari detail juga hilang, oleh karena itu blur dan pikselisasi mungkin menjadi kurang terlihat.

Apakah ini hal yang benar untuk dilakukan? Yaitu karena kompresi lossless menghasilkan gambar yang sangat rinci, artefak yang dihasilkan dari aliasing akan lebih terlihat, sehingga keseimbangan dapat ditemukan dengan menggunakan kompresi yang tepat, meskipun mengurangi kualitas gambar.

Edit

Saya baru saja menyimpan JPEG ini di mspaint (3.46KB):

Kerugian

Berikut JPEG yang sama dengan kompresi maksimum (kualitas terendah, 0,5KB):

Rugi

Berikut ini JPEG yang sama dengan kompresi 50% (perhatikan perbedaan ukuran, 1.29KB):

Setengah tanpa pilihan

Kompresi 50% yang sama tetapi disimpan sebagai "JPG progresif", menyimpan data EXIF ​​dan XMP asli, dan "mencoba menyimpan dengan kualitas JPG asli" (Anda dapat melihat bahwa tidak ada piksel abu-abu di sekitar, 2.96KB):

Setengah opsi

Dan akhirnya sama seperti sebelumnya dengan chroma subsampling dinonaktifkan (ukuran file yang sama, 2.96KB):

Setengah tanpa kroma

Lengan
sumber
1
Hanya ingin tahu, apa alasan Anda menginginkan jpg, apakah ini ukuran file yang lebih kecil? Jika ini membantu situasi spesifik Anda, apakah Anda tahu tentang kompresi dxt atau tekstur bidang jarak?
Alan Wolfe
1
Tidak jelas bagi saya apa pertanyaan Anda. Apakah Anda ingin tahu apakah itu baik untuk kompres menggunakan JPEG? Apakah Anda ingin tahu jenis gambar apa yang dapat dikompres dengan baik dengan JPEG? Atau, apakah Anda sudah menggunakan JPEG dan Anda ingin tahu cara membuat gambar Anda untuk meminimalkan artefak yang disebabkan oleh JPEG?
Mokosha
@AlanWolfe Saya telah menemukan beberapa kesempatan di mana saya hanya dapat menggunakan JPEG (kebanyakan di aplikasi web), dan itulah mengapa saya membutuhkannya dalam format JPEG. Terima kasih, tapi saya tidak terbiasa dengan kompresi dxt atau tekstur bidang jarak, dari apa yang saya lihat di wikipedia , algoritma dxt berbeda dari yang digunakan dalam JPEG, apakah maksud Anda mereka dapat digunakan untuk membuat JPEG?
Armfoot
@Moshoka terima kasih, ini lebih terkait dengan pertanyaan terakhir Anda: bagaimana meminimalkan "dampak visual" yang dibawa oleh artefak dalam gambar JPEG?
Armfoot
perlu diingat bahwa mozjpegkompresor memiliki trik khusus untuk menghasilkan lebih sedikit distorsi pada jenis gambar ini. (dan ini lebih efisien secara umum daripada penulis jpeg biasa juga.) Apakah Anda mencobanya?
Nama Tampilan

Jawaban:

9

Kompresi JPEG melibatkan tiga langkah utama:

  1. Subsampling Chroma . Gambar dikonversi dari RGB ke ruang warna YCbCr, di mana luma atau kecerahan (Y) disimpan secara terpisah dari kroma atau komponen warna, Cb dan Cr. Komponen Y dijaga pada resolusi penuh, tetapi Cb dan Cr downsampled, biasanya setengah resolusi pada setiap sumbu. Ini mengeksploitasi fakta bahwa sistem visual manusia lebih sensitif terhadap detail kecerahan yang lebih baik daripada warna.

  2. Kuantisasi frekuensi. Gambar Y, Cb, dan Cr dikonversi menjadi representasi frekuensi, dengan memecahnya menjadi 8x8 blok dan menerapkan transformasi kosinus diskrit (varian transformasi Fourier) ke setiap blok. Hasilnya adalah matriks angka yang menggambarkan amplitudo frekuensi spasial yang berbeda di blok. Angka-angka ini kemudian dapat dikuantisasi (dibulatkan ke sejumlah bit presisi yang dipilih). Tingkat kuantisasi yang berbeda digunakan untuk frekuensi yang berbeda, mengeksploitasi sensitivitas sistem visual kami yang relatif lebih rendah terhadap frekuensi tinggi. Di sinilah pengaturan kualitas encoder JPEG berperan: kualitas yang lebih rendah menggunakan kuantisasi kasar.

  3. Pengodean entropi . Nilai-nilai DCT yang dikuantisasi dilewatkan melalui sebuah koder entropi, yang tanpa kompres mengkompresi aliran bit dengan menggunakan bit yang lebih sedikit untuk mewakili nilai yang lebih umum, seperti file zip.

Langkah 1 dan 2 adalah yang merugi, dan masing-masing menghasilkan jenis artefak sendiri (meskipun ada beberapa tumpang tindih). Subsampel Chroma cenderung mengaburkan tepi tajam di antara wilayah-wilayah dengan warna berbeda. Ini terutama terlihat dalam seni vektor, di mana bentuk-bentuk berwarna cerah mengambil jaggy jahat di sekitar tepinya. Kuantisasi frekuensi mengaburkan detail halus secara umum, dan juga menciptakan artefak berbentuk blok pada pengaturan kualitas rendah, karena DCT dilakukan berdasarkan blok-demi-blok. Ini terutama terlihat pada teks.

Inilah sebabnya mengapa JPEG biasanya tidak digunakan untuk gambar yang mengandung grafik vektor atau teks — algoritme kompresinya kurang cocok untuk kasus-kasus itu, meskipun mereka bekerja dengan baik untuk foto dan gambar lain dengan tekstur kompleks dan tepi yang tidak terlalu tajam.

Nathan Reed
sumber
Terima kasih banyak atas penjelasan terperinci Anda Nathan +1. Saya memahami algoritma kompresi memiliki keterbatasan untuk JPEG, tetapi saya hanya ingin mengetahui apakah ada keseimbangan yang tepat dari jumlah kompresi bersama dengan opsi lain (saat menyimpannya) yang dapat membuat artefak kurang terlihat. Saya mengedit pertanyaan saya dengan sampel.
Armfoot