JPEG. Algoritma komprèsi

Halo maneh! Aku nemokake artikel iki ditulis maneh ing Mei 2019. Iki minangka kelanjutan saka seri artikel babagan WAVE lan JPEG, ing kene pisanan. Publikasi iki bakal kalebu informasi babagan algoritma enkoding gambar lan format kasebut kanthi lengkap.

A jiwit saka sajarah

Sendok makan artikel Wikipedia:

JPEG (Joint Photographic Experts Group) minangka salah sawijining format grafis raster populer sing digunakake kanggo nyimpen foto lan gambar sing padha.

Standar iki dikembangake dening Joint Photographic Experts Group ing taun 1991 kanggo kompresi gambar sing efisien.

Kepiye carane gambar saka mentah dadi JPEG?

Sawetara wong mikir yen gambar JPEG minangka data mentah sing dikompres nggunakake metode Huffman, nanging iki ora bener. Sadurunge komprèsi kontrol, data lelungan adoh.

Kaping pisanan, model warna diganti saka RGB dadi YCbCr. Malah ana algoritma khusus kanggo iki - kene. Y ora kena, amarga tanggung jawab kanggo padhang, lan owah-owahan bakal katon.

Babagan pisanan sing kudu dilakoni karo gambar yaiku "tipis" (subsampling). Iku gampang dimengerti: 2x2 array piksel dijupuk, banjur Cb lan Cr dijupuk - nilai rata-rata saben komponen YCbCr saka 4 piksel iki. Dadi, kita menang 6 bait, tinimbang 4 Y, 4 Cb, 4 Cr kita entuk 4 Y lan Cb lan Cr padha kanggo saben wong (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Ing skala 2x2 malah, kompresi lossy kanthi rasio kompresi 2:1 muni padhet. Iki ditrapake kanggo kabeh gambar. Lan supaya - padha dropped setengah ukuran. Lan kita bisa nggunakake teknik iki amarga pemahaman warna. A wong bakal gampang sok dong mirsani prabédan ing padhange, nanging ora ing werna, yen iku rata-rata liwat pemblokiran cilik piksel. Thinning uga bisa rampung ing baris, 4 piksel horisontal lan vertikal. Opsi pisanan digunakake luwih asring. Yen kualitas gambar penting, mula decimation ora ditindakake.
Ilustrasi visual tipis (Habr ora ngidini aku nglebokake gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Bagian utama saka preparation

PrEP

Saiki teka bagean paling angel lan paling perlu. Kabeh gambar dipérang dadi blok 8x8 (isi digunakake yen resolusi ora kaping pirang-pirang saka sisih blok).

Saiki aplikasi kanggo saben blok DCT (Discrete Cosine Transform). Ing bagean iki, kabeh sing ora perlu dijupuk saka gambar. Nggunakake DCT, sampeyan kudu ngerti apa pamblokiran diwenehi (8×8) njlèntrèhaké bagean monoton saka gambar: langit, tembok; utawa ngandhut struktur kompleks (rambut, simbol, lsp). Iku logis sing 64 piksel saka werna padha bisa diterangake dening mung 1, amarga ukuran pemblokiran wis dikenal. Dadi akeh kanggo kompresi: 64 nganti 1.

DCT dadi pemblokiran menyang spektrum, lan ing ngendi wacan owah-owahan banget, koefisien dadi positif, lan luwih cetha transisi, sing luwih dhuwur output bakal. Yen koefisien luwih dhuwur, gambar kasebut nuduhake transisi sing jelas ing warna lan padhang, ing ngendi luwih murah - owah-owahan sing ringkih (lancar) ing nilai komponen YCbCr ing blok kasebut.

Kuantisasi

Setelan kompresi wis ditrapake ing kene. Saben koefisien ing saben matriks 8x8 dibagi karo nomer tartamtu. Yen sampeyan ora bakal nyuda kualitas gambar sawise kabeh modifikasi, pembagi kudu dadi siji. Yen memori sing dikuwasani dening foto iki luwih penting kanggo sampeyan, pembagi bakal luwih saka 1, lan quotient bakal dibunderaké. Pranyata metu sing sawise dibunderaké sampeyan asring mungkasi munggah karo akèh nul.

Kuantisasi ditindakake kanggo nggawe kemungkinan kompresi sing luwih gedhe. Mangkene apa sing katon nggunakake conto ngitung grafik y = sin(x):

JPEG. Algoritma komprèsi

Komprèsi

Pisanan kita ngliwati matriks kanthi pola zig-zag:

JPEG. Algoritma komprèsi

We njaluk array siji-dimensi karo nomer. We ndeleng sing ana akeh nul ing, padha bisa dibusak. Kanggo nindakake iki, tinimbang urutan akeh nul, kita ngetik 1 nul lan sawise iku nomer nuduhake nomer ing urutan. Kanthi cara iki sampeyan bisa ngreset menyang 1/3 ukuran kabeh array. Banjur kita mung compress array iki nggunakake metode Huffman lan nulis menyang file dhewe.

Where digunakake

Nang endi wae. Kaya PNG, JPEG digunakake ing kamera, OS (minangka logo perusahaan, lambang aplikasi, gambar cilik) lan ing kabeh wilayah sing bisa disimpen gambar kanthi efisien.

kesimpulan

Saiki, kawruh babagan JPEG saiki mung migunani kanggo tujuan pendhidhikan, amarga wis dibangun ing endi wae lan dioptimalake dening klompok gedhe, nanging granit ilmu isih enak.

Sumber informasi

Artikel babagan YCbCr ing Wikipedia
Artikel Wikipedia babagan JPEG
Sithik babagan PrEP saka kiriman Pikabu
Artikel Wikipedia babagan PrEP

Source: www.habr.com

Add a comment