JPEG చిత్రాలు మన డిజిటల్ జీవితాలలో సర్వవ్యాప్తి చెందుతాయి, అయితే ఈ అవగాహన యొక్క పొర వెనుక మానవ కంటికి కనిపించని వివరాలను తొలగించే అల్గారిథమ్లు ఉన్నాయి. ఫలితంగా అతిచిన్న ఫైల్ పరిమాణంలో అత్యధిక దృశ్యమాన నాణ్యత - అయితే అవన్నీ సరిగ్గా ఎలా పని చేస్తాయి? మన కళ్లకు సరిగ్గా కనిపించని వాటిని చూద్దాం!
స్నేహితుడికి ఫోటోను పంపగల సామర్థ్యం మరియు వారు ఏ పరికరం, బ్రౌజర్ లేదా ఆపరేటింగ్ సిస్టమ్ ఉపయోగిస్తున్నారనే దాని గురించి చింతించకుండా ఉండటం చాలా సులభం - కానీ ఇది ఎల్లప్పుడూ అలా ఉండదు. 1980ల ప్రారంభంలో, కంప్యూటర్లు డిజిటల్ చిత్రాలను నిల్వ చేసి ప్రదర్శించగలవు, అయితే దీన్ని చేయడానికి ఉత్తమ మార్గం గురించి అనేక పోటీ ఆలోచనలు ఉన్నాయి. మీరు ఒక కంప్యూటర్ నుండి మరొక కంప్యూటర్కు చిత్రాన్ని పంపలేరు మరియు అది పని చేస్తుందని ఆశిస్తున్నాము.
ఈ సమస్యను పరిష్కరించడానికి, ప్రపంచవ్యాప్తంగా ఉన్న నిపుణుల కమిటీని 1986లో ఏర్పాటు చేశారు.
JPEG అని పిలువబడే వ్యక్తుల సమూహం 1992లో JPEG డిజిటల్ ఇమేజ్ కంప్రెషన్ ప్రమాణాన్ని సృష్టించింది. ఇంటర్నెట్ని ఉపయోగించిన ఎవరైనా బహుశా JPEG ఎన్కోడ్ చేసిన చిత్రాలను ఎదుర్కొన్నారు. చిత్రాలను ఎన్కోడ్ చేయడానికి, పంపడానికి మరియు నిల్వ చేయడానికి ఇది అత్యంత సాధారణ మార్గం. వెబ్ పేజీల నుండి ఇమెయిల్ నుండి సోషల్ మీడియా వరకు, JPEG రోజుకు బిలియన్ల సార్లు ఉపయోగించబడుతుంది-వాస్తవంగా మనం ప్రతిసారీ ఆన్లైన్లో చిత్రాన్ని వీక్షించిన లేదా పంపిన ప్రతిసారీ. JPEG లేకుండా, వెబ్ తక్కువ రంగుల, నెమ్మదిగా మరియు బహుశా తక్కువ పిల్లి చిత్రాలను కలిగి ఉంటుంది!
ఈ కథనం JPEG చిత్రాన్ని ఎలా డీకోడ్ చేయాలనే దాని గురించి. మరో మాటలో చెప్పాలంటే, కంప్యూటర్లో నిల్వ చేయబడిన కంప్రెస్డ్ డేటాను స్క్రీన్పై కనిపించే ఇమేజ్గా మార్చడానికి ఏమి అవసరం. ఇది తెలుసుకోవడం విలువైనది, ఎందుకంటే మనం ప్రతిరోజూ ఉపయోగించే సాంకేతికతను అర్థం చేసుకోవడం చాలా ముఖ్యం, కానీ కుదింపు స్థాయిలను అన్లాక్ చేయడం ద్వారా, అవగాహన మరియు దృష్టి గురించి మరియు మన కళ్ళు ఏ వివరాలకు అత్యంత సున్నితంగా ఉంటాయో మరింత తెలుసుకుంటాము.
అదనంగా, ఈ విధంగా చిత్రాలతో ఆడటం చాలా ఆసక్తికరంగా ఉంటుంది.
JPEG లోపల చూస్తున్నాను
కంప్యూటర్లో, ప్రతిదీ బైనరీ సంఖ్యల క్రమం వలె నిల్వ చేయబడుతుంది. సాధారణంగా ఈ బిట్లు, సున్నాలు మరియు వాటిని బైట్లను రూపొందించడానికి ఎనిమిది సమూహాలలో సమూహం చేయబడతాయి. మీరు కంప్యూటర్లో JPEG చిత్రాన్ని తెరిచినప్పుడు, ఏదైనా (బ్రౌజర్, ఆపరేటింగ్ సిస్టమ్, మరేదైనా) తప్పనిసరిగా బైట్లను డీకోడ్ చేయాలి, అసలు చిత్రాన్ని ప్రదర్శించగల రంగుల జాబితాగా పునరుద్ధరించాలి.
మీరు ఈ స్వీట్ డౌన్లోడ్ చేస్తే
విండోస్లోని నోట్ప్యాడ్ వంటి సాధారణ టెక్స్ట్ ఎడిటర్లు సేవ్ చేసిన తర్వాత బైనరీ ఫైల్ను పాడు చేస్తాయి మరియు ఇది ఇకపై JPEG ఆకృతిని సంతృప్తిపరచదు కాబట్టి నేను ఫైల్ కంటెంట్లను పరిశీలించడానికి నోట్ప్యాడ్++ని ఇక్కడ ఉపయోగిస్తున్నాను.
వర్డ్ ప్రాసెసర్లో చిత్రాన్ని తెరవడం కంప్యూటర్ను గందరగోళానికి గురిచేస్తుంది, మీరు మీ కళ్ళను రుద్దినప్పుడు మరియు రంగు మచ్చలు కనిపించడం ప్రారంభించినప్పుడు మీ మెదడును గందరగోళానికి గురిచేస్తుంది!
మీరు చూసే ఈ మచ్చలు అంటారు
కంప్యూటర్లు మెదడుకు ఎంత సారూప్యత కలిగి ఉంటాయో ఆలోచించడం హాస్యాస్పదంగా ఉంటుంది, అయితే డేటా యొక్క అర్థం-శరీరం ద్వారా నరాలు తీసుకువెళ్లినా లేదా కంప్యూటర్లో నిల్వ చేయబడినా-అది ఎలా వివరించబడుతుందనే దానిపై ఆధారపడి ఉంటుంది. అన్ని బైనరీ డేటా 0s మరియు 1sతో రూపొందించబడింది, ఏ రకమైన సమాచారాన్ని అయినా అందించగల ప్రాథమిక భాగాలు. ఫైల్ ఎక్స్టెన్షన్ల వంటి క్లూలను ఉపయోగించడం ద్వారా వాటిని ఎలా అర్థం చేసుకోవాలో మీ కంప్యూటర్ తరచుగా కనుగొంటుంది. ఇప్పుడు మేము వాటిని టెక్స్ట్గా అన్వయించమని బలవంతం చేస్తాము, ఎందుకంటే టెక్స్ట్ ఎడిటర్ ఆశించేది అదే.
JPEGని ఎలా డీకోడ్ చేయాలో అర్థం చేసుకోవడానికి, మేము అసలు సంకేతాలను చూడవలసి ఉంటుంది - బైనరీ డేటా. ఇది హెక్సాడెసిమల్ ఎడిటర్ని ఉపయోగించి లేదా నేరుగా ఆన్ చేయవచ్చు
ఈ ఎడిటర్తో ఆడటం ద్వారా మీరు చాలా నేర్చుకోవచ్చు. ఉదాహరణకు, పిక్సెల్లు ఏ క్రమంలో నిల్వ చేయబడతాయో మీరు చెప్పగలరా?
ఈ ఉదాహరణలో విచిత్రం ఏమిటంటే, కొన్ని సంఖ్యలను మార్చడం చిత్రంపై ప్రభావం చూపదు, కానీ, ఉదాహరణకు, మీరు మొదటి పంక్తిలో 17 సంఖ్యను 0తో భర్తీ చేస్తే, ఫోటో పూర్తిగా పాడైపోతుంది!
7 ఆన్ లైన్ 1988ని 254 సంఖ్యతో భర్తీ చేయడం వంటి ఇతర మార్పులు, రంగును మారుస్తాయి, కానీ తదుపరి పిక్సెల్లు మాత్రమే.
బహుశా వింతైన విషయం ఏమిటంటే, కొన్ని సంఖ్యలు రంగును మాత్రమే కాకుండా, చిత్రం యొక్క ఆకారాన్ని కూడా మారుస్తాయి. 70వ పంక్తిలోని 12ని 2కి మార్చండి మరియు నా ఉద్దేశ్యం ఏమిటో చూడటానికి చిత్రం పై వరుసను చూడండి.
మరియు మీరు ఏ JPEG ఇమేజ్ని ఉపయోగించినా, బైట్లను సవరించేటప్పుడు మీరు ఎల్లప్పుడూ ఈ రహస్యమైన చెస్ నమూనాలను కనుగొంటారు.
ఎడిటర్తో ఆడుతున్నప్పుడు, ఈ బైట్ల నుండి ఫోటో ఎలా పునఃసృష్టించబడుతుందో అర్థం చేసుకోవడం కష్టం, ఎందుకంటే JPEG కంప్రెషన్ మూడు విభిన్న సాంకేతికతలను కలిగి ఉంటుంది, ఇది స్థాయిలలో వరుసగా వర్తించబడుతుంది. మేము చూస్తున్న మర్మమైన ప్రవర్తనను వెలికితీసేందుకు ఒక్కొక్కటి విడివిడిగా అధ్యయనం చేస్తాము.
JPEG కుదింపు యొక్క మూడు స్థాయిలు:
కుదింపు పరిమాణం గురించి మీకు ఒక ఆలోచన ఇవ్వడానికి, పై చిత్రం 79 సంఖ్యలను లేదా దాదాపు 819 KBని సూచిస్తుందని గమనించండి. మేము దానిని కుదింపు లేకుండా నిల్వ చేస్తే, ప్రతి పిక్సెల్కు ఎరుపు, ఆకుపచ్చ మరియు నీలం భాగాల కోసం మూడు సంఖ్యలు అవసరం. ఇది 79 సంఖ్యలు లేదా సుమారుగా ఉంటుంది. 917 KB. JPEG కుదింపు ఫలితంగా, తుది ఫైల్ 700 కంటే ఎక్కువ సార్లు తగ్గించబడింది!
నిజానికి, ఈ చిత్రాన్ని మరింత కుదించవచ్చు. క్రింద రెండు చిత్రాలు పక్కపక్కనే ఉన్నాయి - కుడి వైపున ఉన్న ఫోటో 16 KBకి కుదించబడింది, అంటే కంప్రెస్ చేయని వెర్షన్ కంటే 57 రెట్లు చిన్నది!
మీరు దగ్గరగా చూస్తే, ఈ చిత్రాలు ఒకేలా లేవని మీరు చూస్తారు. రెండూ JPEG కంప్రెషన్తో ఉన్న చిత్రాలు, కానీ సరైనది వాల్యూమ్లో చాలా చిన్నది. ఇది కూడా కొంచెం అధ్వాన్నంగా కనిపిస్తుంది (నేపథ్య రంగు చతురస్రాలను చూడండి). అందుకే JPEGని లాస్సీ కంప్రెషన్ అని కూడా అంటారు; కుదింపు ప్రక్రియలో, చిత్రం మారుతుంది మరియు కొన్ని వివరాలను కోల్పోతుంది.
1. రంగు ఉప నమూనా
మొదటి స్థాయి కంప్రెషన్ మాత్రమే వర్తింపజేయబడిన చిత్రం ఇక్కడ ఉంది.
(ఇంటరాక్టివ్ వెర్షన్ - ఇన్
ఇప్పుడు సంఖ్యలను అర్థంచేసుకోవడం కొద్దిగా సులభం. ఇది దాదాపు ఒక సాధారణ రంగుల జాబితా, దీనిలో ప్రతి బైట్ ఖచ్చితంగా ఒక పిక్సెల్ని మారుస్తుంది, అయితే అదే సమయంలో ఇది ఇప్పటికే కంప్రెస్ చేయని ఇమేజ్లో సగం పరిమాణంలో ఉంది (ఈ తగ్గిన పరిమాణంలో ఇది దాదాపు 300 KB పడుతుంది). ఎందుకు అని మీరు ఊహించగలరా?
ఈ సంఖ్యలు ప్రామాణిక ఎరుపు, ఆకుపచ్చ మరియు నీలం భాగాలను సూచించవని మీరు చూడవచ్చు, ఎందుకంటే మేము అన్ని సంఖ్యలను సున్నాలతో భర్తీ చేస్తే, మనకు ఆకుపచ్చ చిత్రం (తెలుపు కాకుండా) వస్తుంది.
ఎందుకంటే ఈ బైట్లు Y (ప్రకాశం)ని సూచిస్తాయి,
Cb (సాపేక్ష నీలం),
మరియు Cr (సంబంధిత ఎరుపు) చిత్రాలు.
RGB ఎందుకు ఉపయోగించకూడదు? అన్నింటికంటే, చాలా ఆధునిక స్క్రీన్లు ఈ విధంగా పనిచేస్తాయి. మీ మానిటర్ ప్రతి పిక్సెల్కు వేర్వేరు తీవ్రతలతో ఎరుపు, ఆకుపచ్చ మరియు నీలంతో సహా ఏదైనా రంగును ప్రదర్శించగలదు. మూడింటిని పూర్తి ప్రకాశంతో ఆన్ చేయడం ద్వారా తెలుపు మరియు వాటిని ఆఫ్ చేయడం ద్వారా నలుపు రంగును పొందుతుంది.
ఇది కూడా మానవ కన్ను ఎలా పనిచేస్తుందో చాలా పోలి ఉంటుంది. మన కళ్ళలోని రంగు గ్రాహకాలను "అంటారు.
అందుకే మన కళ్ళు రంగులో మార్పుల కంటే ప్రకాశంలో మార్పులను గుర్తించడంలో మెరుగ్గా ఉంటాయి. మీరు ప్రకాశం నుండి రంగును వేరు చేస్తే, మీరు కొద్దిగా రంగును తీసివేయవచ్చు మరియు ఎవరూ ఏమీ గమనించలేరు. క్రోమా సబ్సాంప్లింగ్ అనేది ఒక చిత్రం యొక్క రంగు భాగాలను ప్రకాశం భాగాల కంటే తక్కువ రిజల్యూషన్లో సూచించే ప్రక్రియ. ఎగువ ఉదాహరణలో, ప్రతి పిక్సెల్లో ఖచ్చితంగా ఒక Y భాగం ఉంటుంది మరియు నాలుగు పిక్సెల్ల ప్రతి ఒక్క సమూహం ఖచ్చితంగా ఒక Cb మరియు ఒక Cr కాంపోనెంట్ను కలిగి ఉంటుంది. అందువల్ల, చిత్రం అసలు కంటే నాలుగు రెట్లు తక్కువ రంగు సమాచారాన్ని కలిగి ఉంది.
YCbCr కలర్ స్పేస్ JPEGలో మాత్రమే ఉపయోగించబడుతుంది. ఇది వాస్తవానికి టెలివిజన్ కార్యక్రమాల కోసం 1938లో కనుగొనబడింది. ప్రతి ఒక్కరికి కలర్ టీవీ ఉండదు, కాబట్టి రంగు మరియు ప్రకాశాన్ని వేరు చేయడం వలన ప్రతి ఒక్కరూ ఒకే సిగ్నల్ను పొందేందుకు వీలు కల్పించారు మరియు రంగు లేని టీవీలు కేవలం బ్రైట్నెస్ భాగాన్ని మాత్రమే ఉపయోగించాయి.
కాబట్టి ఎడిటర్ నుండి ఒక సంఖ్యను తీసివేయడం అన్ని రంగులను పూర్తిగా నాశనం చేస్తుంది. భాగాలు YYYY Cb Cr రూపంలో నిల్వ చేయబడతాయి (వాస్తవానికి, ఆ క్రమంలో అవసరం లేదు - నిల్వ క్రమం ఫైల్ హెడర్లో పేర్కొనబడింది). మొదటి సంఖ్యను తీసివేయడం వలన Cb యొక్క మొదటి విలువ Y, Cr Cbగా గుర్తించబడుతుంది మరియు సాధారణంగా మీరు చిత్రం యొక్క అన్ని రంగులను మార్చే డొమినో ప్రభావాన్ని కలిగి ఉంటారు.
JPEG స్పెసిఫికేషన్ YCbCrని ఉపయోగించమని మిమ్మల్ని బలవంతం చేయదు. కానీ చాలా ఫైల్లు దీన్ని ఉపయోగిస్తాయి ఎందుకంటే ఇది RGB కంటే మెరుగైన డౌన్సాంపుల్ ఇమేజ్లను ఉత్పత్తి చేస్తుంది. కానీ మీరు నా మాటను తీసుకోవలసిన అవసరం లేదు. RGB మరియు YCbCr రెండింటిలోనూ ఒక్కొక్క కాంపోనెంట్ యొక్క ఉప నమూనా ఎలా ఉంటుందో దిగువ పట్టికలో మీ కోసం చూడండి.
(ఇంటరాక్టివ్ వెర్షన్ - ఇన్
నీలం యొక్క తొలగింపు ఎరుపు లేదా ఆకుపచ్చ వలె గుర్తించదగినది కాదు. మీ కళ్లలో ఉన్న ఆరు మిలియన్ శంకువులు కారణంగా, దాదాపు 64% ఎరుపు, 32% ఆకుపచ్చ మరియు 2% నీలం రంగుకు సున్నితంగా ఉంటాయి.
Y భాగం యొక్క డౌన్సాంప్లింగ్ (దిగువ ఎడమవైపు) ఉత్తమంగా కనిపిస్తుంది. చిన్న మార్పు కూడా గమనించవచ్చు.
చిత్రాన్ని RGB నుండి YCbCrకి మార్చడం వలన ఫైల్ పరిమాణాన్ని తగ్గించదు, కానీ అది తీసివేయగల తక్కువ కనిపించే వివరాలను కనుగొనడాన్ని సులభతరం చేస్తుంది. లాస్సీ కంప్రెషన్ రెండవ దశలో సంభవిస్తుంది. ఇది మరింత కుదించదగిన రూపంలో డేటాను ప్రదర్శించే ఆలోచనపై ఆధారపడి ఉంటుంది.
2. వివిక్త కొసైన్ రూపాంతరం మరియు నమూనా
ఈ స్థాయి కుదింపు, చాలా వరకు, JPEG అంటే ఏమిటి. రంగులను YCbCrకి మార్చిన తర్వాత, భాగాలు ఒక్కొక్కటిగా కుదించబడతాయి, కాబట్టి మేము కేవలం Y కాంపోనెంట్పై దృష్టి పెట్టవచ్చు మరియు ఈ లేయర్ని వర్తింపజేసిన తర్వాత Y కాంపోనెంట్ బైట్లు ఎలా ఉంటాయో ఇక్కడ ఉంది.
(ఇంటరాక్టివ్ వెర్షన్ - ఇన్
మొదటి చూపులో, ఇది చాలా చెడ్డ కుదింపు వలె కనిపిస్తుంది. ఒక ఇమేజ్లో 100 పిక్సెల్లు ఉన్నాయి మరియు వాటి ప్రకాశాన్ని (Y-భాగాలు) సూచించడానికి 000 సంఖ్యలు అవసరం-అది ఏమీ కుదించకుండా ఉండటం కంటే దారుణం!
అయితే, ఈ సంఖ్యలు చాలా వరకు సున్నా అని గమనించండి. అంతేకాకుండా, పంక్తుల చివర ఉన్న అన్ని సున్నాలను చిత్రాన్ని మార్చకుండానే తీసివేయవచ్చు. దాదాపు 26 సంఖ్యలు మిగిలి ఉన్నాయి మరియు ఇది దాదాపు 000 రెట్లు తక్కువ!
ఈ స్థాయి చెస్ నమూనాల రహస్యాన్ని కలిగి ఉంటుంది. మేము చూసిన ఇతర ప్రభావాల వలె కాకుండా, ఈ నమూనాల రూపాన్ని ఒక లోపం కాదు. వారు మొత్తం చిత్రం యొక్క బిల్డింగ్ బ్లాక్స్. ఎడిటర్ యొక్క ప్రతి పంక్తి ఖచ్చితంగా 64 సంఖ్యలను కలిగి ఉంటుంది, 64 ప్రత్యేక నమూనాల తీవ్రతకు అనుగుణంగా వివిక్త కొసైన్ ట్రాన్స్ఫార్మ్ (DCT) గుణకాలు.
ఈ నమూనాలు కొసైన్ ప్లాట్ ఆధారంగా ఏర్పడతాయి. వాటిలో కొన్ని ఎలా ఉన్నాయో ఇక్కడ ఉంది:
8 అసమానతలలో 64
మొత్తం 64 నమూనాలను చూపుతున్న చిత్రం క్రింద ఉంది.
(ఇంటరాక్టివ్ వెర్షన్ - ఇన్
ఈ నమూనాలు ప్రత్యేక ప్రాముఖ్యతను కలిగి ఉన్నాయి ఎందుకంటే అవి 8x8 చిత్రాల ఆధారంగా ఉంటాయి. మీకు లీనియర్ ఆల్జీబ్రా గురించి తెలియకపోతే, ఈ 8 నమూనాల నుండి ఏదైనా 8x64 ఇమేజ్ని తయారు చేయవచ్చని దీని అర్థం. DCT అనేది చిత్రాలను 8x8 బ్లాక్లుగా విభజించి, ప్రతి బ్లాక్ను ఈ 64 గుణకాల కలయికగా మార్చే ప్రక్రియ.
ఏదైనా చిత్రాన్ని 64 నిర్దిష్ట నమూనాలతో రూపొందించడం మాయాజాలం అనిపిస్తుంది. ఏది ఏమైనప్పటికీ, ఇది భూమిపై ఉన్న ఏ ప్రదేశాన్ని అయినా రెండు సంఖ్యల ద్వారా వర్ణించవచ్చు - అక్షాంశం మరియు రేఖాంశం [అర్ధగోళాలను సూచిస్తుంది / సుమారుగా. అనువాదం.]. మనం తరచుగా భూమి యొక్క ఉపరితలం రెండు డైమెన్షనల్గా భావిస్తాము, కాబట్టి మనకు రెండు సంఖ్యలు మాత్రమే అవసరం. 8x8 చిత్రం 64 కొలతలు కలిగి ఉంటుంది, కాబట్టి మనకు 64 సంఖ్యలు అవసరం.
ఇది కుదింపు పరంగా మనకు ఎలా సహాయపడుతుందో ఇంకా స్పష్టంగా తెలియలేదు. 64x8 చిత్రాన్ని సూచించడానికి మనకు 8 సంఖ్యలు అవసరమైతే, 64 బ్రైట్నెస్ భాగాలను నిల్వ చేయడం కంటే ఇది ఎందుకు మంచిది? మేము మూడు RGB నంబర్లను మూడు YCbCr నంబర్లుగా మార్చిన అదే కారణంతో మేము దీన్ని చేస్తాము: ఇది సూక్ష్మ వివరాలను తీసివేయడానికి మమ్మల్ని అనుమతిస్తుంది.
JPEG DCTని 8x8 బ్లాక్లకు వర్తింపజేస్తుంది కాబట్టి ఈ దశలో ఏ వివరాలు తీసివేయబడతాయో చూడటం కష్టం. అయినప్పటికీ, దానిని మొత్తం చిత్రానికి వర్తింపజేయడాన్ని ఎవరూ నిషేధించరు. మొత్తం చిత్రానికి వర్తించే Y భాగం కోసం DCT ఎలా ఉంటుందో ఇక్కడ ఉంది:
ఫోటోలో వాస్తవంగా గుర్తించదగిన మార్పులు లేకుండా 60 కంటే ఎక్కువ సంఖ్యలు చివరి నుండి తీసివేయబడతాయి.
అయితే, మనం మొదటి ఐదు సంఖ్యలను సున్నా చేస్తే, తేడా స్పష్టంగా ఉంటుందని గమనించండి.
ప్రారంభంలో ఉన్న సంఖ్యలు చిత్రంలో తక్కువ పౌనఃపున్యం మార్పులను సూచిస్తాయి, వీటిని మన కళ్ళు ఉత్తమంగా ఎంచుకుంటాయి. చివరిలో ఉన్న సంఖ్యలు గమనించడానికి చాలా కష్టంగా ఉండే అధిక పౌనఃపున్యాల మార్పులను సూచిస్తాయి. "కన్ను చూడలేని వాటిని చూడడానికి," మేము మొదటి 5000 సంఖ్యలను సున్నా చేయడం ద్వారా ఈ అధిక ఫ్రీక్వెన్సీ వివరాలను వేరు చేయవచ్చు.
పిక్సెల్ నుండి పిక్సెల్కు గొప్ప మార్పు సంభవించే చిత్రం యొక్క అన్ని ప్రాంతాలను మేము చూస్తాము. పిల్లి కళ్ళు, అతని మీసాలు, టెర్రీ దుప్పటి మరియు దిగువ ఎడమ మూలలో ఉన్న నీడలు ప్రత్యేకంగా ఉంటాయి. మీరు మొదటి 10 సంఖ్యలను సున్నా చేయడం ద్వారా మరింత ముందుకు వెళ్ళవచ్చు:
20 000:
40 000:
60 000:
ఈ హై-ఫ్రీక్వెన్సీ వివరాలు కుదింపు దశలో JPEG ద్వారా తీసివేయబడతాయి. రంగులను DCT కోఎఫీషియంట్స్గా మార్చడంలో నష్టం లేదు. అధిక-ఫ్రీక్వెన్సీ లేదా సున్నాకి సమీపంలో ఉన్న విలువలు తీసివేయబడిన నమూనా దశలో నష్టం జరుగుతుంది. మీరు JPEG పొదుపు నాణ్యతను తగ్గించినప్పుడు, ప్రోగ్రామ్ తొలగించబడిన విలువల సంఖ్యకు థ్రెషోల్డ్ను పెంచుతుంది, ఇది ఫైల్ పరిమాణాన్ని తగ్గిస్తుంది, కానీ చిత్రాన్ని మరింత పిక్సలేట్ చేస్తుంది. అందుకే మొదటి విభాగంలో 57 రెట్లు చిన్నగా ఉన్న చిత్రం ఇలా కనిపించింది. ప్రతి 8x8 బ్లాక్ అధిక నాణ్యత వెర్షన్తో పోలిస్తే చాలా తక్కువ DCT కోఎఫీషియంట్లచే సూచించబడుతుంది.
మీరు చిత్రాలను క్రమంగా ప్రసారం చేయడం వంటి చల్లని ప్రభావాన్ని సృష్టించవచ్చు. మీరు మరింత ఎక్కువ కోఎఫీషియంట్స్ డౌన్లోడ్ చేయబడినప్పుడు మరింత వివరంగా కనిపించే అస్పష్టమైన చిత్రాన్ని ప్రదర్శించవచ్చు.
ఇక్కడ, కేవలం వినోదం కోసం, మీరు కేవలం 24 సంఖ్యలను ఉపయోగిస్తున్నారు:
లేదా కేవలం 5000:
చాలా అస్పష్టంగా ఉంది, కానీ ఏదో ఒకవిధంగా గుర్తించదగినది!
3. రన్ లెంగ్త్ ఎన్కోడింగ్, డెల్టా మరియు హఫ్ఫ్మన్
ఇప్పటివరకు, కుదింపు యొక్క అన్ని దశలు నష్టపోయాయి. చివరి దశ, దీనికి విరుద్ధంగా, నష్టాలు లేకుండా కొనసాగుతుంది. ఇది సమాచారాన్ని తొలగించదు, కానీ ఇది ఫైల్ పరిమాణాన్ని గణనీయంగా తగ్గిస్తుంది.
సమాచారాన్ని విసిరేయకుండా మీరు దేనినైనా ఎలా కుదించగలరు? 700 x 437 సాధారణ నలుపు దీర్ఘచతురస్రాన్ని మనం ఎలా వర్ణిస్తామో ఊహించండి.
JPEG దీని కోసం 5000 సంఖ్యలను ఉపయోగిస్తుంది, అయితే చాలా మెరుగైన ఫలితాలను సాధించవచ్చు. అటువంటి చిత్రాన్ని వీలైనంత తక్కువ బైట్లలో వివరించే ఎన్కోడింగ్ స్కీమ్ను మీరు ఊహించగలరా?
నేను రూపొందించిన కనీస పథకం నాలుగు ఉపయోగిస్తుంది: మూడు రంగును సూచించడానికి మరియు నాల్గవది ఆ రంగులో ఎన్ని పిక్సెల్లు ఉందో సూచించడానికి. ఈ ఘనీకృత మార్గంలో పునరావృతమయ్యే విలువలను సూచించే ఆలోచనను రన్-లెంగ్త్ ఎన్కోడింగ్ అంటారు. మేము ఎన్కోడ్ చేసిన డేటాను దాని అసలు రూపానికి పునరుద్ధరించగలము కాబట్టి ఇది నష్టరహితమైనది.
నలుపు దీర్ఘచతురస్రంతో ఉన్న JPEG ఫైల్ 4 బైట్ల కంటే చాలా పెద్దది - DCT స్థాయిలో, 8x8 పిక్సెల్ బ్లాక్లకు కుదింపు వర్తించబడుతుందని గుర్తుంచుకోండి. కాబట్టి, కనిష్టంగా, ప్రతి 64 పిక్సెల్లకు మనకు ఒక DCT గుణకం అవసరం. ఒక DCT గుణకం తర్వాత 63 సున్నాలను నిల్వ చేయడానికి బదులుగా, రన్ లెంగ్త్ ఎన్కోడింగ్ ఒక సంఖ్యను నిల్వ చేయడానికి మరియు "మిగతా అన్నీ సున్నాలు" అని సూచించడానికి అనుమతిస్తుంది కాబట్టి మనకు ఒకటి అవసరం.
డెల్టా ఎన్కోడింగ్ అనేది ఒక సాంకేతికత, దీనిలో ప్రతి బైట్ సంపూర్ణ విలువ కంటే కొంత విలువ నుండి వ్యత్యాసాన్ని కలిగి ఉంటుంది. అందువల్ల, కొన్ని బైట్లను సవరించడం వలన అన్ని ఇతర పిక్సెల్ల రంగు మారుతుంది. ఉదాహరణకు, నిల్వ చేయడానికి బదులుగా
12 13 14 14 14 13 13 14
మనం 12తో ప్రారంభించి, తదుపరి సంఖ్యను పొందడానికి మనం ఎంత జోడించాలి లేదా తీసివేయాలి అని సూచించవచ్చు. మరియు డెల్టా కోడింగ్లో ఈ క్రమం రూపం తీసుకుంటుంది:
12 1 1 0 0 -1 0 1
మార్చబడిన డేటా అసలు డేటా కంటే చిన్నది కాదు, కానీ దానిని కుదించడం సులభం. రన్ లెంగ్త్ ఎన్కోడింగ్కు ముందు డెల్టా ఎన్కోడింగ్ను వర్తింపజేయడం లాస్లెస్ కంప్రెషన్గా ఉన్నప్పుడు చాలా సహాయపడుతుంది.
డెల్టా కోడింగ్ అనేది 8x8 బ్లాక్ల వెలుపల ఉపయోగించే కొన్ని టెక్నిక్లలో ఒకటి. 64 DCT కోఎఫీషియంట్స్లో, ఒకటి కేవలం స్థిరమైన వేవ్ ఫంక్షన్ (ఘన రంగు). ఇది లూమా కాంపోనెంట్ల కోసం ప్రతి బ్లాక్ యొక్క సగటు ప్రకాశం లేదా Cb కాంపోనెంట్ల కోసం సగటు బ్లూనెస్ని సూచిస్తుంది. ప్రతి DCT బ్లాక్ యొక్క మొదటి విలువను DC విలువ అని పిలుస్తారు మరియు ప్రతి DC విలువ మునుపటి వాటికి సంబంధించి డెల్టా ఎన్కోడ్ చేయబడింది. అందువల్ల, మొదటి బ్లాక్ యొక్క ప్రకాశాన్ని మార్చడం అన్ని బ్లాక్లను ప్రభావితం చేస్తుంది.
చివరి రహస్యం మిగిలి ఉంది: ఏకవచనాన్ని మార్చడం మొత్తం చిత్రాన్ని ఎలా నాశనం చేస్తుంది? ఇప్పటివరకు, కుదింపు స్థాయిలు అటువంటి లక్షణాలను కలిగి లేవు. సమాధానం JPEG హెడర్లో ఉంది. మొదటి 500 బైట్లు చిత్రం గురించి మెటాడేటాను కలిగి ఉంటాయి - వెడల్పు, ఎత్తు మొదలైనవి, మరియు మేము వాటితో ఇంకా పని చేయలేదు.
హెడర్ లేకుండా JPEGని డీకోడ్ చేయడం దాదాపు అసాధ్యం (లేదా చాలా కష్టం). నేను మీకు చిత్రాన్ని వివరించడానికి ప్రయత్నిస్తున్నట్లు కనిపిస్తుంది మరియు నా అభిప్రాయాన్ని తెలియజేయడానికి నేను పదాలను కనిపెట్టడం ప్రారంభించాను. వర్ణన బహుశా చాలా కుదించబడి ఉంటుంది, ఎందుకంటే నేను చెప్పదలిచిన అర్థంతో పదాలను కనిపెట్టగలను, కానీ ప్రతి ఒక్కరికీ అవి అర్థం కావు.
ఇది తెలివితక్కువదని అనిపిస్తుంది, కానీ సరిగ్గా అదే జరుగుతుంది. ప్రతి JPEG చిత్రం దానికి నిర్దిష్ట కోడ్లతో కంప్రెస్ చేయబడింది. కోడ్ నిఘంటువు హెడర్లో నిల్వ చేయబడుతుంది. ఈ సాంకేతికతను హఫ్ఫ్మన్ కోడ్ అని మరియు పదజాలాన్ని హఫ్ఫ్మన్ టేబుల్ అని పిలుస్తారు. హెడర్లో, పట్టిక రెండు బైట్లతో గుర్తించబడింది - 255 ఆపై 196. ప్రతి రంగు భాగం దాని స్వంత పట్టికను కలిగి ఉంటుంది.
పట్టికలలో మార్పులు ఏదైనా చిత్రాన్ని తీవ్రంగా ప్రభావితం చేస్తాయి. 15వ పంక్తిని 1కి మార్చడం మంచి ఉదాహరణ.
వ్యక్తిగత బిట్లను ఎలా చదవాలో పట్టికలు పేర్కొనడం వలన ఇది జరుగుతుంది. ఇప్పటివరకు మేము దశాంశ రూపంలో బైనరీ సంఖ్యలతో మాత్రమే పని చేసాము. కానీ మీరు ఒక బైట్లో నంబర్ 1ని నిల్వ చేయాలనుకుంటే, అది 00000001 లాగా కనిపిస్తుంది, ఎందుకంటే ప్రతి బైట్లో ఖచ్చితంగా ఎనిమిది బిట్లు ఉండాలి, వాటిలో ఒకటి మాత్రమే అవసరం అయినప్పటికీ ఇది మాకు నుండి దాచిపెడుతుంది.
మీరు చాలా చిన్న సంఖ్యలను కలిగి ఉన్నట్లయితే, ఇది పెద్ద స్థలం వృధా అవుతుంది. హఫ్ఫ్మన్ కోడ్ అనేది ప్రతి సంఖ్య తప్పనిసరిగా ఎనిమిది బిట్లను ఆక్రమించాలనే ఈ అవసరాన్ని సడలించడానికి అనుమతించే ఒక టెక్నిక్. అంటే మీరు రెండు బైట్లను చూసినట్లయితే:
234 115
అప్పుడు, హఫ్ఫ్మన్ పట్టికను బట్టి, ఇవి మూడు సంఖ్యలు కావచ్చు. వాటిని సంగ్రహించడానికి, మీరు మొదట వాటిని వ్యక్తిగత బిట్లుగా విభజించాలి:
11101010 01110011
అప్పుడు మేము వాటిని ఎలా సమూహపరచాలో గుర్తించడానికి పట్టికను చూస్తాము. ఉదాహరణకు, ఇది మొదటి ఆరు బిట్లు, (111010), లేదా దశాంశంలో 58, తర్వాత ఐదు బిట్లు (10011), లేదా 19, చివరకు చివరి నాలుగు బిట్లు (0011), లేదా 3 కావచ్చు.
అందువల్ల, కుదింపు యొక్క ఈ దశలో బైట్లను అర్థం చేసుకోవడం చాలా కష్టం. బైట్లు అవి కనిపించే వాటిని సూచించవు. నేను ఈ వ్యాసంలోని పట్టికతో పని చేసే వివరాలలోకి వెళ్లను, కానీ
ఈ పరిజ్ఞానంతో మీరు చేయగల ఒక ఆసక్తికరమైన ఉపాయం ఏమిటంటే, హెడర్ను JPEG నుండి వేరు చేసి దానిని విడిగా నిల్వ చేయడం. వాస్తవానికి, మీరు మాత్రమే ఫైల్ను చదవగలరని తేలింది. ఫైల్లను మరింత చిన్నదిగా చేయడానికి Facebook ఇలా చేస్తుంది.
ఇంకా ఏమి చేయవచ్చు హఫ్ఫ్మన్ పట్టికను కొంచెం మార్చడం. ఇతరులకు అది విరిగిన చిత్రంలా కనిపిస్తుంది. మరియు దాన్ని పరిష్కరించడానికి మాయా మార్గం మీకు మాత్రమే తెలుస్తుంది.
సంగ్రహించండి: కాబట్టి JPEG డీకోడ్ చేయడానికి ఏమి అవసరం? అవసరం:
- హెడర్ నుండి హఫ్ఫ్మన్ పట్టిక(ల)ని సంగ్రహించి బిట్లను డీకోడ్ చేయండి.
- విలోమ రన్-లెంగ్త్ మరియు డెల్టా ఎన్కోడింగ్ ట్రాన్స్ఫార్మ్లను చేస్తూ, ప్రతి 8x8 బ్లాక్కు ప్రతి రంగు మరియు ప్రకాశం కాంపోనెంట్ కోసం డిస్క్రీట్ కొసైన్ ట్రాన్స్ఫార్మ్ కోఎఫీషియంట్లను సంగ్రహించండి.
- ప్రతి 8x8 బ్లాక్ కోసం పిక్సెల్ విలువలను పొందేందుకు కోఎఫీషియంట్స్ ఆధారంగా కొసైన్లను కలపండి.
- ఉప నమూనా నిర్వహించబడితే రంగు భాగాలను స్కేల్ చేయండి (ఈ సమాచారం హెడర్లో ఉంది).
- ప్రతి పిక్సెల్ కోసం YCbCr విలువలను RGBకి మార్చండి.
- చిత్రాన్ని తెరపై ప్రదర్శించండి!
పిల్లితో ఫోటోను చూడటం కోసం తీవ్రమైన పని! అయితే, దాని గురించి నాకు నచ్చినది ఏమిటంటే, ఇది మానవ-కేంద్రీకృత JPEG సాంకేతికత ఎలా ఉందో చూపిస్తుంది. ఇది మన అవగాహన యొక్క ప్రత్యేకతలపై ఆధారపడి ఉంటుంది, ఇది సంప్రదాయ సాంకేతికతల కంటే మెరుగైన కుదింపును సాధించడానికి అనుమతిస్తుంది. మరియు ఇప్పుడు మేము JPEG ఎలా పనిచేస్తుందో అర్థం చేసుకున్నాము, ఈ సాంకేతికతలు ఇతర ప్రాంతాలకు ఎలా బదిలీ చేయబడతాయో మనం ఊహించవచ్చు. ఉదాహరణకు, వీడియోలో డెల్టా ఎన్కోడింగ్ ఫైల్ పరిమాణంలో గణనీయమైన తగ్గింపును అందిస్తుంది, ఎందుకంటే ఫ్రేమ్ నుండి ఫ్రేమ్కి మారని మొత్తం ప్రాంతాలు తరచుగా ఉంటాయి (ఉదాహరణకు, నేపథ్యం).
మూలం: www.habr.com