Ahoana ny fomba fiasan'ny format JPEG

Ny sary JPEG dia hita eny rehetra eny amin'ny fiainantsika dizitaly, saingy ao ambadik'io fahatsiarovan-tena io dia misy algorithm izay manaisotra ny pitsopitsony tsy azon'ny mason'olombelona. Ny vokatr'izany dia ny kalitao avo indrindra amin'ny haben'ny rakitra kely indrindra - fa ahoana marina no fiasan'izy rehetra? Andeha hojerentsika izay tena tsy hitan’ny masontsika!

Ahoana ny fomba fiasan'ny format JPEG

Mora raisina ho tsinontsinona ny fahafahana mandefa sary amin'ny namana iray ary tsy manahy momba ny fitaovana, ny navigateur na ny rafitra fiasan'izy ireo - saingy tsy izany foana no nitranga. Tany am-piandohan'ireo taona 1980 dia afaka mitahiry sy mampiseho sary nomerika ny solosaina, saingy nisy hevitra maro nifaninana momba ny fomba tsara indrindra hanaovana izany. Tsy afaka mandefa sary avy amin'ny solosaina iray mankany amin'ny iray hafa fotsiny ianao ary manantena fa mety izany.

Mba hamahana io olana io, dia nisy komity manam-pahaizana avy amin'ny lafivalon'izao tontolo izao nivory tamin'ny 1986 antsoina hoe "Vondrona iraisan'ny manam-pahaizana momba ny sary» (Joint Photographic Experts Group, JPEG), natsangana ho fiaraha-miasa eo amin'ny International Organization for Standardization (ISO) sy ny International Electrotechnical Commission (IEC), fikambanana iraisam-pirenena roa manana ny foibeny any Genève, Soisa.

Vondron'olona antsoina hoe JPEG no namorona ny fenitra famatrarana sary nomerika JPEG tamin'ny 1992. Na iza na iza nampiasa Internet dia mety nahita sary voafandrika JPEG. Ity no fomba mahazatra indrindra amin'ny famadihana, fandefasana ary fitahirizana sary. Avy amin'ny pejin-tranonkala mankany amin'ny mailaka mankany amin'ny media sosialy, ny JPEG dia ampiasaina imbetsaka isan'andro — saika isaky ny mijery sary an-tserasera na mandefa azy isika. Raha tsy misy JPEG, dia tsy dia miloko kokoa ny tranonkala, miadana kokoa ary mety ho vitsy kokoa ny sarin'ny saka!

Ity lahatsoratra ity dia momba ny fomba hamadika sary JPEG. Raha lazaina amin'ny teny hafa, inona no takiana mba hamadihana ny angona voatsindry voatahiry ao amin'ny solosaina ho sary miseho eo amin'ny efijery. Tsara ho fantatra izany, tsy hoe satria zava-dehibe ny fahatakarana ny teknolojia ampiasaintsika isan'andro, fa koa satria amin'ny alàlan'ny fanokafana ny haavon'ny fanerena, dia mianatra bebe kokoa momba ny fomba fijery sy ny fahitana isika, ary ny antsipiriany izay saro-pady indrindra amin'ny masontsika.

Ankoatra izany, ny milalao sary amin'ny fomba toy izany dia tena mahaliana.

Ahoana ny fomba fiasan'ny format JPEG

Mijery ao anaty JPEG

Amin'ny ordinatera, ny zava-drehetra dia voatahiry ho toy ny filaharan'ny isa mimari-droa. Amin'ny ankapobeny ireo bitika, aotra ary iray, dia mivondrona ao anaty vondrona misy valo mba hahaforona bytes. Rehefa manokatra sary JPEG amin'ny solosaina ianao dia misy zavatra (mpitety, rafitra miasa, zavatra hafa) tsy maintsy mamadika ny bytes, mamerina ny sary tany am-boalohany ho lisitry ny loko azo aseho.

Raha misintona ity mamy ity ianao sarin'ny saka ary sokafy izany amin'ny tonian-dahatsoratra, dia hahita andian-tsoratra incoherent ianao.

