JPEG. Algoritma pemampatan

Hello lagi! Saya dapati artikel ini ditulis pada Mei 2019. Ini adalah kesinambungan daripada siri artikel tentang WAVE dan JPEG, di sini pertama. Penerbitan ini akan memasukkan maklumat tentang algoritma pengekodan imej dan format itu sendiri secara keseluruhan.

Sedikit sejarah

Satu sudu besar artikel Wikipedia:

JPEG (Kumpulan Pakar Fotografi Bersama) ialah salah satu format grafik raster yang popular digunakan untuk menyimpan gambar dan imej yang serupa.

Piawaian ini telah dibangunkan oleh Kumpulan Pakar Fotografi Bersama pada tahun 1991 untuk pemampatan imej yang cekap.

Bagaimanakah imej bertukar daripada mentah kepada JPEG?

Sesetengah orang berpendapat bahawa imej JPEG ialah data mentah yang dimampatkan menggunakan kaedah Huffman, tetapi ini tidak benar. Sebelum mengawal pemampatan, data bergerak jauh.

Pertama, model warna ditukar daripada RGB kepada YCbCr. Malah terdapat algoritma khas untuk ini - di sini. Y tidak disentuh, kerana ia bertanggungjawab untuk kecerahan, dan perubahannya akan ketara.

Perkara pertama yang perlu dilakukan dengan imej ialah "penipisan" (subsampel). Ia mudah difahami: tatasusunan piksel 2x2 diambil, kemudian Cb dan Cr diambil - nilai purata setiap komponen YCbCr bagi 4 piksel ini. Jadi, kami memenangi 6 bait, daripada 4 Y, 4 Cb, 4 Cr kita mendapat 4 Y dan Cb dan Cr yang sama untuk setiap daripada mereka (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Pada skala 2x2 genap, mampatan lossy dengan nisbah mampatan 2:1 berbunyi pepejal. Ini terpakai pada keseluruhan imej. Dan sebagainya - mereka jatuh separuh saiz. Dan kita boleh menggunakan teknik ini berkat persepsi warna kita. Seseorang akan mudah melihat perbezaan dalam kecerahan, tetapi tidak dalam warna, jika ia dipuratakan pada blok kecil piksel. Penipisan juga boleh dilakukan dalam satu baris, 4 piksel secara mendatar dan menegak. Pilihan pertama digunakan lebih kerap. Jika kualiti imej adalah penting, maka penghapusan tidak dilakukan sama sekali.
Ilustrasi visual penipisan (Habr tidak membenarkan saya memasukkan gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Bahagian utama penyediaan

PrEP

Sekarang datang bahagian yang paling sukar dan paling perlu. Keseluruhan imej dibahagikan kepada blok 8x8 (pengisian digunakan jika resolusi bukan gandaan bahagian blok).

Sekarang gunakan untuk setiap blok DCT (Transformasi Kosinus Diskret). Di bahagian ini, semua yang tidak perlu dikeluarkan dari gambar. Menggunakan DCT, anda perlu memahami sama ada blok tertentu (8Γ—8) menerangkan mana-mana bahagian membosankan imej: langit, dinding; atau ia mengandungi struktur kompleks (rambut, simbol, dll.). Adalah logik bahawa 64 piksel warna yang serupa boleh digambarkan dengan hanya 1, kerana saiz blok sudah diketahui. Begitu banyak untuk pemampatan: 64 hingga 1.

DCT mengubah blok menjadi spektrum, dan di mana bacaan berubah secara mendadak, pekali menjadi positif, dan semakin tajam peralihan, semakin tinggi outputnya. Di mana pekali lebih tinggi, gambar menunjukkan peralihan yang jelas dalam warna dan kecerahan, di mana ia lebih rendah - perubahan yang lemah (licin) dalam nilai komponen YCbCr dalam blok.

Kuantisasi

Tetapan mampatan telah digunakan di sini. Setiap pekali dalam setiap matriks 8x8 dibahagikan dengan nombor tertentu. Jika anda tidak akan mengurangkan kualiti imej selepas semua pengubahsuaiannya, maka pembahagi haruslah satu. Jika memori yang diduduki oleh foto ini lebih penting kepada anda, maka pembahagi akan lebih besar daripada 1, dan hasil bagi akan dibundarkan. Ternyata selepas pembundaran anda sering mendapat banyak sifar.

Pengkuantitian dilakukan untuk mewujudkan kemungkinan pemampatan yang lebih besar. Begini rupanya menggunakan contoh mengkuantifikasi graf y = sin(x):

JPEG. Algoritma pemampatan

Pemampatan

Mula-mula kita melalui matriks dalam corak zig-zag:

JPEG. Algoritma pemampatan

Kami mendapat tatasusunan satu dimensi dengan nombor. Kami melihat bahawa terdapat banyak sifar di dalamnya, ia boleh dialih keluar. Untuk melakukan ini, bukannya urutan banyak sifar, kita masukkan 1 sifar dan selepas itu nombor yang menunjukkan nombor mereka dalam jujukan. Dengan cara ini anda boleh menetapkan semula kepada 1/3 saiz keseluruhan tatasusunan. Dan kemudian kami hanya memampatkan tatasusunan ini menggunakan kaedah Huffman dan menulisnya ke dalam fail itu sendiri.

Di mana digunakan

Dimana - mana. Seperti PNG, JPEG digunakan dalam kamera, OS (sebagai logo syarikat, ikon aplikasi, lakaran kecil) dan dalam semua kawasan yang mungkin di mana imej perlu disimpan dengan cekap.

Output

Pada masa ini, pengetahuan tentang JPEG kini bernilai hanya untuk tujuan pendidikan, kerana ia sudah dibina di mana-mana dan dioptimumkan oleh kumpulan besar orang, tetapi granit sains masih lazat.

sumber

Artikel tentang YCbCr di Wikipedia
Artikel Wikipedia tentang JPEG
Sedikit tentang PrEP dari post Pikabu
Artikel Wikipedia tentang PrEP

Sumber: www.habr.com

Tambah komen