Mengompresi gambar serupa tanpa kehilangan?

10

Saya perlu mengurangi ukuran perpustakaan foto saya jadi saya ingin mengompresnya. Banyak dari mereka tidak cukup identik, tetapi masih sangat mirip (bidikan berikutnya dari adegan yang sama). Apakah ada algoritma kompresi yang memanfaatkan fakta ini untuk mengompres gambar-gambar ini secara efektif? 7zip (LZMA) tidak berguna.

Erik
sumber

Jawaban:

11

Anda dapat mencoba Paq 8 (fp8_v2.zip). Saya hanya mencobanya sendiri pada 1440 gambar PNG serupa dan kemudian lagi pada 111 gambar JPG serupa. Inilah hasilnya.

  • 1440 File PNG, 28.631.615 byte => 2.058.653 byte terkompresi
  • 111 File JPG, 15.003.820 byte => 489.096 byte dikompresi

Kompresi file PNG memakan waktu sekitar 8 menit dan memori 550 MB saat menggunakan:

fp8_v2.exe -7 images *.png

Kompresi file JPG memakan waktu sekitar 5 menit dan memori 125 MB saat menggunakan:

fp8_v2.exe -5 images image12*.jpg

Lihat juga: uji kompresi gambar lossless jpg

jftuga
sumber
Kompresi 97% untuk JPG tampaknya tidak realistis. Angka-angka dalam tes perbandingan yang Anda tautkan dengan mengatakan kompresi adalah sekitar 20%
OneSolitaryNoob
@OneSolitaryNoob Apakah Anda lupa bahwa JPEG serupa? 110/111 = 99,1% kompresi yang diharapkan. Uji perbandingan yang ia tautkan adalah tentang mengompresi JPEG tunggal.
Navin
@Navin itu benar-benar tidak mungkin. Bahkan jika mereka terlihat hampir identik, sebagian besar piksel akan sedikit berbeda.
OneSolitaryNoob
@OneSolitaryNoob Jadi apa? 1 detik video (30 frame) dapat dikompresi dengan ukuran yang sama dengan satu frame. Selama sedikit perbedaan membuat sebagian kecil dari data, Anda semua baik-baik saja.
Navin
@Navin itu kompresi lossy, banyak detail hilang tetapi kebanyakan orang tidak akan memperhatikan. Paq * adalah kompresi lossless
OneSolitaryNoob
1

Saya akan membayangkan bahwa transformasi burrow-wheeler dengan coder aritmatika akan ideal untuk ini mengingat jendela yang cukup besar. Apa yang terjadi jika Anda mengkonfigurasi BZIP2 untuk menggunakan ukuran blok yang sama dengan sejumlah kecil foto? Ini akan lebih lambat dan mengambil lebih banyak memori tetapi rasio kompresi harus meroket. Dan sudahkah Anda mencoba LZMA dengan ukuran blok yang lebih besar?

Peter Hanneman
sumber
1

Berikut ini adalah solusi sederhana yang tidak berfungsi untuk foto tetapi dapat berfungsi jika seseorang memiliki beberapa gambar dengan area identik pixel-by-pixel yang besar: simpan gambar dalam format yang tidak terbungkus seperti BMP (bukan PNG atau GIF) lalu TAR dan kompres dengan kompresor yang layak seperti XZ, misalnya di Linux dengan sesuatu seperti

tar -c myDirectory | xz -9 >myDirectory.tar.xz

Alih-alih TAR dan XZ, orang dapat menggunakan 7-Zip dengan opsi "arsip padat" untuk mendapatkan kinerja yang kira-kira sama. Dengan cara ini saya bisa mengkompres 16 tangkapan layar yang serupa, yang masing-masing membutuhkan sekitar 900 KB saat disimpan sebagai file PNG yang terpisah, ke dalam arsip 2 MB. Manfaat dari solusi ini adalah bahwa ia menggunakan format file umum, sehingga ia bekerja tanpa menginstal perangkat lunak baru. (Sayangnya program yang lebih tua dan bahkan lebih umum, GZIP dan BZIP2 tidak melakukan pekerjaan yang baik untuk saya - mungkin karena ukuran blok BZIP2 tidak dapat dikonfigurasi untuk lebih besar dari 900 KB.)

Jaan
sumber
0

Bukannya aku pernah melihat. Mungkin hal terdekat adalah mengambil beberapa JPEG serupa dan memasukkannya ke dalam film MJPEG. Anda juga dapat menggunakan APNG atau GIF animasi untuk tujuan serupa.

Saya tidak yakin seberapa baik itu akan bekerja, dan sepertinya Anda sudah berbicara tentang screencaps film, jadi mengemasnya kembali menjadi file film terdengar ... kontraproduktif.

Mungkin cara yang lebih baik, jika Anda masih memiliki klip yang berasal dari layar, adalah dengan hanya menemukan alat baris perintah yang dapat mengekstrak bingkai yang tepat untuk Anda, menyalin pengidentifikasi unik itu ke file teks di suatu tempat, dan kemudian Anda selalu dapat mudah mengekstrak ulang bingkai saat Anda membutuhkannya.

afrazier
sumber
GIF tidak cocok untuk mengompresi foto, dan animasi GIF bahkan lebih sedikit. Bahkan mengompresi foto ke video MJPEG tampaknya tidak berguna di mata saya, karena mengembalikan gambar tunggal akan sulit.
Martin
Saya tidak mengatakan itu adalah ide yang bagus ... :-) Ide utamanya adalah untuk memasukkan foto ke dalam varian animasi dari format aslinya.
Afrazier