Ahoana ny fomba fiasan'ny format JPEG
Eto aho dia mampiasa Notepad ++ handinihana ny votoatin'ny rakitra, satria ny mpamoaka lahatsoratra mahazatra toa ny Notepad amin'ny Windows dia hanimba ny rakitra binary rehefa avy mitahiry ary tsy hanome fahafaham-po ny format JPEG intsony.

Mampisavoritaka ny ordinatera ny fanokafana sary amin'ny processeur, toy ny fanakorontanana ny atidohanao rehefa mikosoka ny masonao ianao ary manomboka mahita loko!

Ireo toerana hitanao ireo dia fantatra amin'ny hoe phosphenes, ary tsy vokatry ny fanentanana maivana na ny hallucination ateraky ny saina. Mitranga izany satria mihevitra ny atidohanao fa misy famantarana elektrika ao amin'ny nerveo optique mampita vaovao momba ny hazavana. Ny atidoha dia mila manao ireo vinavina ireo satria tsy misy fomba ahafantarana na feo na fahitana na zavatra hafa ny famantarana. Ny nerveuse rehetra ao amin'ny vatana dia mamindra tosika elektrika mitovy. Amin'ny alàlan'ny fanerena ny masonao dia mandefa famantarana tsy hita maso ianao, fa manetsika ireo mpandray ny maso, izay adikan'ny atidohanao - amin'ity tranga ity, diso - ho zavatra hita maso. Hitanao ara-bakiteny ny tsindry!

Mampihomehy ny mieritreritra ny mitovy amin'ny ordinatera amin'ny ati-doha, fa fanoharana mahasoa ihany koa izy io mba hanehoana ny halehiben'ny dikan'ny angon-drakitra — na entin'ny nerveo amin'ny vatana na voatahiry amin'ny solosaina — miankina amin'ny fomba fandikana azy. Ny angon-drakitra binary rehetra dia voaforona amin'ny XNUMXs sy XNUMXs, ireo singa fototra afaka mampita vaovao amin'ny karazana rehetra. Matetika ny solosainao no mamaritra ny fomba handikana azy ireo amin'ny fampiasana fanoroana toy ny fanitarana rakitra. Ankehitriny dia manery azy handika azy ireo ho lahatsoratra izahay, satria izany no andrasan'ny mpamoaka lahatsoratra.

Mba hahatakarana ny fomba hamadihana ny JPEG dia mila mahita ny famantarana tany am-boalohany - ny angon-drakitra binary. Azo atao izany amin'ny alàlan'ny tonian-dahatsoratra hexadecimal, na mivantana pejy web lahatsoratra tany am-boalohany! Misy sary, izay eo anilan'ny sahan'ny lahatsoratra dia ny bytes rehetra (afa-tsy ny lohapejy), aseho amin'ny endrika decimal. Azonao atao ny manova azy ireo, ary ny script dia hamerina ny code ary hamokatra sary vaovao amin'ny sidina.

Ahoana ny fomba fiasan'ny format JPEG

Afaka mianatra zavatra betsaka ianao amin'ny alalan'ny filalaovana an'ity editor ity. Ohatra, azonao atao ve ny milaza hoe inona ny filaharana misy ny pixel?

Ny mahagaga amin'ity ohatra ity dia tsy misy fiantraikany amin'ny sary mihitsy ny fanovana isa sasany, fa raha soloinao 17 ny laharana 0 amin'ny laharana voalohany, ohatra, dia ho simba tanteraka ny sary!

Ahoana ny fomba fiasan'ny format JPEG

Ny fanovana hafa, toy ny fanoloana ny 7 amin'ny tsipika 1988 amin'ny isa 254, dia manova ny loko, fa ny piksel manaraka ihany.

Ahoana ny fomba fiasan'ny format JPEG

Angamba ny zavatra hafahafa indrindra dia ny hoe ny isa sasany dia manova tsy ny loko ihany, fa ny endriky ny sary ihany koa. Ovay ny 70 amin'ny andalana 12 ho 2 ary jereo ny laharana ambony amin'ny sary hahitana ny tiako holazaina.

Ahoana ny fomba fiasan'ny format JPEG

Ary na inona na inona sary JPEG ampiasainao dia ho hitanao foana ireo lamina chess mistery ireo rehefa manitsy ny bytes.

