Loaʻa nā kiʻi JPEG i ko mākou ola kikohoʻe, akā ma hope o kēia veneer o ka ʻike he algorithms e wehe i nā kikoʻī i ʻike ʻole ʻia e ka maka kanaka. ʻO ka hopena ka ʻike kiʻekiʻe loa i ka liʻiliʻi o ka faila - akā pehea ka hana a pau? E ʻike kākou i ka mea i ʻike ʻole ʻia e ko kākou mau maka!
He mea maʻalahi ka lawe ʻana i ka hiki ke hoʻouna i kahi kiʻi i kahi hoaaloha a ʻaʻole hopohopo e pili ana i ka mea hana, polokalamu kele pūnaewele a i ʻole ka ʻōnaehana hana a lākou e hoʻohana nei - akā ʻaʻole pēlā ka hihia. Ma ka 1980 mua, hiki i nā kamepiula ke mālama a hōʻike i nā kiʻi kikohoʻe, akā nui nā manaʻo hoʻokūkū e pili ana i ke ala maikaʻi loa e hana ai i kēia. ʻAʻole hiki iā ʻoe ke hoʻouna wale i kahi kiʻi mai kekahi kamepiula i kekahi a manaʻolana e hana.
No ka hoʻoponopono ʻana i kēia pilikia, ua hōʻuluʻulu ʻia kahi komite o nā loea mai nā wahi a puni o ka honua i ka makahiki 1986 i kapa ʻia ʻo "
Ua hana kekahi pūʻulu o ka poʻe i kapa ʻia ʻo JPEG i ka maʻamau hoʻoemi kiʻi kiʻi JPEG ma 1992. Ua ʻike paha ka mea i hoʻohana i ka Pūnaewele i nā kiʻi i hoʻopaʻa ʻia ʻo JPEG. ʻO kēia ke ala maʻamau e hoʻopili, hoʻouna a mālama i nā kiʻi. Mai nā ʻaoʻao pūnaewele a i ka leka uila a hiki i ka pāpili kaiapili, hoʻohana ʻia ʻo JPEG i mau piliona manawa i ka lā—kokoke i kēlā me kēia manawa a mākou e nānā ai i kahi kiʻi ma ka pūnaewele a hoʻouna paha. Me ka ʻole o JPEG, ʻaʻole liʻiliʻi ka waihoʻoluʻu o ka pūnaewele, lohi, a liʻiliʻi paha nā kiʻi pōpoki!
ʻO kēia ʻatikala e pili ana i ka wehewehe ʻana i kahi kiʻi JPEG. I nā huaʻōlelo ʻē aʻe, he aha ka mea e pono ai e hoʻohuli i ka ʻikepili i hoʻopaʻa ʻia i mālama ʻia ma ke kamepiula i kahi kiʻi i ʻike ʻia ma ka pale. Pono kēia e ʻike, ʻaʻole wale no ka mea nui ka hoʻomaopopo ʻana i ka ʻenehana a mākou e hoʻohana ai i kēlā me kēia lā, akā ma ka wehe ʻana i nā pae hoʻopiʻi, aʻo hou mākou e pili ana i ka ʻike a me ka ʻike, a me nā kikoʻī e pili ana i ko mākou mau maka.
Eia kekahi, he mea hoihoi loa ka pāʻani ʻana me nā kiʻi ma kēia ʻano.
Ke nānā nei i loko o JPEG
Ma ke kamepiula, mālama ʻia nā mea a pau ma ke ʻano he kaʻina o nā helu binary. ʻO ka maʻamau, ua hui pū ʻia kēia mau ʻāpana, nā zero a me nā mea i nā pūʻulu ʻewalu e hana i nā bytes. Ke wehe ʻoe i kahi kiʻi JPEG ma ke kamepiula, pono kekahi mea (kahi polokalamu kele pūnaewele, ʻōnaehana hana, kekahi mea ʻē aʻe) e hoʻokaʻawale i nā byte, e hoʻihoʻi i ke kiʻi kumu ma ke ʻano he papa inoa o nā kala e hiki ke hōʻike ʻia.
Inā ʻoe e hoʻoiho i kēia mea ʻono
Ke hoʻohana nei au i ka Notepad++ e nānā i nā mea o ka faila, no ka mea, ʻo nā mea hoʻoponopono kikokikona maʻamau e like me Notepad ma Windows e hōʻino i ka faila binary ma hope o ka mālama ʻana a ʻaʻole ia e ʻoluʻolu i ka palapala JPEG.
ʻO ka wehe ʻana i kahi kiʻi i loko o kahi kaʻina hana huaʻōlelo e huikau i ke kamepiula, e like me ʻoe e huikau i kou lolo ke ʻimi ʻoe i kou mau maka a hoʻomaka e ʻike i nā kiko kala!
Ua ʻike ʻia kēia mau wahi āu e ʻike ai
He mea ʻakaʻaka ke noʻonoʻo e pili ana i ke ʻano o nā lolouila like me ka lolo, akā he mea hoʻohālikelike maikaʻi nō hoʻi ia e hōʻike i ka nui o ke ʻano o ka ʻikepili-i lawe ʻia ma ke kino e nā aʻalolo a i mālama ʻia paha ma ke kamepiula-e pili ana i ke ʻano o ka unuhi ʻana. Hoʻokumu ʻia nā ʻikepili binary āpau me XNUMXs a me XNUMXs, nā ʻāpana kumu e hiki ke lawe i ka ʻike o kēlā me kēia ʻano. ʻIke pinepine kāu kamepiula i ka wehewehe ʻana iā lākou me ka hoʻohana ʻana i nā hōʻailona e like me nā hoʻonui faila. I kēia manawa, koi mākou iā ia e wehewehe iā lākou ma ke ʻano he kikokikona, no ka mea, ʻo ia ka mea e manaʻo ai ka mea hoʻoponopono kikokikona.
No ka hoʻomaopopo ʻana pehea e wehe ai i ka JPEG, pono mākou e ʻike i nā hōʻailona kumu iā lākou iho - ka ʻikepili binary. Hiki ke hana i kēia me ka hoʻoponopono hexadecimal, a i ʻole ma luna
Hiki iā ʻoe ke aʻo nui ma ka pāʻani ʻana me kēia hoʻoponopono. No ka laʻana, hiki iā ʻoe ke haʻi i ke ʻano o ka mālama ʻana i nā pika?
ʻO ka mea ʻē aʻe o kēia laʻana, ʻo ka hoʻololi ʻana i kekahi mau helu ʻaʻole pili i ke kiʻi, akā, no ka laʻana, inā e hoʻololi ʻoe i ka helu 17 me 0 ma ka laina mua, e pōʻino loa ke kiʻi!
ʻO nā hoʻololi ʻē aʻe, e like me ka hoʻololi ʻana i ka 7 ma ka laina 1988 me ka helu 254, hoʻololi i ke kala, akā wale nō nā pika ma hope.
ʻO ka mea ʻē aʻe paha, ʻo ka hoʻololi ʻana o kekahi mau helu i ke kala wale nō, akā ke ʻano o ke kiʻi. E hoʻololi i ka 70 ma ka laina 12 i ka 2 a nānā i ka lālani luna o ke kiʻi e ʻike i kaʻu ʻōlelo.
A no ke ʻano o ke kiʻi JPEG āu e hoʻohana ai, e ʻike mau ʻoe i kēia mau hiʻohiʻona chess pohihihi i ka wā e hoʻoponopono ai i nā bytes.
I ka pāʻani ʻana me ka mea hoʻoponopono, paʻakikī ke hoʻomaopopo i ke ʻano o ka hana hou ʻana o ke kiʻi mai kēia mau byte, no ka mea, aia ka JPEG compression i ʻekolu mau ʻenehana like ʻole, i hoʻopili ʻia i nā pae. E aʻo kaʻawale mākou i kēlā me kēia e wehe i ke ʻano pohihihi a mākou e ʻike nei.
ʻEkolu pae o ka hoʻoemi JPEG:
No ka hāʻawi ʻana iā ʻoe i ka manaʻo o ka nui o ka hoʻopaʻa ʻana, e hoʻomaopopo ʻo ke kiʻi ma luna he 79 mau helu, a i ʻole 819 KB. Inā mālama mākou iā ia me ka ʻole o ka hoʻopiʻi ʻana, pono kēlā me kēia pika i ʻekolu mau helu - no nā ʻāpana ʻulaʻula, ʻōmaʻomaʻo a me ka uliuli. He 79 kēia mau helu, a ma kahi paha. 917 KB. Ma muli o ka hoʻopili ʻana o JPEG, ua hōʻemi ʻia ka faila hope ma mua o 700 mau manawa!
ʻOiaʻiʻo, hiki ke hoʻopili ʻia kēia kiʻi. Aia ma lalo iho nā kiʻi ʻelua ma ka ʻaoʻao - ua hoʻopaʻa ʻia ke kiʻi ma ka ʻaoʻao ʻākau i 16 KB, ʻo ia hoʻi, 57 mau manawa ʻoi aku ka liʻiliʻi ma mua o ka mana i hoʻopaʻa ʻole ʻia!
Inā ʻoe e nānā pono, e ʻike ʻoe ʻaʻole like kēia mau kiʻi. He mau kiʻi lāua ʻelua me ka paʻi JPEG, akā ʻoi aku ka liʻiliʻi o ka mea kūpono. He ʻino iki nō hoʻi ia (e nānā i nā ʻāpana kala hope). ʻO ia ke kumu i kapa ʻia ai ʻo JPEG ʻo lossy compression; I loko o ke kaʻina hana hoʻoemi, hoʻololi ke kiʻi a nalowale kekahi mau kikoʻī.
1. Ka waihoʻoluʻu kala
Eia kekahi kiʻi me ka pae mua o ka kaomi ʻana i hoʻohana ʻia.
(Manaʻo pāʻani - in
I kēia manawa ua maʻalahi ka wehewehe ʻana i nā helu. He papa inoa maʻalahi kēia o nā kala, kahi e hoʻololi ai kēlā me kēia byte i hoʻokahi pika, akā i ka manawa like he hapalua ia o ka nui o ke kiʻi i hoʻopaʻa ʻole ʻia (e lawe ʻia ma kahi o 300 KB i kēia nui hoʻemi). Hiki iā ʻoe ke koho i ke kumu?
Hiki iā ʻoe ke ʻike ʻaʻole hōʻike kēia mau helu i nā ʻāpana ʻulaʻula, ʻōmaʻomaʻo, a me ka uliuli maʻamau, no ka mea, inā mākou e pani i nā helu āpau me nā zeros, e loaʻa iā mākou kahi kiʻi ʻōmaʻomaʻo (ma mua o ke keʻokeʻo).
No ka mea, kū kēia mau bytes no Y (mālamalama),
Cb (uliuli pili),
a me nā kiʻi Cr (ʻulaʻula pili).
No ke aha e hoʻohana ʻole ai i ka RGB? Ma hope o nā mea a pau, penei ka hana ʻana o ka hapa nui o nā pale hou. Hiki i kāu mea nānā ke hōʻike i kēlā me kēia kala, me ka ʻulaʻula, ka ʻōmaʻomaʻo a me ka uliuli, me nā ʻano ikaika like ʻole no kēlā me kēia pika. Loaʻa ke keʻokeʻo ma ka hoʻohuli ʻana i nā mea ʻekolu i ka mālamalama piha, a ʻeleʻele hoʻi ma ka hoʻohuli ʻana iā lākou.
Ua like loa keia me ka hana a ka maka kanaka. Ua kapa ʻia nā ʻāpana kala i ko mākou mau maka "
ʻO ia ke kumu i ʻoi aku ka maikaʻi o ko mākou mau maka i ka ʻike ʻana i nā loli o ka mālamalama ma mua o ka hoʻololi ʻana i ke kala. Inā hoʻokaʻawale ʻoe i ke kala mai ka ʻōlinolino, hiki iā ʻoe ke wehe i kahi waihoʻoluʻu liʻiliʻi a ʻaʻohe mea e ʻike i kekahi mea. ʻO Chroma subsampling ke kaʻina hana e hōʻike ana i nā ʻāpana kala o ke kiʻi ma kahi hoʻonā haʻahaʻa ma mua o nā ʻāpana luminance. Ma ka laʻana ma luna, hoʻokahi kikoʻī Y ko kēlā me kēia pika, a ʻo kēlā me kēia hui pākahi o ʻehā pika he hoʻokahi Cb a me hoʻokahi Cr. No laila, ʻehā manawa ʻoi aku ka liʻiliʻi o ka ʻike kala ma mua o ke kiʻi kumu.
Hoʻohana ʻia ka lumi kala YCbCr ma JPEG wale nō. Ua hana mua ʻia i ka makahiki 1938 no nā polokalamu kīwī. ʻAʻole i loaʻa i kēlā me kēia kanaka ka TV kala, no laila, ʻo ka hoʻokaʻawale ʻana i ka waihoʻoluʻu a me ka ʻālohilohi i hiki i kēlā me kēia ke loaʻa ka hōʻailona like, a ʻo nā TV me ka kala ʻole i hoʻohana wale i ka ʻāpana kukui.
No laila, ʻo ka wehe ʻana i hoʻokahi helu mai ka mea hoʻoponopono e hoʻopau loa i nā kala āpau. Mālama ʻia nā ʻāpana ma ke ʻano YYYY Cb Cr (ʻoiaʻiʻo, ʻaʻole pono i kēlā kauoha - ua kuhikuhi ʻia ke kauoha mālama i ke poʻo waihona). ʻO ka wehe ʻana i ka helu mua e ʻike ʻia ka waiwai mua o Cb e like me Y, Cr me Cb, a ma ke ʻano maʻamau e loaʻa iā ʻoe kahi hopena domino e hoʻololi i nā kala āpau o ke kiʻi.
ʻAʻole koi ka ʻōlelo kikoʻī JPEG iā ʻoe e hoʻohana iā YCbCr. Akā hoʻohana ka hapa nui o nā faila no ka mea e hoʻopuka ana i nā kiʻi i hoʻohaʻahaʻa ʻia ma mua o RGB. Akā ʻaʻole pono ʻoe e lawe i kaʻu ʻōlelo no ia mea. E ʻike iā ʻoe iho ma ka pākaukau ma lalo i ke ʻano o ka subsampling o kēlā me kēia ʻāpana ma RGB a me YCbCr.
(Manaʻo pāʻani - in
ʻAʻole ʻike ʻia ka wehe ʻana o ka uliuli e like me ka ʻulaʻula a i ʻole ka ʻōmaʻomaʻo. ʻO ia ma muli o ʻeono miliona cones i kou mau maka, ma kahi o 64% ka maʻalahi i ka ʻulaʻula, 32% i ka ʻōmaʻomaʻo a me 2% i ka uliuli.
ʻIke maikaʻi ʻia ka hoʻohaʻahaʻa ʻana o ka mea Y (hema hema). ʻIke ʻia kahi hoʻololi liʻiliʻi.
ʻO ka hoʻololi ʻana i kahi kiʻi mai RGB a i YCbCr ʻaʻole ia e hōʻemi i ka nui o ka faila, akā maʻalahi ia e ʻimi i nā kikoʻī liʻiliʻi i ʻike ʻia e hiki ke wehe ʻia. Loaʻa ka hoʻoemi poho ma ka pae ʻelua. Hoʻokumu ʻia ia ma ka manaʻo o ka hōʻike ʻana i ka ʻikepili i kahi ʻano compressible.
2. Hoʻololi cosine discrete a me ka laʻana
ʻO kēia pae o ka hoʻopaʻa ʻana, no ka hapa nui, he aha ka JPEG. Ma hope o ka hoʻololi ʻana i nā waihoʻoluʻu iā YCbCr, hoʻopili ʻia nā ʻāpana i kēlā me kēia, no laila hiki iā mākou ke noʻonoʻo i ka ʻāpana Y wale nō.
(Manaʻo pāʻani - in
I ka nānā mua ʻana, ua like ia me ka hoʻoemi ʻino loa. Aia he 100 pika ma ke kiʻi, a he 000 mau helu e hōʻike i ko lākou ʻōlinolino (Y-hui)—ʻoi aku ka ʻino ma mua o ka hoʻoomi ʻana i kekahi mea!
Eia naʻe, e hoʻomaopopo ʻo ka hapa nui o kēia mau helu he zero. Eia kekahi, hiki ke wehe ʻia kēlā mau zeros ma ka hope o nā laina me ka hoʻololi ʻole i ke kiʻi. Aia ma kahi o 26 mau helu i koe, a ʻaneʻane 000 manawa emi kēia!
Aia i kēia pae ka mea huna o nā ʻano chess. ʻAʻole like me nā hopena ʻē aʻe a mākou i ʻike ai, ʻaʻole he glitch ke ʻano o kēia mau hiʻohiʻona. ʻO lākou nā mea kūkulu hale o ke kiʻi holoʻokoʻa. Loaʻa i kēlā me kēia laina o ka mea hoʻoponopono nā helu he 64, discrete cosine transform (DCT) coefficients e pili ana i ka ikaika o 64 mau hiʻohiʻona kūʻokoʻa.
Hoʻokumu ʻia kēia mau hiʻohiʻona ma muli o ka ʻāpana cosine. Eia ke ʻano o kekahi o lākou:
8 mai loko o 64 mau ʻokoʻa
Aia ma lalo kahi kiʻi e hōʻike ana i nā ʻano 64 āpau.
(Manaʻo pāʻani - in
He mea koʻikoʻi kēia mau hiʻohiʻona no ka mea ʻo ia ke kumu o nā kiʻi 8x8. Inā ʻaʻole ʻoe kamaʻāina i ka algebra linear, ʻo ia hoʻi, hiki ke hana ʻia kekahi kiʻi 8x8 mai kēia mau hiʻohiʻona 64. ʻO DCT ke kaʻina o ka māhele ʻana i nā kiʻi i nā poloka 8x8 a me ka hoʻololi ʻana i kēlā me kēia poloka i hui pū ʻia o kēia 64 coefficients.
Me he mea kilokilo lā hiki ke haku ʻia kekahi kiʻi me 64 mau hiʻohiʻona kikoʻī. Eia naʻe, ua like kēia me ka ʻōlelo ʻana e hiki ke wehewehe ʻia kekahi wahi ma ka Honua e nā helu ʻelua - latitu a me longitude [e hōʻike ana i nā hemispheres / approx. unuhi.]. Manaʻo pinepine mākou i ka ʻili o ka Honua ma ke ʻano he ʻelua ʻāpana, no laila ʻelua wale nō helu. He 8 ka nui o ke kiʻi 8x64, no laila pono mākou i nā helu 64.
ʻAʻole maopopo i ke ʻano o ke kōkua ʻana iā mākou ma ke ʻano o ka hoʻopili. Inā makemake mākou i nā helu 64 e hōʻike i ke kiʻi 8x8, no ke aha e ʻoi aku ka maikaʻi o kēia ma mua o ka mālama ʻana i 64 mau mea ʻālohilohi? Hana mākou i kēia no ke kumu like a mākou i hoʻohuli ai i ʻekolu mau helu RGB i ʻekolu mau helu YCbCr: hiki iā mākou ke wehe i nā kikoʻī maʻalahi.
He paʻakikī ke ʻike pono i nā kikoʻī i wehe ʻia i kēia pae no ka mea pili ʻo JPEG i ka DCT i nā poloka 8x8. Eia naʻe, ʻaʻohe mea e pāpā iā mākou e hoʻopili iā ia i ke kiʻi holoʻokoʻa. Eia ke ʻano o DCT no ka mea Y i hoʻopili ʻia i ke kiʻi holoʻokoʻa:
Hiki ke hoʻoneʻe ʻia ma mua o 60 mau helu mai ka hopena me ka ʻike ʻole ʻia o nā loli i ke kiʻi.
Eia naʻe, e hoʻomanaʻo inā hoʻopau mākou i nā helu ʻelima mua, e ʻike ʻia ka ʻokoʻa.
ʻO nā helu ma ka hoʻomaka e hōʻike ana i nā loli haʻahaʻa haʻahaʻa i ke kiʻi, kahi e kiʻi maikaʻi ai ko mākou mau maka. Hōʻike nā helu i ka hopena i nā loli i nā alapine kiʻekiʻe i paʻakikī ke ʻike. No ka "ʻike i ka mea hiki ʻole ke ʻike ʻia e ka maka," hiki iā mākou ke hoʻokaʻawale i kēia mau kikoʻī alapine kiʻekiʻe ma ka ʻole ʻana i nā helu 5000 mua.
ʻIke mākou i nā wahi āpau o ke kiʻi kahi i loaʻa ai ka hoʻololi nui loa mai ka pixel a i ka pixel. ʻO nā maka o ka pōpoki, kona ʻumiʻumi, ka ʻaʻahu terry a me nā aka ma ka ʻaoʻao hema hema ke kū i waho. Hiki iā ʻoe ke hele i mua ma ka hoʻopau ʻana i nā helu 10 mua:
20:
40:
60:
Hoʻopau ʻia kēia mau kikoʻī kiʻekiʻe e JPEG i ka wā o ka hoʻoemi. ʻAʻohe poho i ka hoʻololi ʻana i nā kala i nā coefficient DCT. Loaʻa ka pohō ma ka pae hoʻohālike, kahi e wehe ʻia ai nā koina kiʻekiʻe a i ʻole kokoke-zero. Ke hoʻohaʻahaʻa ʻoe i ka maikaʻi mālama JPEG, hoʻonui ka papahana i ka paepae no ka helu o nā waiwai i lawe ʻia, e hōʻemi ana i ka nui o ka faila, akā e hoʻonui i ke kiʻi. ʻO ia ke kumu i like ai ke kiʻi ma ka ʻāpana mua, he 57 manawa ka liʻiliʻi. Ua hōʻike ʻia kēlā me kēia poloka 8x8 e ka liʻiliʻi loa o nā coefficient DCT i hoʻohālikelike ʻia i ka mana kiʻekiʻe.
Hiki iā ʻoe ke hana i kahi hopena ʻoluʻolu e like me ke kahe mālie ʻana o nā kiʻi. Hiki iā ʻoe ke hōʻike i kahi kiʻi pohihihi e lilo i mea kikoʻī a ʻoi aku ka nui o nā coefficient i hoʻoiho ʻia.
Eia, no ka leʻaleʻa, ʻo ia kāu mea e loaʻa ai me ka hoʻohana ʻana i nā helu 24 wale nō:
A i ʻole 5000 wale nō:
Pohina loa, akā hiki ke ʻike ʻia!
3. Holo ka lōʻihi hoʻopili, delta a me Huffman
I kēia manawa, ua nalowale nā pae a pau o ka hoʻoemi. ʻO ka pae hope, ma kahi ʻē aʻe, hele me ka ʻole o nā poho. ʻAʻole ia e holoi i ka ʻike, akā hoʻemi nui ia i ka nui o ka faila.
Pehea e hiki ai iā ʻoe ke hoʻopaʻa i kekahi mea me ka hoʻolei ʻole ʻana i ka ʻike? E noʻonoʻo pehea mākou e wehewehe ai i kahi ʻāpana ʻeleʻele maʻalahi 700 x 437.
Hoʻohana ʻo JPEG i nā helu 5000 no kēia, akā hiki ke loaʻa nā hopena maikaʻi aʻe. Hiki iā ʻoe ke noʻonoʻo i kahi hoʻolālā hoʻopili e wehewehe i kēlā kiʻi i loko o nā bytes liʻiliʻi?
ʻEhā ka hoʻolālā liʻiliʻi hiki iaʻu ke loaʻa: ʻekolu e hōʻike i kahi kala, a ʻo ka hā e hōʻike i ka nui o nā pika o kēlā kala. ʻO ka manaʻo o ka hōʻike ʻana i nā waiwai hou i kēia ala condensed i kapa ʻia ʻo run-longth encoding. He poho ʻole no ka mea hiki iā mākou ke hoʻihoʻi i ka ʻikepili i hoʻopaʻa ʻia i kona ʻano kumu.
ʻOi aku ka nui o ka faila JPEG me kahi ʻāpana ʻeleʻele ma mua o 4 bytes - e hoʻomanaʻo i ka pae DCT, hoʻohana ʻia ka hoʻoemi i nā poloka 8x8 pixel. No laila, ma ka liʻiliʻi, pono mākou i hoʻokahi helu DCT no kēlā me kēia 64 pixels. Pono mākou i hoʻokahi no ka mea ma kahi o ka mālama ʻana i hoʻokahi coefficient DCT a ukali ʻia e 63 zeros, run long encoding hiki iā mākou ke mālama i hoʻokahi helu a hōʻike i "nā mea ʻē aʻe a pau he zeros."
ʻO ka hoʻopili ʻana ʻo Delta kahi ʻenehana i loaʻa i kēlā me kēia byte kahi ʻokoʻa mai kekahi waiwai, ma mua o ka waiwai piha. No laila, hoʻololi ka hoʻoponopono ʻana i kekahi mau byte i ke kala o nā pika ʻē aʻe. No ka laʻana, ma kahi o ka mālama ʻana
12 13 14 14 14 13 13 14
Hiki iā mākou ke hoʻomaka me ka 12 a laila hōʻike wale i ka nui o kā mākou pono e hoʻohui a unuhi paha no ka loaʻa ʻana o ka helu aʻe. A ʻo kēia kaʻina i ka delta coding e lawe i ke ʻano:
12 1 1 0 0 -1 0 1
ʻAʻole ʻoi aku ka liʻiliʻi o ka ʻikepili i hoʻololi ʻia ma mua o ka ʻikepili kumu, akā ʻoi aku ka maʻalahi o ke kaomi ʻana. Hiki ke kōkua i ka ho'opili 'ana i ka delta ma mua o ka holo 'ana i ka ho'opā'ālua 'ana me ka pau 'ole.
ʻO ka Delta coding kekahi o nā ʻenehana liʻiliʻi i hoʻohana ʻia ma waho o nā poloka 8x8. No ka 64 DCT coefficients, hoʻokahi wale nō ka hana nalu mau (paʻa kala). Hōʻike ia i ka awelika olinolino o kēlā me kēia poloka no nā mea luma, a i ʻole ka ʻulaʻula maʻamau no nā mea Cb, a pēlā aku. ʻO ka waiwai mua o kēlā me kēia poloka DCT i kapa ʻia ʻo ka waiwai DC, a ʻo kēlā me kēia waiwai DC i hoʻopili ʻia me ka delta e pili ana i nā mea ma mua. No laila, ʻo ka hoʻololi ʻana i ka ʻōlinolino o ka poloka mua e pili ana i nā poloka a pau.
Ke waiho nei ka mea pohihihi hope loa: pehea ka hoʻololi ʻana i ka mea hoʻokahi e hōʻino loa i ke kiʻi holoʻokoʻa? A hiki i kēia manawa, ʻaʻole i loaʻa i nā pae kōmike nā waiwai like. Aia ka pane ma ke poʻomanaʻo JPEG. Aia nā 500 paita mua i nā metadata e pili ana i ke kiʻi - laula, kiʻekiʻe, a pēlā aku, a ʻaʻole mākou i hana pū me lākou.
Me ka ʻole o ke poʻomanaʻo, ʻaneʻane hiki ʻole (a paʻakikī paha) ke hoʻololi i ka JPEG. Me he mea lā ke hoʻāʻo nei au e wehewehe i ke kiʻi iā ʻoe, a ke hoʻomaka nei au e haku i nā huaʻōlelo i mea e hōʻike ai i koʻu manaʻo. E ʻoluʻolu paha ka wehewehe ʻana, no ka mea hiki iaʻu ke hana i nā huaʻōlelo me ke ʻano maoli aʻu e makemake ai e haʻi aku, akā no nā poʻe ʻē aʻe ʻaʻole lākou e noʻonoʻo.
He naʻaupō ia, akā ʻo ia ka mea i hana ʻia. Hoʻopili ʻia kēlā me kēia kiʻi JPEG me nā code kikoʻī iā ia. Mālama ʻia ka puke wehewehe ʻōlelo code ma ke poʻo. Kapa ʻia kēia ʻenehana i ka code Huffman a ʻo ka huaʻōlelo i kapa ʻia ʻo Huffman table. Ma ke poʻo, ua kaha ʻia ka papa ʻaina me ʻelua bytes - 255 a laila 196. Hiki i kēlā me kēia ʻāpana kala ke loaʻa i kāna papa ponoʻī.
ʻO nā hoʻololi i nā papa e hoʻopilikia loa i kekahi kiʻi. ʻO kahi laʻana maikaʻi e hoʻololi i ka laina 15 i 1.
Hana ʻia kēia ma muli o ka wehewehe ʻana o nā papa i ke ʻano e heluhelu ʻia ai nā bits. I kēia manawa ua hana wale mākou me nā helu binary ma ke ʻano decimal. Akā, hūnā kēia iā mākou i ka ʻoiaʻiʻo inā makemake ʻoe e mālama i ka helu 1 i loko o kahi byte, e like ia me 00000001, ʻoiai ʻo kēlā me kēia byte pono e loaʻa i ʻewalu mau bits, ʻoiai inā hoʻokahi wale nō o lākou e pono ai.
He ʻino nui paha kēia o ka hakahaka inā he nui kāu helu liʻiliʻi. ʻO Huffman code kahi hana e hiki ai iā mākou ke hoʻomaha i kēia koi e pono i kēlā me kēia helu ke noho i ʻewalu mau bits. ʻO ia ke ʻano inā ʻike ʻoe i ʻelua bytes:
234 115
A laila, ma muli o ka papa Huffman, ʻekolu mau helu kēia. No ka unuhi ʻana iā lākou, pono ʻoe e hoʻokaʻawale iā lākou i nā ʻāpana pākahi:
11101010 01110011
A laila nānā mākou i ka papaʻaina e noʻonoʻo pehea e hui pū ai iā lākou. No ka laʻana, ʻo kēia paha nā ʻāpana ʻeono mua, (111010), a i ʻole 58 i ka decimal, a ukali ʻia e nā ʻāpana ʻelima (10011), a i ʻole 19, a ʻo ka hope ʻehā mau bits (0011), a i ʻole 3.
No laila, paʻakikī loa ka hoʻomaopopo ʻana i nā bytes i kēia pae o ka hoʻoemi. ʻAʻole hōʻike nā Bytes i ko lākou ʻano. ʻAʻole wau e hele i nā kikoʻī o ka hana ʻana me ka papa ma kēia ʻatikala, akā
ʻO kahi hoʻopunipuni hoihoi hiki iā ʻoe ke hana me kēia ʻike, ʻo ia ke hoʻokaʻawale i ke poʻo mai ka JPEG a mālama iā ia ma kahi kaʻawale. ʻO ka ʻoiaʻiʻo, ʻike ʻia ʻo ʻoe wale nō ke heluhelu i ka faila. Hana ʻo Facebook i kēia i mea e liʻiliʻi ai nā faila.
ʻO ka mea ʻē aʻe e hiki ke hoʻololi iki i ka papaʻaina Huffman. No nā mea ʻē aʻe e like ia me ke kiʻi haki. A ʻo ʻoe wale nō e ʻike i ke ala kupua e hoʻoponopono ai.
E hōʻuluʻulu mākou: no laila he aha ka mea e pono ai e decode JPEG? Pono:
- Wehe i ka (mau) papa Huffman mai ke poʻo a hoʻokaʻawale i nā ʻāpana.
- Wehe i nā coefficient hoʻololi cosine discrete no kēlā me kēia waihoʻoluʻu a me ka ʻāpana luminance no kēlā me kēia poloka 8x8, e hana ana i ka hoʻololi hoʻololi ʻana i ka lōʻihi holo a me ka delta.
- Hoʻohui i nā cosine e pili ana i nā coefficients e loaʻa ai nā waiwai pixel no kēlā me kēia poloka 8x8.
- E hoʻonui i nā ʻāpana kala inā hana ʻia ka subsampling (aia kēia ʻike ma ke poʻo).
- E hoʻohuli i nā koina YCbCr no kēlā me kēia pika i RGB.
- Hōʻike i ke kiʻi ma ka pale!
Hana koʻikoʻi no ka nānā wale ʻana i ke kiʻi me ka pōpoki! Eia naʻe, ʻo kaʻu makemake e hōʻike ana i ke ʻano o ka ʻenehana JPEG kanaka-centric. Hoʻokumu ʻia ia ma nā ʻano ʻokoʻa o kā mākou ʻike, e ʻae iā mākou e hoʻokō ʻoi aku ka maikaʻi ʻoi aku ka maikaʻi ma mua o nā ʻenehana maʻamau. A i kēia manawa ke hoʻomaopopo nei mākou i ka hana ʻana o JPEG, hiki iā mākou ke noʻonoʻo pehea e hiki ai ke hoʻololi ʻia kēia mau ʻenehana i nā wahi ʻē aʻe. No ka laʻana, hiki i ka delta encoding i ke wikiō ke hāʻawi i kahi hōʻemi nui o ka nui o ka faila, no ka mea, aia pinepine nā wahi holoʻokoʻa ʻaʻole i loli mai kahi kiʻi i kahi kiʻi (e laʻa, ke kāʻei kua).
Source: www.habr.com