Apa pola kompresi JPG terkecil? (kamera menembak sepotong kain, skala / sudut / pencahayaan dapat bervariasi)


46

Saya mencoba mendesain kain yang, dari sudut pandang kamera, sangat sulit untuk dikompres dengan JPG, menghasilkan file ukuran besar (atau mengarah ke kualitas gambar rendah jika ukuran file diperbaiki).

Ini harus bekerja bahkan jika kain jauh dari kamera, atau diputar (misalkan skalanya dapat bervariasi dari 1x hingga 10x).

Kebisingan cukup baik (sulit dikompres), tetapi menjadi abu-abu saat melihat dari jauh, menjadi mudah dikompres. Pola yang baik akan menjadi semacam fraktal , terlihat serupa di semua skala.
Dedaunan lebih baik (daun, cabang kecil, cabang kecil, cabang besar), tetapi menggunakan terlalu sedikit warna.

Ini adalah percobaan pertama: Paling tidak terkompresi

Saya yakin ada pola yang lebih optimal.
Mungkin tessellations segi enam atau segitiga akan tampil lebih baik.

JPG menggunakan ruang warna Y ′ Cb Cr , saya pikir Cb Cr dapat dihasilkan dengan cara yang serupa, tapi saya kira lebih baik untuk tidak menggunakan seragam Y 'secara keseluruhan (kecerahan) karena kamera akan memenuhi area terang atau gelap ( pencahayaan tidak pernah sempurna).

PERTANYAAN: Apa pola kain yang optimal untuk masalah ini?


1
Saya harus mengawasi pertanyaan ini .... jika jawaban yang menarik tercapai, saya dapat memprediksi pesanan kain di www.spoonflower.com (atau layanan serupa) dan sangat sulit untuk melihat kemeja untuk menambahkan ke koleksi saya ;-)
RBerteig

Proyek kompetisi pola yang menarik dapat berupa: 1) Ambil gambar definisi tinggi dari pola semacam itu 2) Putar, ambil sebagian secara acak (dalam skala acak), blur sedikit, tambahkan sedikit noise dan warna acak kecil penyimpangan 3) Kompres dengan JPG 4) Lihat ukuran file, hitung metrik tentang kehilangan kualitas, dan hitung "skor" menggunakan metrik ini. 5) Ulangi berkali-kali untuk menyatu dengan skor rata-rata pola ini 6) Ulangi dengan pola lain dan bandingkan skor
Nicolas Raoul

1
Karena algoritme lossy selalu dapat memampatkan lebih banyak dengan membuang lebih banyak data, sepertinya Anda akan lebih beruntung menggunakan pola yang bergantung pada detail frekuensi tinggi. Misalnya, garis-garis halus. Dengan kata lain, mungkin kompres dengan baik, tetapi kualitasnya menurun dengan sangat cepat. Tergantung pada apa yang ingin Anda capai, saya kira. Pikirkan sidik jari - ini adalah kasus klasik di mana wavelet diperlukan untuk kompresi yang baik atas JPEG karena kebutuhan untuk menjaga detail.
datageist

@datageist: Gambar (output kamera mentah) dari kain dengan garis mungkin sulit untuk dikompres, tetapi mundur, ambil gambar lain: itu hanya akan mengandung piksel abu-abu, sangat mudah dikompresi dengan hampir tanpa kehilangan. Pola yang saya cari harus menghasilkan gambar (output kamera mentah) yang sulit untuk dikompres pada berbagai skala.
Nicolas Raoul

@NicolasRaoul Benar, saya mengerti, saya hanya mengatakan ada yang kompresibel jika Anda membuang informasi yang cukup. Apakah Anda hanya ingin pola yang memiliki perbedaan "sulit untuk dikompres" (yaitu untuk bersenang-senang), atau apakah Anda mencoba untuk secara aktif mencegah orang dari mencoba mengompres gambar yang mengandung pola?
datageist

Jawaban:


15

Kebisingan cukup baik (sulit dikompres), tetapi menjadi abu-abu ketika melihat dari jauh, menjadi mudah dikompres. Pola yang baik akan menjadi semacam fraktal, terlihat serupa di semua skala.

Nah, ada suara fraktal . Saya pikir noise Brown adalah fraktal, terlihat sama seperti Anda memperbesarnya. Wikipedia berbicara tentang menambahkan suara Perlin ke dirinya sendiri pada skala yang berbeda untuk menghasilkan suara fraktal, yang mungkin identik, saya tidak yakin:

Kebisingan fraktal Perlin

