JPEG. Compression algorithm

Mhoro zvakare! Ndakawana chinyorwa ichi chakanyorwa muna Chivabvu 2019. Uku kuenderera mberi kwezvinyorwa zve WAVE neJPEG, pano kutanga. Ichi chinyorwa chinozosanganisira ruzivo nezve mufananidzo encoding algorithm uye iyo fomati pachayo yese.

A pinch of history

Chipunu chechinyorwa cheWikipedia:

JPEG (Joint Photographic Experts Group) ndeimwe yeakakurumbira raster graphics mafomati anoshandiswa kuchengetedza mafoto nemifananidzo yakafanana.

Iyi chiyero yakagadziridzwa neJoint Photographic Experts Group kumashure muna 1991 kuitira kudzvanya kwemifananidzo.

Mifananidzo inoenda sei kubva yakasvibirira kuenda kuJPEG?

Vamwe vanhu vanofunga kuti mifananidzo yeJPEG idata yakadzvanywa vachishandisa nzira yeHuffman, asi ichi hachisi chokwadi. Usati wadzora kudzvanywa, data inofamba rwendo rurefu.

Kutanga, iyo modhi yemavara inoshandurwa kubva kuRGB kuenda kuYCbCr. Iko kune kunyange yakakosha algorithm yeizvi - pano. Y haina kubatwa, sezvo inokonzera kupenya, uye kuchinja kwayo kuchaonekwa.

Chinhu chekutanga chekuita nemufananidzo "kuonda" (subsampling). Zviri nyore kunzwisisa: 2x2 array yemapikseli anotorwa, ipapo Cb neCr zvinotorwa - avhareji kukosha kweimwe neimwe yeYCbCr zvikamu zveaya 4 pixels. Saka, takahwina 6 bytes, pachinzvimbo che4 Y, 4 Cb, 4 Cr takawana 4 Y uye Cb yakafanana neCr kune imwe neimwe yadzo (4 + 4 + 4 = 12; 4 + 1 + 1 = 6; 12 - 6 = 6). Kunyange 2x2 chiyero, kurasikirwa kwekumanikidza ne 2: 1 compression reshiyo inonzwika yakasimba. Izvi zvinoshanda kumufananidzo wose. Uye saka - vakadonha hafu saizi. Uye isu tinogona kushandisa nzira iyi nekuda kwemaonero edu eruvara. Munhu anoona zviri nyore mutsauko mukupenya, asi kwete muruvara, kana yakaverengerwa pamusoro pediki bhokisi remapikiseli. Kutetepa kunogonawo kuitwa mumutsara, 4 pixels yakatwasuka uye yakatwasuka. Sarudzo yekutanga inoshandiswa kakawanda. Kana mhando yemufananidzo yakakosha, saka decimation haina kuitwa zvachose.
Mufananidzo wekuona wekutetepa (Habr haana kunditendera kuti ndiise gif) - https://i.ibb.co/Rg5Th9H/150953010617579181.gif

Chikamu chikuru chekugadzirira

PrEP

Zvino kunouya chikamu chakaoma uye chinonyanya kukosha. Mufananidzo wacho wose wakakamurwa kuva 8x8 zvidhinha (kuzadza kunoshandiswa kana kugadzirisa kusiri kuwanda kwechikamu che block).

Zvino shandisa kune imwe neimwe block DCT (Discrete Cosine Shanduko). Muchikamu chino, zvese zvisingakoshi zvinotorwa kubva pamufananidzo. Uchishandisa DCT, unofanirwa kunzwisisa kana bhuroko rakapihwa (8 Γ— 8) rinotsanangura chero chikamu chinotyisa chemufananidzo: denga, madziro; kana kuti ine chimiro chakaoma (bvudzi, zviratidzo, nezvimwewo). Zvine musoro kuti 64 pixels emavara akafanana anogona kutsanangurwa ne1 chete, nekuti saizi yeblock inotozivikanwa. Zvakawanda zvekumanikidza: 64 kusvika 1.

DCT inoshandura chivharo kuita spectrum, uye apo kuverenga kunoshanduka zvakanyanya, coefficient inova yakanaka, uye iyo inopinza shanduko, iyo yakakwirira inobuda. Ipo iyo coefficient yakakwira, iyo pikicha inoratidza yakajeka shanduko yeruvara uye kupenya, uko kwakadzikira - isina simba (yakatsetseka) shanduko muhunhu hweiyo YCbCr zvikamu mubhuroka.

Quantization

Kudzvanya kuseta kwatoiswa pano. Imwe neimwe yecoefficients mune imwe neimwe ye8x8 matrices inopatsanurwa neimwe nhamba. Kana iwe usingazodzikisi mufananidzo wemhando mushure mekugadzirisa kwayo kwese, saka divisor inofanira kuva imwe. Kana iyo ndangariro inogarwa nemufananidzo uyu yakakosha kwauri, saka divisor ichave yakakura kupfuura 1, uye iyo quotient ichatenderedzwa. Zvinoitika kuti mushure mekutenderedza iwe kazhinji unopedzisira uine mazero akawanda.

Quantization inoitwa kugadzira mukana wekunyanya kudzvanya. Hezvino zvinoita senge uchishandisa muenzaniso wekuverenga girafu y = chivi(x):

JPEG. Compression algorithm

Kudzvinyirira

Kutanga tinoenda kuburikidza nematrix mune zig-zag pateni:

JPEG. Compression algorithm

Tinowana imwe-dimensional array ine nhamba. Tinoona kuti kune mazero akawanda mairi, anogona kubviswa. Kuti tiite izvi, panzvimbo yekutevedzana kwezero dzakawanda, tinoisa 1 zero uye shure kwayo nhamba inoratidza nhamba yavo mukutevedzana. Nenzira iyi unogona kuseta zvakare ku 1/3 saizi yearoji yese. Uye isu tinongomanikidza iyi rondedzero tichishandisa nzira yeHuffman toinyora mufaira pachayo.

Inoshandiswa kupi

Kwese kwese. Kufanana nePNG, JPEG inoshandiswa mumakamera, OSs (sezvikwangwani zvekambani, zviratidzo zvekushandisa, zvigunwe) uye munzvimbo dzose dzinogoneka apo mifananidzo inoda kuchengetedzwa zvakanaka.

mhedziso

Panguva ino, ruzivo pamusoro peJPEG ikozvino rwakakosha chete nekuda kwezvinangwa zvekudzidzisa, nokuti yakatovakwa munzvimbo dzose uye yakagadziridzwa nemapoka makuru evanhu, asi granite yesayenzi ichiri inonaka.

Sources

Chinyorwa nezveYCbCr paWikipedia
Wikipedia chinyorwa paJPEG
Zvishoma nezve PrEP kubva kuPikabu post
Wikipedia chinyorwa paPrEP

Source: www.habr.com

Voeg