Rehefa milalao miaraka amin'ny tonian-dahatsoratra dia sarotra ny mahatakatra ny fomba namerenana sary avy amin'ireo bytes ireo, satria ny famatrarana JPEG dia misy teknolojia telo samihafa, ampiharina amin'ny ambaratonga manaraka. Hianarantsika tsirairay ny tsirairay mba hamantarana ny fihetsika mistery hitantsika.

Ambaratonga telo amin'ny famatrarana JPEG:

  1. Loko subsampling.
  2. Fiovan'ny cosine discrete sy sampling.
  3. Encoding halavan'ny mihazakazaka, Delta и Huffman

Mba hanomezana anao ny halehiben'ny fanerena, mariho fa ny sary etsy ambony dia maneho isa 79, na 819 KB eo ho eo. Raha tehirizinay tsy misy famoretana izany dia mitaky isa telo ny piksel tsirairay - ho an'ny singa mena, maitso ary manga. Izany dia mitentina 79 isa, na eo ho eo. 917 KB. Vokatry ny fanerena JPEG dia nihena in-700 mahery ny rakitra farany!

Raha ny marina, ity sary ity dia azo tsindriana bebe kokoa. Ireto ambany ireto ny sary roa mifanila - ny sary eo ankavanana dia voatsindry ho 16 KB, izany hoe 57 heny noho ny dikan-teny tsy voapotsitra!

Ahoana ny fomba fiasan'ny format JPEG

Raha mijery akaiky ianao dia ho hitanao fa tsy mitovy ireo sary ireo. Izy roa ireo dia sary miaraka amin'ny JPEG famatrarana, fa ny havanana dia kely kokoa ny habeny. Somary ratsy ihany koa ny fijery azy (jereo ny efamira misy loko ambadika). Izany no mahatonga ny JPEG antsoina koa hoe lossy compression; Mandritra ny dingan'ny famoretana dia miova ny sary ary very ny antsipiriany sasany.

1. Loko subsampling

Ity misy sary tsy misy afa-tsy ny ambaratonga voalohany amin'ny famoretana ampiharina.

