Saya tidak yakin apakah ada yang belum menjelaskan mengapa angka ajaib tampaknya tepat 1: 2 dan tidak, misalnya, 1: 1.1 atau 1:20.
Salah satu alasannya adalah bahwa dalam banyak kasus hampir setengah dari data digital adalah noise , dan noise (menurut definisi) tidak dapat dikompres.
Saya melakukan percobaan yang sangat sederhana:
Saya mengambil kartu abu - abu . Bagi mata manusia, itu terlihat seperti selembar karton abu-abu yang polos dan netral. Secara khusus, tidak ada informasi .
Dan kemudian saya mengambil pemindai normal - persis jenis perangkat yang mungkin digunakan orang untuk mendigitalkan foto mereka.
Saya memindai kartu abu-abu. (Sebenarnya, saya memindai kartu abu-abu bersama-sama dengan kartu pos. Kartu pos itu ada untuk memeriksa kewarasan sehingga saya bisa memastikan perangkat lunak pemindai tidak melakukan sesuatu yang aneh, seperti secara otomatis menambah kontras ketika melihat kartu abu-abu yang tidak berguna.)
Saya memotong bagian 1000x1000 piksel kartu abu-abu, dan mengubahnya menjadi abu-abu (8 bit per piksel).
Apa yang kita miliki sekarang harus menjadi contoh yang cukup baik tentang apa yang terjadi ketika Anda mempelajari bagian tanpa fitur dari foto hitam putih yang dipindai , misalnya, langit cerah. Pada prinsipnya, seharusnya tidak ada yang terlihat.
Namun, dengan perbesaran yang lebih besar, sebenarnya terlihat seperti ini:
Tidak ada pola yang terlihat jelas, tetapi tidak memiliki warna abu-abu yang seragam. Bagian dari itu kemungkinan besar disebabkan oleh ketidaksempurnaan kartu abu-abu, tetapi saya akan berasumsi bahwa sebagian besar itu hanyalah noise yang dihasilkan oleh pemindai (noise termal di sel sensor, amplifier, konverter A / D, dll.). Terlihat sangat mirip suara Gaussian; di sini adalah histogram (dalam skala logaritmik ):
Sekarang jika kita mengasumsikan bahwa setiap piksel memiliki warna yang dipilih dari distribusi ini, berapa banyak entropi yang kita miliki? Skrip Python saya memberi tahu saya bahwa kami memiliki entropi sebanyak 3,3 bit per piksel . Dan itu banyak kebisingan.
Jika ini benar-benar kasusnya, itu akan menyiratkan bahwa tidak peduli algoritma kompresi yang kita gunakan, bitmap 1000x1000 piksel akan dikompresi, dalam kasus terbaik, menjadi file 412500-byte. Dan apa yang terjadi dalam praktek: Saya mendapat file PNG 432018-byte, cukup dekat.
Jika kita menggeneralisasi sedikit, tampaknya tidak peduli foto hitam putih mana yang saya pindai dengan pemindai ini, saya akan mendapatkan jumlah berikut ini:
- informasi "berguna" (jika ada),
- kebisingan, kira-kira. 3 bit per piksel.
Sekarang bahkan jika algoritma kompresi Anda meremas informasi yang berguna menjadi << 1 bit per piksel, Anda masih akan memiliki sebanyak 3 bit per pixel dari kebisingan yang tidak dapat dikompres. Dan versi terkompresi adalah 8 bit per piksel. Jadi rasio kompresi akan menjadi rata-rata 1: 2, apa pun yang Anda lakukan.
Contoh lain, dengan upaya untuk menemukan kondisi yang terlalu ideal:
- Kamera DSLR modern, menggunakan pengaturan sensitivitas terendah (paling sedikit noise).
- Bidikan kartu abu-abu yang tidak fokus (bahkan jika ada beberapa informasi yang terlihat dalam kartu abu-abu, itu akan kabur).
- Konversi file RAW menjadi gambar abu-abu 8-bit, tanpa menambahkan kontras. Saya menggunakan pengaturan khas dalam konverter RAW komersial. Konverter mencoba mengurangi noise secara default. Selain itu, kami menyimpan hasil akhir sebagai file 8-bit - pada dasarnya, kami membuang bit urutan terendah dari pembacaan sensor mentah!
Dan apa hasil akhirnya? Terlihat jauh lebih baik daripada yang saya dapatkan dari pemindai; kebisingan kurang diucapkan, dan tidak ada yang terlihat. Namun demikian, suara Gaussian ada di sana:
Dan entropinya? 2,7 bit per piksel . Ukuran file dalam praktek? 344923 byte untuk 1M piksel. Dalam skenario kasus terbaik, dengan beberapa kecurangan, kami mendorong rasio kompresi menjadi 1: 3.
Tentu saja semua ini tidak ada hubungannya dengan penelitian TCS, tapi saya pikir baik untuk mengingat apa yang sebenarnya membatasi kompresi data digital dunia nyata. Kemajuan dalam desain algoritma kompresi yang lebih canggih dan daya CPU mentah tidak akan membantu; jika Anda ingin menyimpan semua kebisingan tanpa kehilangan, Anda tidak dapat melakukan jauh lebih baik daripada 1: 2.