Saya pikir ini tidak akan sulit untuk dikompres. Kebisingan adalah sulit untuk kompresi lossless, tetapi JPEG adalah lossy, sehingga hanya akan membuang detail bukannya berjuang dengan itu. Saya tidak yakin apakah mungkin membuat sesuatu "sulit untuk dikompresi JPEG" karena itu akan mengabaikan apa pun yang terlalu sulit untuk dikompres pada tingkat kualitas itu.

Sesuatu dengan tepi yang keras pada skala berapa pun mungkin akan lebih baik, seperti bidang kotak-kotak tanpa batas:

pesawat kotak-kotak tak terbatas

Juga sesuatu dengan banyak warna. Mungkin melihat fraktal yang sebenarnya, bukan suara fraktal. Mungkin fraktal Mondrian ? :)

Fraktal Mondrian


1
Terima kasih banyak! Kebisingan fraktal jelas merupakan jenis hal yang saya cari, tetapi dalam pengujian saya dikompresi dengan baik, saya kira itu bisa menggunakan transisi yang lebih mendadak, bukan kehalusan seperti peta panas. Masalahnya adalah kinerja sangat tergantung pada bagian kain yang diambil. Fraktal Mondrian hebat, dan berkinerja terbaik dalam pengujian saya sejauh ini. Mungkin bisa menggunakan lebih banyak warna dan parameter yang sedikit berbeda.
Nicolas Raoul

@NicolasRaoul: Hmm .. Mungkin karpet Sierpinski dengan warna ? Itu pola selimut umum sudah.
endolith

Tessellation segitiga atau kotak Sierpinski mungkin memang hebat!
Nicolas Raoul

14

Jika kita berbicara tentang gambar yang dihasilkan komputer, noise akan menjadi pendekatan yang tepat. Tapi di sini, ada langkah pengambilan kamera.

The fraktal bit sangat penting karena masalah skala invarian. Namun, itu tidak harus benar-benar fraktal, jika Anda menganggap ada rentang jarak terbatas di mana orang tersebut akan difoto. Maksudku, jika orang yang memakai kain itu di latar belakang gambar, itu tidak akan berdampak banyak ...

Saya pikir cara terbaik untuk mengelabui encoder JPEG adalah memiliki blok dengan koefisien frekuensi tinggi yang sangat tinggi yang akan bertahan dalam kuantisasi = banyak detail dan tepi tajam; jadi seluruh urutan koefisien harus ditulis secara eksplisit (bukan EOB pada koefisien ke-15 atau lebih). Pola kotak-kotak adalah cara yang baik untuk mencapainya. Satu-satunya downside yang saya lihat adalah bahwa resolusi rendah lensa + filter antialiasing kamera memiliki peluang bagus untuk mengaburkan itu! Semuanya harus terjadi dalam 8x8 blok (atau 16x16 blok chroma-wise) karena JPEG tidak berbuat banyak pada skala makro. Anda harus membuat blok 8x8 semaca mungkin, tidak peduli seberapa buram lensa akan membuatnya.

Berikut ini sarannya:

skala-invarian, sulit untuk pola kompres JPEG

Anda mungkin bertanya-tanya apa yang dilakukan blok yang kurang kontras di sini, tetapi mereka membantu menjaga zona kontras ketika hal tersebut diperbesar. Tantangannya di sini adalah memiliki sesuatu dengan pola yang kontras tidak peduli skala penayangannya.

Saya belum secara resmi mengevaluasi ini. Cara terbaik adalah dengan memiliki skrip yang mengambil gambar, menerapkan selusin crop / resize / blur dengan berbagai parameter, dan meludahkan ukuran total JPEG.


Terima kasih banyak! Tampak sangat mirip dengan saya konsep gambar dalam pertanyaan, sebenarnya, tetapi jauh lebih bagus. Adakah alasan khusus mengapa "fraktalitas" disebabkan oleh faktor 4? Apakah ini lebih baik daripada faktor 2?
Nicolas Raoul

tanpa alasan, saya baru saja mencoba membuatnya tampak lebih cantik dengan lebih banyak nuansa warna, jadi saya mulai dengan kotak 4x4.
pichenettes

Adakah alasan untuk memilih kotak alih-alih segitiga? Saya mencoba sekarang, segitiga membuat banyak tepi tajam, yang menurut saya adalah pemikiran yang baik. "Fraktalitas" yang rendah dapat dicapai dengan segitiga hibrida → belah ketupat → hexagon → pendekatan segitiga. Saya pikir faktor rendah adalah hal yang baik karena meningkatkan kemungkinan kamera untuk mendeteksi bentuk tajam hingga batas resolusinya.
Nicolas Raoul