Ahoana ny fomba fiasan'ny format JPEG
(Dikan-teny interactive - in tamin'ny fototra lahatsoratra). Ny fanesorana isa iray dia manimba ny loko rehetra. Na izany aza, raha esorina ny isa enina, dia saika tsy misy fiantraikany amin'ny sary izany.

Amin'izao fotoana izao dia mora kokoa ny hamantatra ny isa. Saika lisitra tsotra amin'ny loko izy io, izay manova pikantsary iray marina ny byte tsirairay, fa amin'izay fotoana izay dia efa antsasaky ny haben'ny sary tsy voapotsitra (izay mety hahatratra 300 KB amin'ity habe ity). Fantatrao ve ny antony?

Hitanao fa ireo isa ireo dia tsy maneho ny singa manara-penitra mena, maitso ary manga, satria raha solointsika aotra ny isa rehetra dia hahazo sary maitso (fa tsy fotsy).

Ahoana ny fomba fiasan'ny format JPEG

Izany dia satria ireo bytes ireo dia manondro ny Y (famirapiratana),

Ahoana ny fomba fiasan'ny format JPEG

Cb (havana manga),

Ahoana ny fomba fiasan'ny format JPEG

ary sary Cr (mena mena).

Ahoana ny fomba fiasan'ny format JPEG

Nahoana no tsy mampiasa RGB? Rehefa dinihina tokoa, izany no fomba fiasan'ny ankamaroan'ny efijery maoderina. Ny monitor-nao dia afaka mampiseho loko rehetra, anisan'izany ny mena, maitso ary manga, miaraka amin'ny hamafin'ny isan-karazany isaky ny piksel. Ny fotsy dia azo amin'ny famadihana ny telo amin'ny famirapiratana feno, ary ny mainty amin'ny famonoana azy ireo.

Ahoana ny fomba fiasan'ny format JPEG

Tena mitovy amin'ny fomba fiasan'ny mason'olombelona koa izany. Ireo mpandray loko eo amin'ny masontsika dia antsoina hoe "cones“, ary mizara ho karazany telo, ny tsirairay amin'izy ireo dia saro-pady kokoa amin'ny loko mena na maitso na manga [S-karazana cones dia saro-pady amin'ny violet-manga (S avy amin'ny teny anglisy Short - short-wave spectrum), M -karazana - amin'ny maitso-mavo (M avy amin'ny Anglisy Medium - antonony-onja), ary L-karazana - amin'ny mavo-mena (L avy amin'ny anglisy Long - lava-onja) ampahany amin'ny spectrum. Ny fisian'ireo karazana cones telo ireo (sy ny tsorakazo, izay saro-pady amin'ny ampahany maitso emeralda amin'ny spektrum) dia manome fahitana loko ny olona iray. / eo ho eo. transl.]. tapa-kazo, karazana photoreceptor hafa eo amin'ny masontsika, dia afaka mamantatra ny fiovan'ny famirapiratana, saingy mora kokoa amin'ny loko. Ny masontsika dia manana tsorakazo eo amin'ny 120 tapitrisa ary cones 6 tapitrisa monja.

Izany no mahatonga ny masontsika ho tsara kokoa amin'ny fahitana ny fiovan'ny famirapiratana noho ny fiovan'ny loko. Raha manasaraka ny loko amin'ny famirapiratana ianao dia afaka manala loko kely ary tsy misy mahatsikaritra na inona na inona. Ny subsampling Chroma dia fomba fanehoana ny singa loko amin'ny sary iray amin'ny famaha ambany kokoa noho ny singa famirapiratana. Ao amin'ny ohatra etsy ambony, ny piksel tsirairay dia manana singa Y iray, ary ny vondrona tsirairay misy piksel efatra dia manana singa Cb iray sy Cr iray. Noho izany, ny sary dia misy fampahafantarana loko avo efatra heny noho ny tany am-boalohany.

Ny habaka loko YCbCr dia tsy ampiasaina amin'ny JPEG ihany. Izy io dia noforonina tany am-boalohany tamin'ny 1938 ho an'ny fandaharana amin'ny fahitalavitra. Tsy ny rehetra no manana fahitalavitra miloko, noho izany ny fanavahana ny loko sy ny famirapiratana dia nahafahan'ny rehetra mahazo famantarana mitovy, ary ny fahitalavitra tsy misy loko dia nampiasa fotsiny ny singa famirapiratana.

Ka ny fanesorana isa iray amin'ny tonian-dahatsoratra dia manimba tanteraka ny loko rehetra. Ny singa dia voatahiry amin'ny endrika Y Y Y Y Cb Cr (raha ny marina, tsy voatery amin'io filaharana io - ny filaharana fitahirizana dia voafaritra ao amin'ny lohatenin'ny rakitra). Ny fanesorana ny isa voalohany dia hahatonga ny sanda voalohany amin'ny Cb ho raisina ho Y, Cr ho Cb, ary amin'ny ankapobeny dia hisy fiantraikany domino izay manova ny loko rehetra amin'ny sary.

Ny famaritana JPEG dia tsy manery anao hampiasa YCbCr. Saingy ny ankamaroan'ny rakitra dia mampiasa azy io satria mamokatra sary ambany kokoa noho ny RGB. Saingy tsy voatery handray ny teniko ianao. Jereo ho anao eo amin'ny tabilao etsy ambany hoe inona no mety ho endriky ny subsampling ny singa tsirairay ao amin'ny RGB sy YCbCr.

Ahoana ny fomba fiasan'ny format JPEG
(Dikan-teny interactive - in tamin'ny fototra lahatsoratra).

Ny fanesorana ny manga dia tsy hita maso toy ny mena na maitso. Izany dia noho ny enina tapitrisa cones eo amin'ny masonao, eo amin'ny 64% eo ho eo no saro-pady amin'ny mena, 32% amin'ny maitso ary 2% amin'ny manga.

Ny fampidinana ny singa Y (ambany havia) no tena hita. Na dia fiovana kely aza dia tsikaritra.

Ny famadihana sary avy amin'ny RGB ho YCbCr dia tsy mampihena ny haben'ny rakitra, fa manamora ny fitadiavana antsipiriany tsy dia hita loatra izay azo esorina. Ny famatrarana very dia mitranga amin'ny dingana faharoa. Izy io dia mifototra amin'ny hevitra manolotra angon-drakitra amin'ny endrika azo fehezina kokoa.

2. Fiovan'ny cosine discrete sy sampling

Ity haavon'ny famatrarana ity dia, amin'ny ankapobeny, ny atao hoe JPEG. Aorian'ny famadihana ny loko ho YCbCr, dia voatsindry tsirairay ireo singa ireo, ka afaka mifantoka amin'ny singa Y fotsiny isika.

Ahoana ny fomba fiasan'ny format JPEG
(Dikan-teny interactive - in tamin'ny fototra lahatsoratra). Ao amin'ny dikan-teny ifanakalozan-kevitra, ny fipihana piksel iray dia manodina ny tonian-dahatsoratra mankany amin'ny tsipika maneho azy. Andramo ny manala isa amin'ny farany na manampy aotra vitsivitsy amin'ny isa iray.

Raha vao jerena dia toa ratsy be ny compression. Misy piksela 100 ao amin'ny sary iray, ary isa 000 no ilazana ny famirapiratany (singa Y) — ratsy kokoa noho ny tsy manindry na inona na inona mihitsy izany!

Mariho anefa fa ny ankamaroan'ireo isa ireo dia aotra. Ankoatra izany, ireo aotra rehetra amin'ny faran'ny andalana ireo dia azo esorina nefa tsy manova ny sary. Misy isa 26 000 eo ho eo, ary efa ho in-4 izany!

Ity ambaratonga ity dia misy ny tsiambaratelon'ny lamina echec. Tsy toy ny vokatra hafa hitanay, ny fisehon'ireo lamina ireo dia tsy glitch. Izy ireo no singa fototra amin'ny sary manontolo. Ny andalana tsirairay amin'ny tonian-dahatsoratra dia misy isa 64 katroka, coefficient discrete cosine transform (DCT) mifanaraka amin'ny hamafin'ny lamina tokana 64.

Ireo lamina ireo dia miorina amin'ny tsipika cosine. Toy izao ny endriky ny sasany amin'izy ireo:

Ahoana ny fomba fiasan'ny format JPEG
8 amin'ny 64 odds

Ity ambany ity ny sary mampiseho ny lamina 64 rehetra.

Ahoana ny fomba fiasan'ny format JPEG
(Dikan-teny interactive - in tamin'ny fototra lahatsoratra).

Ireo lamina ireo dia manan-danja manokana satria izy ireo no fototry ny sary 8x8. Raha tsy zatra algebra tsipika ianao dia midika izany fa misy sary 8x8 azo amboarina avy amin'ireo lamina 64 ireo. Ny DCT dia ny fizotry ny fizarana sary ho blocs 8x8 ary mamadika ny bloc tsirairay ho fitambaran'ireo coefficient 64 ireo.

Toa majika fa ny sary rehetra dia mety ahitana lamina manokana 64. Na izany aza, mitovy amin'ny filazana fa ny toerana rehetra eto an-tany dia azo faritana amin'ny isa roa - latitude sy longitude [manondro ny hemisphere / eo ho eo. transl.]. Matetika isika no mihevitra ny velaran'ny tany ho diman-droa, ka isa roa ihany no ilaintsika. Ny sary 8x8 dia manana refy 64, ka mila isa 64 isika.

Tsy mbola fantatra mazava hoe ahoana no anampian'izany antsika amin'ny resaka compression. Raha mila isa 64 isika hanehoana sary 8x8, nahoana izany no tsara kokoa noho ny fitahirizana singa mamirapiratra 64? Manao izany izahay noho ny antony iray ihany no namadihanay isa RGB telo ho isa YCbCr telo: mamela anay hanaisotra ny antsipiriany an-kolaka.

Sarotra ny mahita tsara hoe inona ny antsipiriany nesorina amin'ity dingana ity satria JPEG dia mampihatra DCT amin'ny sakana 8x8. Na izany aza, tsy misy mandrara antsika hampihatra izany amin'ny sary manontolo. Toy izao ny endriky ny DCT ho an'ny singa Y ampiharina amin'ny sary manontolo:

Ahoana ny fomba fiasan'ny format JPEG

Maherin'ny 60 isa no azo esorina amin'ny farany ary saika tsy misy fiovana hita maso amin'ny sary.

Ahoana ny fomba fiasan'ny format JPEG

Na izany aza, mariho fa raha tsy misy ny isa dimy voalohany, dia ho hita ny fahasamihafana.

Ahoana ny fomba fiasan'ny format JPEG

Ny isa eo am-piandohana dia maneho ny fiovan'ny matetika amin'ny sary, izay tsara indrindra amin'ny masontsika. Ny isa mankany amin'ny farany dia manondro ny fiovan'ny onjam-peo avo izay sarotra tsikaritra kokoa. Mba “hijerena izay tsy hitan’ny maso”, dia azontsika atao ny manasaraka ireo antsipirian-javatra avo lenta ireo amin’ny alàlan’ny fanalana ny isa 5000 voalohany.

Ahoana ny fomba fiasan'ny format JPEG

Hitantsika ny faritra rehetra amin'ny sary izay misy ny fiovana lehibe indrindra amin'ny pixel mankany amin'ny pixel. Misongadina ny mason’ilay saka, ny volombavany, ny bodofotsy tery ary ny aloka eo amin’ny zorony ambany havia. Afaka mandroso bebe kokoa ianao amin'ny alàlan'ny fanalana ireo isa 10 voalohany:

Ahoana ny fomba fiasan'ny format JPEG

20 000:

Ahoana ny fomba fiasan'ny format JPEG

40 000:

Ahoana ny fomba fiasan'ny format JPEG

60 000:

Ahoana ny fomba fiasan'ny format JPEG

Ireo antsipirian'ny fanerena avo lenta ireo dia esorina amin'ny JPEG mandritra ny dingana famoretana. Tsy misy fatiantoka amin'ny famadihana loko ho coefficient DCT. Ny fatiantoka dia mitranga amin'ny dingana fanaovana santionany, izay nesorina ny sanda avo lenta na akaiky aotra. Rehefa mampidina ny kalitaon'ny fitahirizana JPEG ianao, dia mampitombo ny tokonam-baravarana ho an'ny isan'ny soatoavina nesorina ny programa, izay mampihena ny haben'ny rakitra, fa mahatonga ny sary ho pixelated kokoa. Izany no nahatonga ny sary tao amin'ny fizarana voalohany, izay 57 heny ny kely kokoa, dia toa izao. Ny sakana 8x8 tsirairay dia nasehon'ny coefficient DCT vitsy kokoa raha oharina amin'ny dikan-teny ambony kokoa.

Afaka mamorona vokatra mangatsiatsiaka toy ny fandefasana sary miandalana ianao. Azonao atao ny mampiseho sary manjavozavo izay mihamitombo hatrany amin'ny antsipiriany rehefa mihamaro ny coefficient alaina.

Eto, fialamboly fotsiny, no azonao amin'ny fampiasana isa 24 fotsiny:

Ahoana ny fomba fiasan'ny format JPEG

Na 5000 fotsiny:

Ahoana ny fomba fiasan'ny format JPEG

Tena manjavozavo, nefa azo fantarina!

3. Mandehana ny halavan'ny famandrihana, delta ary Huffman

Hatramin'izao, ny dingana rehetra amin'ny famoretana dia very. Ny dingana farany, mifanohitra amin'izany, dia mandeha tsy misy fatiantoka. Tsy mamafa vaovao izany, fa mampihena be ny haben'ny rakitra.

Ahoana no ahafahanao manindry zavatra nefa tsy manary vaovao? Alaivo sary an-tsaina ny fomba hamaritana ny mahitsizoro mainty tsotra 700 x 437.

JPEG dia mampiasa isa 5000 ho an'izany, saingy misy vokatra tsara kokoa azo tratrarina. Azonao alaina sary an-tsaina ve ny rafitra fandiovana izay mamaritra ny sary toy izany amin'ny bytes vitsy araka izay azo atao?

Ny tetika kely indrindra azoko novolavolaina dia mampiasa efatra: telo hanehoana loko iray, ary ny fahefatra hanondroana ny isan'ny piksela ananan'io loko io. Ny hevitra maneho ny soatoavina miverimberina amin'ity fomba mivaingana ity dia antsoina hoe encoding run-length. Tsy misy fatiantoka satria afaka mamerina ny angon-drakitra voakodia amin'ny endriny voalohany.

Ny rakitra JPEG misy mahitsizoro mainty dia lehibe kokoa noho ny 4 bytes - tadidio fa amin'ny ambaratonga DCT dia ampiharina amin'ny sakana 8x8 pixel ny famatrarana. Noho izany, fara fahakeliny, dia mila DCT iray isaky ny 64 pixels. Mila iray isika satria raha tokony hitehirizana coefficient DCT iray arahin'ny aotra 63, dia ahafahantsika mitahiry isa iray ary manondro fa "ny hafa rehetra dia aotra."

Ny fanodikodinana delta dia teknika iray ahitana fahasamihafan'ny sandany tsirairay, fa tsy sanda tanteraka. Noho izany, manova ny lokon'ny pixel hafa rehetra ny fanovana bytes sasany. Ohatra, fa tsy mitahiry

12 13 14 14 14 13 13 14

Afaka manomboka amin'ny 12 isika ary avy eo dia manondro fotsiny hoe ohatrinona no ilaintsika ampiana na esorina mba hahazoana ny isa manaraka. Ary ity filaharan'ny delta coding ity dia maka endrika:

12 1 1 0 0 -1 0 1

Ny angona niova fo dia tsy kely noho ny angona tany am-boalohany, fa mora kokoa ny manindry azy. Ny fampiharana delta encoding alohan'ny hazakazaka dia afaka manampy betsaka raha mbola tsy misy famatrarana.

Ny kaody delta dia iray amin'ireo teknika vitsivitsy ampiasaina ivelan'ny sakana 8x8. Amin'ireo 64 DCT coefficients, ny iray dia fampandehanana onja tsy tapaka (loko mivaingana). Izy io dia maneho ny salan'isan'ny famirapiratan'ny sakana tsirairay ho an'ny singa luma, na ny salan'isa manga ho an'ny singa Cb, sy ny sisa. Ny sanda voalohany amin'ny sakana DCT tsirairay dia antsoina hoe sanda DC, ary ny sandan'ny DC tsirairay dia delta voahodina mifanaraka amin'ny teo aloha. Noho izany, ny fanovana ny famirapiratan'ny sakana voalohany dia hisy fiantraikany amin'ny sakana rehetra.

Mipetraka ny mistery farany: ahoana no manimba tanteraka ny sary manontolo ny fanovana ny singular? Hatreto, tsy mbola nanana toetra toy izany ny haavon'ny fanerena. Ny valiny dia ao amin'ny lohatenin'ny JPEG. Ny 500 bytes voalohany dia misy metadata momba ny sary - sakany, haavony, sns., ary mbola tsy niara-niasa tamin'izy ireo izahay.

Raha tsy misy lohapejy dia saika tsy ho vita (na sarotra be) ny mamadika ny JPEG. Ho toy ny hoe miezaka mamaritra ny sary aminao aho, ary manomboka mamorona teny aho mba hampitana ny fahatsapako. Ny famaritana dia mety ho fohy, satria afaka mamorona teny miaraka amin'ny hevitra tiako hampitaina aho, fa ho an'ny olon-drehetra dia tsy misy dikany izany.

Toa adala, fa izay indrindra no mitranga. Ny sary JPEG tsirairay dia voapotsitra miaraka amin'ny kaody manokana momba azy. Ny rakibolana kaody dia voatahiry ao amin'ny lohapejy. Ity teknika ity dia antsoina hoe Huffman code ary ny voambolana dia antsoina hoe Huffman table. Ao amin'ny lohapejy, misy marika roa ny latabatra - 255 ary avy eo 196. Ny singa loko tsirairay dia afaka manana latabatra manokana.

Ny fiovana amin'ny tabilao dia hisy fiantraikany amin'ny sary rehetra. Ohatra tsara ny fanovana ny andalana faha-15 ho 1.

Ahoana ny fomba fiasan'ny format JPEG

Mitranga izany satria ny tabilao dia mamaritra ny fomba famakiana ny bits tsirairay. Hatreto dia tsy niasa afa-tsy tamin'ny isa mimari-droa amin'ny endrika decimal. Saingy manafina amintsika izany fa raha te hitahiry ny isa 1 amin'ny byte ianao dia ho toy ny 00000001 izany, satria ny byte tsirairay dia tsy maintsy manana bits valo, na dia iray monja amin'izy ireo aza no ilaina.

Mety ho fandaniam-potoana lehibe izany raha manana isa kely be dia be ianao. Ny kaody Huffman dia teknika ahafahantsika miala sasatra amin'ity fepetra ity fa ny isa tsirairay dia tsy maintsy manana bits valo. Midika izany fa raha mahita bytes roa ianao:

234 115

Avy eo, miankina amin'ny latabatra Huffman, mety ho isa telo ireo. Mba hanesorana azy ireo dia mila manasaraka azy ireo ho bitika tsirairay ianao:

11101010 01110011

Dia mijery ny latabatra isika mba hahitana ny fomba hanakambanana azy ireo. Ohatra, mety ho ny bitika enina voalohany, (111010), na 58 amin'ny decimal, arahin'ny bitika dimy (10011), na 19, ary farany ny bitika efatra farany (0011), na 3.

Noho izany dia sarotra be ny mahazo ny bytes amin'ity dingana famoretana ity. Ny bytes dia tsy maneho ny endriny. Tsy hiditra amin'ny antsipiriany momba ny fiasana amin'ny latabatra amin'ity lahatsoratra ity aho, fa fitaovana momba ity olana ity amin'ny Internet dia ampy.

Ny fika mahaliana iray azonao atao amin'ity fahalalana ity dia ny manasaraka ny lohapejy amin'ny JPEG ary mitahiry azy misaraka. Raha ny marina, hita fa ianao ihany no afaka mamaky ny rakitra. Manao izany ny Facebook mba hahatonga ny rakitra ho kely kokoa.

Inona koa no azo atao dia ny manova kely ny latabatra Huffman. Ho an'ny hafa dia ho toy ny sary tapaka izany. Ary ianao ihany no hahalala ny fomba mahagaga hamahana azy.

Andao fintinina: inona no ilaina amin'ny famoahana ny JPEG? ilaina:

  1. Esory ny latabatra Huffman avy amin'ny lohapejy ary vakio ny bits.
  2. Esory ny coefficient fiovaovan'ny cosine discrete ho an'ny singa tsirairay amin'ny loko sy famirapiratana ho an'ny sakana 8x8 tsirairay, manaova fanovana fanovàna ny halavan'ny hazakazaka sy delta.
  3. Ampifandraiso ireo cosine mifototra amin'ny coefficient mba hahazoana ny sandan'ny piksel isaky ny sakana 8x8.
  4. Ampifanaraho ny singa loko raha toa ka natao ny subsampling (ao amin'ny lohateniny ity fampahalalana ity).
  5. Hanova ny sanda YCbCr ho an'ny piksel tsirairay ho RGB.
  6. Asehoy eo amin'ny efijery ny sary!

Asa matotra amin'ny fijerena sary miaraka amin'ny saka! Na izany aza, ny tiako amin'izany dia mampiseho ny maha-olombelona ny teknolojia JPEG. Izy io dia mifototra amin'ny maha-samihafa ny fomba fijerintsika, mamela antsika hahatratra ny famoretana tsara kokoa noho ny teknolojia mahazatra. Ary ankehitriny rehefa takatsika ny fomba fiasan'ny JPEG, dia azontsika an-tsaina ny fomba hamindrana ireo teknolojia ireo any amin'ny faritra hafa. Ohatra, ny delta encoding amin'ny horonan-tsary dia afaka manome fihenam-bidy lehibe amin'ny haben'ny rakitra, satria matetika dia misy faritra manontolo tsy miova amin'ny frame mankany amin'ny frame (ohatra, ny background).

Code ampiasaina ao amin'ny lahatsoratra, dia misokatra, ary misy toromarika momba ny fanoloana ny sary amin'ny anao manokana.

Source: www.habr.com

Add a comment