मालवेअर हे अनाहूत किंवा धोकादायक प्रोग्राम आहेत जे...
![व्हायरस आणि मालवेअर काढून टाकण्यासाठी सर्वोत्तम उपयुक्तता](https://i2.wp.com/webhelper.info/images/danger.jpg)
हे मोजणे सोपे आहे की 2000 * 1000 पिक्सेल आकाराच्या असम्पीडित पूर्ण-रंग प्रतिमेचा आकार सुमारे 6 मेगाबाइट्स असेल. जर आपण व्यावसायिक कॅमेरा किंवा उच्च-रिझोल्यूशन स्कॅनरमधून मिळवलेल्या प्रतिमांबद्दल बोललो तर त्यांचा आकार आणखी मोठा असू शकतो. स्टोरेज डिव्हाइसेसच्या क्षमतेमध्ये वेगवान वाढ असूनही, विविध इमेज कॉम्प्रेशन अल्गोरिदम अजूनही खूप संबंधित आहेत.
सर्व विद्यमान अल्गोरिदम दोन मोठ्या वर्गांमध्ये विभागले जाऊ शकतात:
ही सारणी माहिती संकुचित करणाऱ्याच्या बाजूला आणि ती विघटित करणाऱ्याच्या बाजूला असते. आता आपण कॉम्प्रेशन प्रोसेस बघू.
डिक्शनरी भरण्याची प्रक्रिया टेबल दाखवते. हे मोजणे सोपे आहे की परिणामी संकुचित कोड 105 बिट्स घेते आणि मूळ मजकूर (एक वर्ण एन्कोडिंगसाठी 4 बिट खर्च करतो असे गृहीत धरून) 116 बिट्स लागतात.
थोडक्यात, डीकोडिंग प्रक्रिया कोडच्या थेट डीकोडिंगवर येते आणि हे महत्वाचे आहे की सारणी एन्कोडिंगच्या वेळी सुरू केली जाते. आता डीकोडिंग अल्गोरिदम पाहू.
डिक्शनरीमध्ये जोडलेली स्ट्रिंग आम्ही i+1 वरच i-th पायरीवर पूर्णपणे परिभाषित करू शकतो. अर्थात, i-th ओळ i+1 ओळीच्या पहिल्या वर्णाने संपली पाहिजे. ते. शब्दकोष कसा पुनर्संचयित करायचा ते आम्ही आत्ताच शोधून काढले. जेव्हा cScSc फॉर्मचा क्रम एन्कोड केला जातो तेव्हा काही स्वारस्य असते, जेथे c एक वर्ण आणि S एक स्ट्रिंग आहे आणि cS हा शब्द डिक्शनरीमध्ये आधीपासूनच आहे. पहिल्या दृष्टीक्षेपात असे दिसते की डीकोडर या परिस्थितीचे निराकरण करण्यात सक्षम होणार नाही, परंतु प्रत्यक्षात या प्रकारच्या सर्व ओळी ज्या वर्णाने सुरू होतात त्याच वर्णाने समाप्त होणे आवश्यक आहे.
2010 मध्ये, प्लॅनेट प्रकल्पातील शास्त्रज्ञांनी स्विस आल्प्समधील विशेष बंकरमध्ये ठेवलेल्या एका विशेष कॅप्सूलमध्ये JPEG स्वरूप वाचण्यासाठी सूचना दिल्या. 21 व्या शतकाच्या सुरूवातीस लोकप्रिय असलेल्या डिजिटल फॉरमॅट्सबद्दल पश्चात माहिती जतन करण्याच्या उद्देशाने हे केले गेले.
UPD. मला मोनोस्पेस फॉरमॅटिंग काढून टाकण्यास भाग पाडले गेले. एक चांगला दिवस, habraparser ने प्री आणि कोड टॅगमध्ये फॉरमॅटिंग स्वीकारणे बंद केले. संपूर्ण मजकूर मूषात बदलला. हबर प्रशासन मला मदत करू शकले नाही. आता ते असमान आहे, परंतु किमान ते वाचनीय आहे.
jpg फाइल कशी कार्य करते हे तुम्हाला कधी जाणून घ्यायचे आहे का? चला आता ते शोधूया! तुमचे आवडते कंपाइलर आणि हेक्स एडिटर वार्म अप करा, आम्ही हे डीकोड करू:
मी मुद्दाम एक लहान रेखाचित्र घेतले. हे एक परिचित, परंतु जोरदारपणे संकुचित केलेले Google favicon आहे:
मी तुम्हाला ताबडतोब चेतावणी देतो की वर्णन सोपे केले आहे आणि प्रदान केलेली माहिती पूर्ण नाही, परंतु नंतर तपशील समजणे सोपे होईल.
एन्कोडिंग कसे होते हे माहीत नसतानाही, आम्ही फाइलमधून आधीच काहीतरी काढू शकतो.
- प्रारंभ मार्कर. हे नेहमी सर्व jpg फाइल्सच्या सुरुवातीला असते.
पुढे बाइट्स येतात
. हे एक मार्कर आहे जे टिप्पणी विभागाची सुरूवात दर्शवते. पुढील 2 बाइट्स
- विभागाची लांबी (या 2 बाइट्ससह). तर पुढच्या दोन मध्ये
- टिप्पणी स्वतः. हे अक्षर कोड ":" आणि ") आहेत, म्हणजे. नियमित हसरा चेहरा. तुम्ही हेक्स एडिटरच्या उजव्या बाजूला पहिल्या ओळीत पाहू शकता.
मी तुम्हाला आठवण करून देतो की प्रत्येक ब्लॉक Y ij, Cb ij, Cr ij हा हफमन कोडसह एन्कोड केलेला DCT गुणांकांचा मॅट्रिक्स आहे. फाइलमध्ये ते या क्रमाने मांडलेले आहेत: Y 00 Y 10 Y 01 Y 11 Cb 00 Cr 00 Y 20
FF DB 00 43 00 A0 6E 78
8C 78 64 A0 8C 82 8C B4 AA A0 BE F0 FF FF F0 DC
DC F0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
विभाग शीर्षलेख नेहमी 3 बाइट्स घेते. आमच्या बाबतीत ते आहे. हेडरमध्ये हे समाविष्ट आहे:
लांबी: 0x43 = 67 बाइट्स
सारणीतील मूल्यांची लांबी: 0 (0 - 1 बाइट, 1 - 2 बाइट)
[_0]
टेबल आयडी: 0
उर्वरित 64 बाइट्स 8x8 टेबल भरणे आवश्यक आहे.
टेबल मूल्ये ज्या क्रमाने भरली आहेत त्या क्रमाने जवळून पहा. या ऑर्डरला झिगझॅग ऑर्डर म्हणतात:
FF C0 00 11 08 00 10 00 10 03 01 22 00 02
11 01 03 11 01
लांबी: 17 बाइट्स.
अचूकता: 8 बिट. मूळ पद्धतीमध्ये ते नेहमी 8 असते. मला समजले की, ही चॅनेलच्या मूल्यांची थोडी खोली आहे.
चित्राची उंची: 0x10 = 16
आकृतीची रुंदी: 0x10 = 16
घटकांची संख्या: 3. बहुतेकदा हे Y, Cb, Cr असतात.
पहिला घटक:
आयडी: १
क्षैतिज पातळ करणे (H 1): 2
[_2]
अनुलंब पातळ करणे (V 1): 2
परिमाण सारणी आयडी: 0
2रा घटक:
आयडी: 2
क्षैतिज पातळ करणे (H 2): १
[_1]
अनुलंब पातळ करणे (V 2): 1
3रा घटक:
आयडी: ३
क्षैतिज पातळ करणे (H 3): १
[_1]
अनुलंब पातळ करणे (V 3): 1
परिमाण सारणी आयडी: 1
आता प्रतिमा किती पातळ आहे हे कसे ठरवायचे ते पहा. आम्हाला H कमाल = 2 आणि V कमाल = 2 सापडते. चॅनल i H max/H i वेळा क्षैतिज आणि V max/V i वेळा अनुलंब पातळ केले जाईल.
FF C4 00 15 00 01 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 03 02
लांबी: 21 बाइट्स.
वर्ग: 0 (0 - DC गुणांकांची सारणी, 1 - AC गुणांकांची सारणी).
[_0]
टेबल आयडी: 0
हफमन कोड लांबी: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
कोडची संख्या:
कोडची संख्या म्हणजे त्या लांबीच्या कोडची संख्या. कृपया लक्षात घ्या की विभाग फक्त कोडची लांबी साठवतो, स्वतः कोड नाही. संहिता आपल्यालाच शोधाव्या लागतात. तर, आमच्याकडे 1 लांबीचा एक कोड आणि 2 लांबीचा एक कोड आहे. एकूण 2 कोड, या टेबलमध्ये आणखी कोणतेही कोड नाहीत.
प्रत्येक कोडशी संबंधित मूल्य असते आणि ते खालीलप्रमाणे फाइलमध्ये सूचीबद्ध केले जातात. मूल्ये सिंगल-बाइट आहेत, म्हणून आम्ही 2 बाइट वाचतो.
- 1ल्या कोडचे मूल्य.
- 2 रा कोडचे मूल्य.
या उदाहरणातील सर्व सारण्यांसाठी झाडे:
UPD (धन्यवाद): पहिल्या झाडाच्या नोड्समध्ये (DC, id =0) मूल्ये 0x03 आणि 0x02 असणे आवश्यक आहे
वर्तुळांमध्ये कोड्सचे अर्थ आहेत, वर्तुळांच्या खाली स्वतःच कोड्स आहेत (मला समजावून सांगू द्या की आम्ही ते प्रत्येक नोडच्या वरच्या मार्गाने जाऊन मिळवले). या कोड्ससह (या आणि इतर सारण्यांपैकी) आकृतीची सामग्री एन्कोड केलेली आहे.
  FF DA 00 0C 03 01 00 02 11
03 11 00 3F 00
शीर्षलेख भागाची लांबी (संपूर्ण विभाग नाही): 12 बाइट्स.
स्कॅन घटकांची संख्या. आमच्याकडे Y, Cb, Cr साठी प्रत्येकी 3, एक आहे.
पहिला घटक:
प्रतिमा घटक क्रमांक: 1 (Y)
DC गुणांकांसाठी हफमन टेबल आयडी: 0
[_0]
AC गुणांकांसाठी हफमन टेबल आयडी: 0
2रा घटक:
चित्र घटक क्रमांक: 2 (Cb)
[_1]
3रा घटक:
प्रतिमा घटक क्रमांक: 3 (Cr)
DC गुणांकांसाठी हफमन टेबल आयडी: 1
[_1]
AC गुणांकांसाठी हफमन टेबल आयडी: 1
हे घटक चक्रीय पद्धतीने बदलतात.
हेडरचा भाग इथेच संपतो, इथून शेवटपर्यंत (मार्कर) एन्कोड केलेला डेटा असतो.
0
डीसी गुणांक शोधत आहे.
1.
बिट्सचा क्रम वाचत आहे (जर आम्हाला 2 बाइट आढळले, तर हे मार्कर नाही तर फक्त एक बाइट आहे). प्रत्येक बिटानंतर, आम्ही वाचलेल्या बिटवर अवलंबून, 0 किंवा 1 शाखेच्या बाजूने हफमन झाडाच्या बाजूने (संबंधित अभिज्ञापकासह) पुढे जाऊ. आम्ही स्वतःला अंतिम नोडवर आढळल्यास आम्ही थांबतो.
10
1011101110011101100001111100100
2.
आम्ही नोडचे मूल्य घेतो. जर ते 0 च्या बरोबरीचे असेल तर गुणांक 0 च्या बरोबरीचे असेल, आम्ही ते टेबलमध्ये लिहू आणि इतर गुणांक वाचण्यास पुढे जाऊ. आमच्या बाबतीत - 02. हे मूल्य बिट्समधील गुणांकाची लांबी आहे. म्हणजेच, आपण पुढील 2 बिट वाचतो, हे गुणांक असेल.
10
10
11101110011101100001111100100
3. जर बायनरी प्रस्तुतीकरणातील मूल्याचा पहिला अंक 1 असेल, तर आपण ते असे सोडू: DC_coef = मूल्य. अन्यथा, आम्ही रूपांतरित करतो: DC_coef = मूल्य-2 मूल्य लांबी +1 . आम्ही झिगझॅगच्या सुरूवातीस टेबलमध्ये गुणांक लिहितो - वरच्या डाव्या कोपर्यात.
AC गुणांक शोधत आहे.
1.
चरण 1 प्रमाणेच, DC गुणांक शोधणे. आम्ही क्रम वाचणे सुरू ठेवतो:
10
10
1110
1110011101100001111100100
2.
आम्ही नोडचे मूल्य घेतो. जर ते 0 असेल तर याचा अर्थ मॅट्रिक्सची उर्वरित मूल्ये शून्याने भरणे आवश्यक आहे. नंतर पुढील मॅट्रिक्स एन्कोड केले आहे. पहिले काही ज्यांनी हे वाचले आणि मला वैयक्तिक संदेशात याबद्दल लिहिले त्यांना कर्मात अधिक लाभ मिळेल. आमच्या बाबतीत, नोड मूल्य 0x31 आहे.
पहिले निबल: 0x3 - मॅट्रिक्समध्ये किती शून्य जोडले पाहिजेत हेच आहे. हे 3 शून्य गुणांक आहेत.
दुसरा निबल: 0x1 - बिट्समधील गुणांक लांबी. पुढील भाग वाचा.
10
10
1110
1
110011101100001111100100
3. डीसी गुणांक शोधण्याच्या चरण 3 प्रमाणेच.
तुम्ही आधीच समजून घेतल्याप्रमाणे, आम्हाला शून्य कोड मूल्य येईपर्यंत किंवा मॅट्रिक्स भरेपर्यंत तुम्हाला AC गुणांक वाचण्याची आवश्यकता आहे.
आमच्या बाबतीत आम्हाला मिळेल:
10
10
1110
1
1100
11
101
10
0
0
0
1
11110
0
100
आणि मॅट्रिक्स:
तुमच्या लक्षात आले की मूल्ये समान झिगझॅग पॅटर्नमध्ये भरलेली आहेत?
हा क्रम वापरण्याचे कारण सोपे आहे - कारण v आणि u ची मूल्ये जितकी मोठी असतील तितके कमी महत्त्वाचे गुणांक S vu वेगळे कोसाइन ट्रान्सफॉर्ममध्ये असेल. म्हणून, उच्च कम्प्रेशन दरांवर, क्षुल्लक गुणांक शून्यावर सेट केले जातात, ज्यामुळे फाइल आकार कमी होतो.
[-4 1 1 1 0 0 0 0] [ 5 -1 1 0 0 0 0 0]
[ 0 0 1 0 0 0 0 0] [-1 -2 -1 0 0 0 0 0]
[ 0 -1 0 0 0 0 0 0] [ 0 -1 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [-1 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[-4 2 2 1 0 0 0 0]
[-1 0 -1 0 0 0 0 0]
[-1 -1 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
अरे, मी हे सांगायला विसरलो की एन्कोड केलेले डीसी गुणांक स्वतः डीसी गुणांक नाहीत, परंतु मागील सारणीच्या गुणांकांमधील फरक (समान चॅनेल)! मॅट्रिक्स दुरुस्त करणे आवश्यक आहे:
2रा साठी DC: 2 + (-4) = -2
3ऱ्यासाठी DC: -2 + 5 = 3
चौथ्या साठी DC: 3 + (-4) = -1
[-2 1 1 1 0 0 0 0] [ 3 -1 1 0 0 0 0 0] [-1 2 2 1 0 0 0 0]
………
आता सर्व काही व्यवस्थित आहे. हा नियम फाईलच्या शेवटपर्यंत लागू होतो.
...आणि Cb आणि Cr साठी मॅट्रिक्सनुसार:
[-1 0 0 0 0 0 0 0]
[ 1 1 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
फक्त एकच मॅट्रिक्स असल्याने, DC गुणांक अस्पर्शित सोडले जाऊ शकतात.
[ 0 120 280 0 0 0 0 0]
[ 0 -130 -160 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
त्याचप्रमाणे, आम्हाला आणखी 3 Y-चॅनल मॅट्रिक्स मिळतात...
[-320 110 100 160 0 0 0 0] [ 480 -110 100 0 0 0 0 0]
[ 0 0 140 0 0 0 0 0] [-120 -240 -140 0 0 0 0 0]
[ 0 -130 0 0 0 0 0 0] [ 0 -130 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [-140 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[-160 220 200 160 0 0 0 0]
[-120 0 -140 0 0 0 0 0]
[-140 -130 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
...आणि Cb आणि Cr साठी मॅट्रिक्सद्वारे.
[-170 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 180 210 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0] [ 0 0 0 0 0 0 0 0]
सूत्र कठीण नसावे*. S vu हे आमचे परिणामी गुणांक मॅट्रिक्स आहे. u - स्तंभ, v - पंक्ती. s yx - थेट चॅनेल मूल्ये.
*सर्वसाधारणपणे बोलायचे झाले तर हे पूर्णपणे खरे नाही. जेव्हा मी स्क्रीनवर 16x16 प्रतिमा डीकोड आणि प्रदर्शित करण्यास सक्षम होतो, तेव्हा मी 600x600 प्रतिमा घेतली (तसे, हे Mind.In.A.Box च्या आवडत्या अल्बमचे मुखपृष्ठ होते - Lost Alone). हे लगेच कार्य करत नाही - विविध बग समोर आले. लवकरच मी योग्यरित्या लोड केलेल्या चित्राची प्रशंसा करू शकेन. मला खरोखर अस्वस्थ करणारी एकमेव गोष्ट म्हणजे लोडिंग गती. मला अजूनही आठवते की यास 7 सेकंद लागले. परंतु हे आश्चर्यकारक नाही, जर तुम्ही अविचारीपणे वरील सूत्र वापरत असाल, तर एका पिक्सेलच्या एका चॅनेलची गणना करण्यासाठी तुम्हाला 128 कोसाइन, 768 गुणाकार आणि काही जोडणे आवश्यक आहेत. फक्त त्याबद्दल विचार करा - एका पिक्सेलच्या फक्त एका चॅनेलवर जवळजवळ हजार कठीण ऑपरेशन्स! सुदैवाने, ऑप्टिमायझेशनसाठी जागा आहे (बऱ्याच प्रयोगानंतर, मी लोडिंगची वेळ 15ms च्या टायमर अचूकतेच्या मर्यादेपर्यंत कमी केली आणि त्यानंतर मी प्रतिमा 25 पट मोठ्या क्षेत्रासह फोटोमध्ये बदलली. कदाचित मी याबद्दल लिहीन. एक स्वतंत्र लेख).
मी चॅनेल Y च्या फक्त पहिल्या मॅट्रिक्सची गणना केल्याचे निकाल लिहीन (मूल्ये गोलाकार आहेत):
[ 87 72 50 36 37 55 79 95]
[-10 5 31 56 71 73 68 62]
[-87 -50 6 56 79 72 48 29]
आणि उर्वरित 2:
Cb Cr
[ 60 52 38 20 0 -18 -32 -40] [ 19 27 41 60 80 99 113 120]
[ 48 41 29 13 -3 -19 -31 -37] [ 0 6 18 34 51 66 78 85]
[ 25 20 12 2 -9 -19 -27 -32] [-27 -22 -14 -4 7 17 25 30]
[ -4 -6 -9 -13 -17 -20 -23 -25] [-43 -41 -38 -34 -30 -27 -24 -22]
[ -37 -35 -33 -29 -25 -21 -18 -17] [-35 -36 -39 -43 -47 -51 -53 -55]
[ -67 -63 -55 -44 -33 -22 -14 -10] [ -5 -9 -17 -28 -39 -50 -58 -62]
[ -90 -84 -71 -56 -39 -23 -11 -4] [ 32 26 14 -1 -18 -34 -46 -53]
[-102 -95 -81 -62 -42 -23 -9 -1] [ 58 50 36 18 -2 -20 -34 -42]
आमच्या उदाहरणाच्या वरच्या डाव्या 8x8 स्क्वेअरसाठी R, G, B चॅनेलसाठी परिणामी सारण्या येथे आहेत:
255 248 194 148 169 215 255 255
255 238 172 115 130 178 255 255
255 208 127 59 64 112 208 255
255 223 143 74 77 120 211 255
237 192 133 83 85 118 184 222
177 161 146 132 145 162 201 217
56 73 101 126 144 147 147 141
0 17 76 126 153 146 127 108
231 185 117 72 67 113 171 217
229 175 95 39 28 76 139 189
254 192 100 31 15 63 131 185
255 207 115 46 28 71 134 185
255 241 175 125 112 145 193 230
226 210 187 173 172 189 209 225
149 166 191 216 229 232 225 220
72 110 166 216 238 231 206 186
255 255 249 203 178 224 255 255
255 255 226 170 140 187 224 255
255 255 192 123 91 138 184 238
255 255 208 139 103 146 188 239
255 255 202 152 128 161 194 232
255 244 215 200 188 205 210 227
108 125 148 172 182 184 172 167
31 69 122 172 191 183 153 134
JPEG सारख्या योजनांमध्ये क्वांटायझेशन मॅट्रिक्सची अनुकूली निर्मिती
लुझकोव्ह युरी व्हॅलेरिविच,
सेंट पीटर्सबर्ग स्टेट युनिव्हर्सिटी ऑफ इन्फॉर्मेशन टेक्नॉलॉजीज, मेकॅनिक्स आणि ऑप्टिक्सचे पदव्युत्तर विद्यार्थी.
वैज्ञानिक पर्यवेक्षक – डॉक्टर ऑफ टेक्निकल सायन्सेस, प्रोफेसर
ट्रॉपचेन्को अलेक्झांडर युवेनालिविच.
परिचय
अलिकडच्या वर्षांत, वेव्हलेट ट्रान्सफॉर्म्सवर आधारित हानीकारक प्रतिमा कॉम्प्रेशन स्कीम लोकप्रिय करण्याचा एक स्पष्ट प्रवृत्ती आहे. तथापि, डिस्क्रिट कोसाइन ट्रान्सफॉर्म (डीसीटी) वर आधारित इमेज कॉम्प्रेशन फॉरमॅट अजूनही सर्वात जास्त वापरले जातात.
व्यापक स्वरूप JPEG (संयुक्त छायाचित्रण तज्ञ गट) [ वॉलेस जी.के.] संशोधकांसमोर खालील प्रश्न उपस्थित करतात: डीकंप्रेशन अल्गोरिदम न बदलता कॉम्प्रेशन गुणवत्ता वाढवण्यासाठी विद्यमान कॉम्प्रेशन स्कीममध्ये बदल करणे शक्य आहे का?या समस्येचे निराकरण केल्याने वापरकर्त्यांद्वारे प्रतिमा डीकंप्रेशनसाठी विशेष (सुधारित) सॉफ्टवेअरच्या उपलब्धतेबद्दल काळजी न करता विद्यमान कंप्रेसरमध्ये बदल लागू करणे शक्य होईल.
JPEG सारख्या योजनेद्वारे आमचा अर्थ प्रतिमेला आयताकृती तुकड्यांमध्ये विभाजित करून कॉम्प्रेशन स्कीमचा एक प्रकार आहे, ज्याचे अनिवार्य घटक आहेत: ऑर्थोगोनल ट्रान्सफॉर्मेशन, रूपांतरित डेटाचे परिमाण आणि त्यानंतरचे सांख्यिकीय एन्कोडिंग.
अनेक कॉम्प्रेशन अल्गोरिदम अनेक डीफॉल्ट पॅरामीटर्स वापरतात. JPEG मध्ये, यामध्ये क्वांटायझेशन मॅट्रिक्स आणि हफमन टेबल समाविष्ट आहेत. ते संकुचित फाइलच्या शीर्षलेखात संग्रहित केले जातात आणि वापरकर्त्याद्वारे स्वतंत्रपणे निर्धारित केले जाऊ शकतात, जे कम्प्रेशनची गुणवत्ता सुधारण्यास अनुमती देते.
अशा प्रकारे, आज जेपीईजी क्वांटायझेशन मॅट्रिक्स (उदाहरणार्थ, आणि ) संकलित करण्यासाठी अनेक पद्धती आधीच प्रस्तावित केल्या गेल्या आहेत, जे तथापि, सार्वत्रिक नाहीत.आमच्या कामात, आम्ही स्पेक्ट्रम गुणांकांच्या अनुकूली स्केलर क्वांटायझेशनसाठी एक सामान्यीकृत दृष्टीकोन विचारात घेणार आहोत, जे अंमलबजावणी करणे सोपे आहे आणि जेपीईजी सारख्या योजनांमध्ये लागू केले जाऊ शकते.
अनुकूली सिग्नल परिमाणीकरण
क्वांटायझेशन ही सिग्नल प्रक्रियेची एक पद्धत आहे ज्यामध्ये विकृतीचा समावेश होतो. सार स्केलर परिमाणीकरणपर्यंत खाली येते फंक्शन व्हॅल्यूजच्या मर्यादेत मध्यांतरांच्या मर्यादेत विभागणे आणि नंतर या मध्यांतरातील कोणतेही मूल्य दर्शवण्यासाठी एक मूल्य निवडणे.
तर, नंतर मध्यांतरांचा संच आणि गुणांचा संच द्या परिमाणीकरण कार्यसाठी म्हणून परिभाषित केले आहे. कधी एकसमान स्केलर परिमाणीकरणमध्यांतरांचा संच खालीलप्रमाणे दर्शविला जाऊ शकतो:
कुठे - पॅरामीटर, किंवा परिमाणीकरण पायरी, - मूलभूत अंतराल ऑफसेट, , – मध्यांतराची संख्या, जी एन्कोड केलेली ऑब्जेक्ट आहे. मग परिमाणीकरण ऑपरेशन राउंडिंगसह साध्या विभाजनात कमी केले जाऊ शकते:
.(1)
स्केलर क्वांटायझेशनमधील अनुकूलता प्रत्येक क्वांटाइज्ड मूल्यासाठी क्वांटायझेशन चरणाच्या वैयक्तिक निवडीद्वारे प्राप्त केली जाते.
वजन निकषावर आधारित अनुकूली स्केलर परिमाणीकरण
आम्ही प्रस्तावित केलेला दृष्टिकोन आधारित आहे वर्णक्रमीय गुणांकांचे सांख्यिकीय विश्लेषण. हे कॉम्प्रेशन स्कीममध्ये वापरले जाऊ शकते (उदा JPEG ) प्रदान केले की सिग्नल स्कॅनिंग विंडोचा आकार स्थिर असतो.
तर, परिमाणांचा एक क्रम द्या, ज्यामध्ये विभागले गेलेएमच्या समान ब्लॉक्स्एनप्रत्येकामध्ये मूल्ये, आणि दिलेल्या ब्लॉकमधील घटकाची अनुक्रमणिका आहे, म्हणजेच प्रत्येक घटकाचे इतर कोणत्याही ब्लॉकमध्ये त्याचे ॲनालॉग आहे. प्रस्तावित दृष्टिकोनाचे सार खालीलप्रमाणे आहे: प्रत्येकासाठीnव्या घटकाचे, विशेष वजन निकषाचे मूल्य मोजले जाते आणि दिलेल्या स्पेक्ट्रम घटकाचे परिमाणीकरण चरण वजन निकषाचे संबंधित मूल्य जितके मोठे असेल तितके लहान सेट केले जाते.
अशा प्रकारे, द्वारे संकलित केलेल्या सिग्नलबद्दल काही सांख्यिकीय माहिती विचारात घेऊन परिमाणीकरण प्रक्रिया केली जाते.एमब्लॉक्स आणि प्रत्येक निर्देशांकाच्या घटकांसाठी अद्वितीय n. या प्रकरणात परिमाणीकरण कार्य (1) म्हणून दर्शविले जाईल, आणि परिमाणीकरण पॅरामीटर कार्य – .
चला एक निकष ओळखू या, त्यास कॉल करा स्पेक्ट्रम गुणांक वजन. मूल्य संबंधित वर्णक्रमीय स्थितीचे महत्त्व दर्शवेलnगुणांक .
एक गणना पद्धत सरासरी मोठेपणावर आधारित आहे:
.(2)
प्रयोगांनी दाखवल्याप्रमाणे, DCT गुणांकांसाठी (2) नुसार गणना केल्याने उच्च- आणि कमी-फ्रिक्वेंसी स्पेक्ट्रम गुणांकांसाठी निकष मूल्यांचे असमान वितरण होते. आपण वापरून परिस्थिती दुरुस्त करू शकता सुधारात्मक कार्य(खाली पहा), किंवा कमाल मोठेपणावर आधारित मूल्यांची गणना करून:
.(3)
फंक्शन परिभाषित करण्याच्या प्रश्नाकडे वळू. त्याची मूल्ये श्रेणीनुसार मर्यादित असू द्या . चला एक रेखीय कार्य सादर करूया:
,
कुठे आणि अनुक्रमे किमान आणि कमाल मूल्ये आहेत (केस स्वतंत्रपणे विचारात घेतला जातो).
व्यवहारात, ची नॉनलाइनर फंक्शन वापरणे फायदेशीर ठरू शकते, जे सुधार फंक्शनच्या वापराद्वारे प्राप्त केले जाते:
.(4)
कोणतेही सर्वसाधारणपणे मूळ वर्णक्रमीय वेक्टरच्या सर्व घटकांवर अवलंबून असल्याने, कार्यइवर देखील अवलंबून आहे. खरं तर, हे सिग्नल परिमाणीकरण चरणाचे कार्य आहे. नोटेशनचा परिचय करून देऊ . मग सूत्र (4) शेवटी फॉर्म घेते:
.(5)
अशा प्रकारे, परिमाणीकरण चरण फंक्शन पासून श्रेणीमध्ये स्थानिकीकृत आहेa 1 ते a 2 त्याचे आकार बदलून, गुणांकांच्या विशिष्ट गटांना कमी किंवा जास्त प्रमाणात दाबणे शक्य आहे.
आता सर्किटमध्ये क्वांटायझेशन मॅट्रिक्सच्या अनुकूली निर्मितीसाठी प्रस्तावित दृष्टिकोन लागू करूया JPEG . (5) मध्ये आपण रेखीय सुधारणा फंक्शन आणि कमाल मोठेपणाचे निकष (3) वापरू.
डीफॉल्ट परिमाणीकरण चरण कार्यांचे आलेख JPEG अंजीर मध्ये दर्शविले आहेत.1 उरला. Δ प्रतिमेसाठी अनुकूलपणे व्युत्पन्न केलेले आलेख "म्हातारा माणूस" अंजीर मध्ये दर्शविले आहेत.1, बरोबर. दोन्ही प्रकरणांमध्ये, मूल्ये चढत्या क्रमाने लावली जातात. जसे आपण पाहू शकता, वितर्क मूल्यांच्या पहिल्या तृतीयांशासाठी Δ मध्ये तीव्र वाढ झाली आहे, जी विशेषतः व्युत्पन्न केलेल्या कार्यांसाठी वैशिष्ट्यपूर्ण आहे. या साइटवर व्युत्पन्नΔ काही ठिकाणी मानक मूल्यांपेक्षा लक्षणीयरीत्या ओलांडते, ज्यामुळे संबंधित फ्रिक्वेन्सीचे जास्त दडपण होते.
तांदूळ. 1. ऑर्डर केलेले मानक आणि व्युत्पन्न क्वांटायझेशन पॅरामीटर फंक्शन्स
चढत्या मूल्ये.
प्रतिमेसाठी आलेख "म्हातारा माणूस" अंजीर मध्ये दर्शविले आहे.2 बाकी. उजवीकडे प्रयोगाचा भाग म्हणून तयार केलेले डीफॉल्ट मॅट्रिक्स आणि मॅट्रिक्स वापरून कॉम्प्रेशन परिणाम आहेत. परिणामांवरून पाहिले जाऊ शकते, समान मूल्यांसह अनुकूली दृष्टिकोनाच्या बाजूने कॉम्प्रेशन रेशोमधील फरक 20% पर्यंत आहे PSNR.
तांदूळ. 2. सर्किटसाठी अनुकूली क्वांटायझेशन मॅट्रिक्सची निर्मिती JPEG.
निष्कर्ष
आम्ही स्पेक्ट्रम गुणांकांच्या अनुकूली स्केलर परिमाणीकरणासाठी एक पद्धत प्रस्तावित केली आहे, जी वर्णक्रमीय घटकांच्या महत्त्वाच्या निकषावर आधारित आहे. प्रयोगांनी दाखवल्याप्रमाणे, सर्किटमध्ये विचारात घेतलेल्या दृष्टिकोनाचा वापर JPEG तुम्हाला मानक क्वांटायझेशन मॅट्रिक्स वापरण्याच्या तुलनेत 20% पर्यंत कम्प्रेशन रेशोमध्ये फायदा मिळवण्याची परवानगी देते.
विचारात घेतलेल्या बदलाच्या व्यावहारिक वापरामध्ये केवळ कंप्रेसरची अंमलबजावणी समाविष्ट आहे आणि प्रतिमा पाहण्यासाठी मानक वापरणे पुरेसे आहे. JPEG -डीकंप्रेसर, जो प्रस्तावित सोल्यूशनचा एक महत्त्वाचा फायदा आहे.
साहित्य
1. फंग एच. टी., पार्कर के. जे. JPEG // जर्नल ऑफ इलेक्ट्रॉनिक इमेजिंगसाठी इमेज-ॲडॉप्टिव्ह क्वांटायझेशन टेबलची रचना. - 1996. - खंड. 4, एन. 2. - पृष्ठ 144 - 150.
2. ग्रे R.M., Neuhoff D.L.क्वांटायझेशन // माहिती सिद्धांतावर IEEE व्यवहार. - 1998. - खंड. ४४, एन. ६. – पृष्ठ २३२५ – २३८३.
3. रत्नाकर व्ही., लिव्हनी एम. विस्तारित आरडी -जेपीईजी ऑप्टिमायझेशन // डेटा कॉम्प्रेशन कॉन्फरन्ससाठी ग्लोबल थ्रेशोल्डिंगसह ऑप्ट.– 1996.
4. वॉलेस जी. के. जेपीईजी स्टिल पिक्चर कॉम्प्रेशन स्टँडर्ड // IEEE ट्रान्स. उपभोक्ता इलेक्ट्रॉनिक्स. - 1992. - खंड. 38, एन. 1. - पृष्ठ 18 - 34.
सर्व डीसीटी गुणांकांची गणना केल्यानंतर, त्यांना परिमाणित करणे आवश्यक आहे. या चरणावर, माहितीचा काही भाग टाकून दिला जातो (संगणकांच्या मर्यादित अचूकतेमुळे मागील चरणात लहान नुकसान देखील होते). DCT गुणांक मॅट्रिक्समधील प्रत्येक संख्येला "परिमाणीकरण सारणी" मधील एका विशेष संख्येने विभाजित केले जाते आणि परिणाम जवळच्या पूर्णांकापर्यंत पूर्ण केला जातो. आधीच नमूद केल्याप्रमाणे, प्रत्येक रंगाच्या घटकासाठी अशा तीन टेबल्स असणे आवश्यक आहे. JPEG मानक चार सारण्यांना परवानगी देते आणि वापरकर्ता रंग घटकांचे परिमाण करण्यासाठी यापैकी कोणतेही टेबल निवडू शकतो. परिमाण सारणीतील सर्व 64 संख्या जेपीईजी पॅरामीटर्स आहेत. तत्त्वतः, वापरकर्ता उच्च कम्प्रेशन गुणोत्तर प्राप्त करण्यासाठी कोणतेही गुणोत्तर बदलू शकतो. सराव मध्ये, इतक्या मोठ्या संख्येने पॅरामीटर्ससह प्रयोग करणे खूप कठीण आहे, म्हणून JPEG सॉफ्टवेअर दोन पद्धती वापरते:
1. डीफॉल्ट परिमाण सारणी. असे दोन तक्ते, एक ल्युमिनोसिटी घटकासाठी (आणि ग्रेस्केलसाठी) आणि दुसरे क्रोमॅटिक घटकांसाठी, जेपीईजी समितीने केलेल्या अनेक प्रयोगांसह दीर्घ अभ्यासाचे परिणाम आहेत. ते JPEG मानकांचा भाग आहेत आणि टेबलमध्ये पुनरुत्पादित केले आहेत. ३.५०. वरच्या डाव्या कोपऱ्यातून खालच्या उजव्या कोपर्यात जाताना टेबलांचे QC गुणांक कसे वाढतात ते तुम्ही पाहू शकता. हे उच्च अवकाशीय फ्रिक्वेन्सीशी संबंधित DCT गुणांकातील घट प्रतिबिंबित करते.
2. वापरकर्त्याद्वारे निर्दिष्ट केलेल्या पॅरामीटरवर अवलंबून, परिमाणीकरण गुणांकांची एक साधी सारणी मोजली जाते. सारखे साधे भाव गुणांक वरच्या डावीकडून खालच्या उजवीकडे कमी होतील याची हमी.
प्रकाशमान
जर क्वांटायझेशन योग्यरित्या केले असेल, तर डीसीटी गुणांकांच्या ब्लॉकमध्ये फक्त काही शून्य नसलेले गुणांक असतील, जे मॅट्रिक्सच्या वरच्या डाव्या कोपर्यात केंद्रित असतील. हे अंक जेपीईजी अल्गोरिदमचे आउटपुट आहेत, परंतु आउटपुट फाइलवर लिहिण्यापूर्वी ते अधिक संकुचित केले जाणे आवश्यक आहे. जेपीईजी साहित्यात या कम्प्रेशनला "एंट्रोपी एन्कोडिंग" म्हणतात, ज्याच्या तपशीलांची चर्चा § 3.7.5 मध्ये केली जाईल. 8x8 पूर्णांक मॅट्रिक्स कॉम्प्रेस करण्यासाठी एन्ट्रॉपी कोडिंगमध्ये तीन तंत्रे वापरली जातात.
3. झिगझॅगमध्ये स्कॅन केल्याप्रमाणे 64 संख्या एकामागून एक रांगेत आहेत (चित्र 3.5a पहा). सुरुवातीला शून्य नसलेल्या संख्या असतात, सामान्यतः सर्व शून्यांची लांब शेपटी असते. केवळ शून्य नसलेल्या संख्या (योग्य एन्कोडिंगनंतर) फाइलमध्ये आउटपुट केल्या जातात, त्यानंतर विशेष EOB (अंत-ऑफ-ब्लॉक) कोड येतो. शून्यांची संपूर्ण शेपटी रेकॉर्ड करण्याची आवश्यकता नाही (EOB ला शून्यांची एक लांब मालिका एन्कोड करण्यासाठी देखील म्हटले जाऊ शकते).
उदाहरण: टेबलमध्ये. आकृती 3.51 काल्पनिक DCT गुणांकांची सूची दर्शविते, त्यापैकी फक्त 4 शून्य नाहीत. या संख्यांचा क्रम झिगझॅग करून, गुणांकांचा क्रम प्राप्त होतो:
टेबल ३.५१. परिमाणित गुणांक.
झिगझॅग पॅटर्नमध्ये मॅट्रिक्स घटक वाचण्यासाठी सबरूटीन कसे लिहायचे? सर्वात सोपा मार्ग म्हणजे हा मार्ग मॅन्युअली ट्रेस करणे आणि परिणाम zz रचनांच्या ॲरेमध्ये रेकॉर्ड करणे, ज्यामध्ये प्रत्येक संरचनेत सेल कोऑर्डिनेट्सची जोडी असते ज्यामधून झिगझॅग मार्ग जातो (चित्र 3.52 पहा).
जर रचना zz चे घटक zz.r आणि zz.c नियुक्त केले असतील, तर खालील चक्र वापरून झिगझॅग मार्ग पूर्ण केला जाऊ शकतो.
4. गैर-शून्य रूपांतरण गुणांक Huffman पद्धत वापरून संकुचित केले जातात (§ 3.7.5 पहा).
5. यापैकी पहिली संख्या (DC गुणांक, पृष्ठ 145 पहा) इतर संख्यांपासून (AC गुणांक) स्वतंत्रपणे प्रक्रिया केली जाते.
तांदूळ. ३.५२. झिगझॅग मार्गाचे निर्देशांक.