Kotak adalah hal termudah untuk dikodekan. Saya tidak yakin apakah bentuk lain memiliki "kepadatan tepi" yang lebih baik daripada kotak.
pichenettes

11

Ada perbedaan antara JPEG yang dapat dieksploitasi dan Transform Compressible.

Ambil suara kasar putih dari TV misalnya.

White noise umum tersebar maksimal dalam frekuensi dan karenanya tidak ada contoh yang lebih baik daripada white noise yang tidak dapat dikompres oleh teknik transformasi domain. Jika Anda mengambil noise seperti itu dan mengambil DCT (atau DFT jika diperlukan), kami akan menemukan bahwa domain frekuensi juga tersebar luas dan semua co-efisien akan memiliki kepentingan.

Namun, tetap tidak ada yang menghentikan Anda untuk menjadi agresif dari kuantisasi. Dengan cara ini, Anda masih dapat membuang jumlah besar dari daerah frekuensi tinggi. Hasilnya akan memiliki kesalahan Mean-Square-heavy. Namun, secara perseptual masih akan menjadi kebisingan. Mungkin sangat kabur.

Di sisi lain, sekarang ambil gambar dengan tepi tajam.

Tepi yang tajam juga akan menyebar dalam frekuensi yang lebih tinggi (tetapi mungkin itu hanya sedikit kurang dari kasus sebelumnya). Namun, dalam mencoba mengompres dan menjatuhkan frekuensi tinggi, sekarang akan ada beberapa hambatan visual. Ini akan memperkenalkan pengaburan tepi, efek dering dll. Meskipun penyebaran bandwidth untuk gambar tersebut tidak setinggi mungkin, Untuk JPEG atau kompresi setara lainnya, menjaga kualitas gambar yang sama secara persepsi akan sulit.

Untuk kompresi lossy, tangguh dan sederhana tergantung pada seberapa banyak dan jenis distorsi yang ditoleransi


Misalkan kain saya adalah tabel 10 ^ 8x10 ^ 8 piksel hitam / putih acak. Kamera mengambil gambar 10x10 piksel dari kain. Secara statistik, bukankah gambar 10x10 ini memiliki semua piksel berwarna abu-abu yang sangat mirip, sehingga mudah dikompres dengan distorsi yang lebih sedikit (dalam bentuk apa pun) daripada gambar yang kurang seragam?
Nicolas Raoul

10

Komposisi di bawah ini menunjukkan struktur pola fraktal. Setiap gambar berikutnya adalah hasil rata-rata setiap blok 2x2 piksel dari yang sebelumnya. Karakter total pola tetap sama tetapi kontras gambar secara bertahap menurun. Seperti yang dikatakan sebelumnya, gambar menjadi abu-abu saat kita memperkecil tampilan.

Perilaku penskalaan

Tetapi dengan menggunakan properti fraktal, kita dapat melapisi bersama beberapa pola resolusi yang berbeda untuk mempertahankan kontras gambar agar stabil dalam kisaran yang diinginkan. Di bawah ini adalah contoh pola 4-layer (512x512 GIF). Hasil ini lebih dekat dengan noise Brown dan juga kompresi JPEG.

Kombinasi 4 lapisan


5

Dugaan saya adalah bahwa pola kompresif terburuk adalah white noise (dengan distribusi seragam). Ini perlu terlihat berisik pada resolusi yang berbeda, sehingga Anda dapat membuat gambar berisik dalam ruang skala dan kemudian menggabungkannya:

saya=sayanNsayaGsaya

sayaNsayasayaGsayasayaσ

Mungkin cara yang lebih baik untuk membuat gambar seperti itu adalah bekerja secara langsung dalam domain frekuensi, dengan demikian:

  1. Buat gambar yang diisi dengan white noise.
  2. Lakukan blok 8x8 IDCT (Inverse Discrete Cosine Transform) pada gambar.

Hasilnya akan menjadi pola kompresibel terburuk untuk JPEG, karena memiliki entropi tertinggi dalam domain DCT. Tetapi saya tidak yakin bagaimana ini akan berperilaku di bawah berbagai resolusi.


5

IIRC, algoritma dekompresi JPEG ditentukan, namun algoritma kompresi yang tepat tidak. Algoritme yang berbeda dapat menghasilkan file JPEG yang legal. Jadi, Anda perlu menguji ini pada kompresor gambar yang Anda pilih.

Apa pun dapat dikompresi dengan jumlah yang sama dengan kompresor yang hilang, seperti JPEG. Hanya saja, pada tingkat kompresi tetap apa pun, kualitas kompresi mungkin bervariasi (noise atau kesalahan dalam hasil dekompresi akan meningkat) tergantung pada gambar. Jadi Anda menginginkan sesuatu yang menambahkan jumlah maksimum noise ke hasil dekompresi. Untuk ini, Anda menginginkan kesalahan maksimum untuk menghapus koefisien macroblock frekuensi tinggi dan untuk mengukur koefisien apa pun.

Yang mungkin berarti piket bervariasi dan frekuensi tinggi, serta berbagai skala abu-abu dan warna yang kebetulan berada di antara tingkat kuantisasi yang mungkin dari kompresor yang diberikan pada pengaturan tertentu.

Karena Anda ingin ini bekerja pada jarak berapa pun dalam pencahayaan apa pun, Anda perlu memvariasikan frekuensi piket (mungkin fraktal, atau mungkin hanya menggenjot modulasi frekuensi acak) dan tingkat warna dan abu-abu (tidak koheren, mis. warna dan level secara independen). Varians rona akan kurang bergantung pada jarak, sehingga yang hanya perlu dipilih menjadi kasus yang lebih buruk untuk kuantizer pilihan Anda. Ukuran rata-rata dari pola warna dapat dua kali ukuran dari pola luminance agar sesuai dengan komposisi makroblok YUV 4: 1: 1 (area).

Saya akan mulai dengan sekelompok pola Moire yang sangat berwarna pada skala yang sangat bervariasi yang ditindih dan / atau ditambal bersamaan.


2

Biarkan saya berbagi pola yang memiliki spektrum yang sangat datar (seperti white noise). Jadi pola ini sangat sulit untuk dikompres dengan JPG. Gambar sampel di bawah diperbesar 4 kali.

Polanya sendiri teratur, tetapi non-periodik, dan dapat dengan mudah dihasilkan oleh algoritma deterministik. Ia juga memiliki properti fraktal.

Pola non-periodik dengan spektrum noise kuasi putih

Dilihat dari jauh: asli jauh


2

Kebisingan acak memang kompres sangat buruk. Anda dapat memproduksinya dalam warna dengan menghasilkan nilai R, G, B yang independen.

Melihat dari jauh memang akan menghapus noise (dengan penyaringan lowpass), dan Anda dapat menghindarinya dengan menghasilkan gambar noise pada resolusi yang berbeda, yaitu menggunakan piksel yang lebih besar dan lebih besar, dan menempatkan di atasnya.

Saat menambahkan gambar, Anda menghadapi masalah kisaran nilai, yang tumbuh sebagai jumlah gambar, misalkan N. Jika Anda hanya meratakannya, amplitudo noise akan berkurang sebagai 1 / N.

Jika Anda memilih noise seragam yang tidak berkorelasi, superposisi akan menghasilkan distribusi quasi-Gaussian dengan √N standar deviasi, jadi alih-alih membaginya dengan N, Anda dapat membaginya dengan √N (dengan pemusatan ulang yang sesuai) untuk membatasi pengurangan amplitudo.

Terakhir, saya kira lebih baik membiarkan nilai-nilai yang dibungkus daripada menjenuhkannya, karena nilai-nilai jenuh akan membentuk area seragam yang besar.


2

Berikut ini adalah pendekatan lain yang mendapatkan noise RGB Brown (4096x4096 GIF). Kebisingan RGB Brown


0

Pertanyaan yang luar biasa! Dalam konsepnya, white noise adalah sinyal yang tidak berubah ketika waktu diskalakan. Dengan cara yang sama fraktal tidak berubah ketika ukurannya diskalakan. Proses kompresi lossy hanya mengambil yang paling penting dari spektrum (waktu atau ukuran) tidak semua, sehingga fraktal dan suara seperti cookie. Karena itu, Anda harus bermain dengan warna dan pola kain Anda. Mereka harus fraktal dan perilaku fraktal harus dihasilkan secara acak. Anda harus mendapatkan kain yang dalam foto terlihat hitam (dalam ruang warna CMY) tetapi di dunia nyata, ia memiliki pola warna-warni.

Semoga berhasil! , dan jika Anda mendapatkan anwser, silakan kirim !!!


"Anda harus mendapatkan kain yang dalam foto terlihat hitam" <- Dalam hal ini, bukankah itu mudah dikompres?
Nicolas Raoul
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.