2013-03-07 6 views
5

मैं एकाधिक जेपीईजी छवियों को एक बड़ी छवि के रूप में संग्रहीत करते समय स्टोरेज स्पेस को कम करने की समस्या को देख रहा हूं। बुनियादी अंतर्ज्ञान यह है कि छवियों में कुछ समानताएं होती हैं (जैसे कि एक ही स्थान पर या उसी समय के आसपास की गई) और क्या हम अंतरिक्ष को बचाने के लिए इस समानता का फायदा उठा सकते हैं?जेपीईजी छवि संपीड़न

कुल प्रवाह है: इनपुट JPG छवियाँ -> प्रत्येक छवि RGB छवि टाइलें में बदल दिया -> समान RGB टाइल्स एक साथ पुनर्संगठित -> फिर JPG प्रारूप करने के लिए बदलना। स्वाभाविक रूप से, छवियों को पुनर्प्राप्त करते समय, हमें रिवर्स प्रक्रिया की आवश्यकता होगी।

टाइल पुनर्गठन के समानता माप के रूप में वाई घटक के डीसी गुणांक का उपयोग करके, मैंने 10 छवियों के लिए ~ 8% अंतरिक्ष बचत प्राप्त की। जब मैं 100 छवियों के लिए ऐसा करता हूं, तो बचत कम हो जाती है ~ 3%।

  • मैं कैसे बचत टाइल पुनर्गठन के बाद मिलता है - जो कि JPEG एन्कोडिंग प्रक्रिया का कौन सा हिस्सा इस छवि टाइल पुनर्गठन का लाभ लेता है?

    वहाँ कुछ अन्य है:

  • वाई घटक के डीसी गुणांक के बजाय

    , वहाँ कुछ अन्य मैट्रिक्स आपको लगता है कि के बारे में सोच सकता है बेहतर JPEG एन्कोडिंग द्वारा शोषण किया जाएगा


संशोधित कर रहे हैं जेपीजी के अलावा छवि प्रारूप जो इस तरह के समानता का उपयोग कर सकते हैं एकाधिक छवियों को एकत्र करते समय बेहतर? उदाहरण के लिए पीएनजी की तरह?

उत्तर

5

आप शायद एन्कोडिंग के लिए जेएफआईएफ का उपयोग कर रहे हैं।

मुझे यकीन नहीं है कि आप इस विधि को कैसे काम करने की उम्मीद करते हैं। अगर मैं सही ढंग से समझता हूं, तो आप छवियों को टाइल्स में विभाजित कर रहे हैं, उन्हें एक मेगा-इमेज में जोड़कर, "समान" टाइल्स एक-दूसरे के करीब व्यवस्थित होते हैं।

AFAIK, जेपीईजी कार्यान्वयन एक छवि में एक अलग डीसीटी प्रति व्यक्ति 8x8 टाइल करते हैं, जिसे मैक्रोबॉक कहा जाता है। एक और तरीका रखो, जेपीईजी पड़ोसी मैक्रोबॉक्स के बीच तालमेल का लाभ नहीं उठा सकता (जो आपकी संपीड़न तकनीक के लिए मौलिक धारणा प्रतीत होता है)।

यदि आपकी खुद की टाइल्स मैक्रोबॉक्स से बड़ी हैं, तो आपको छवि शीर्षलेख स्थान में बचत से परे कोई सुधार दिखाई नहीं देगा।

उदाहरण: 10 जेपीजी छवि शीर्षलेख 1 से प्रतिस्थापित किए गए हैं, आपको 90% स्पेस बचत होगी, लेकिन केवल शीर्षलेख में होगा। जब आप समग्र फ़ाइल को देखते हैं, तो हेडर संपूर्ण फ़ाइल का एक छोटा सा हिस्सा होता है, इसलिए आपकी स्पेस बचत कम होती है। 100 छवि शीर्षलेखों को 1 से बदलते समय, आप 99% बचाते हैं, लेकिन फिर केवल शीर्षलेख पर। दोनों मामलों में, सभी मैक्रोबॉक्स अभी भी एन्कोड किए जा रहे हैं और पहले की तरह संग्रहीत किए जा रहे हैं।

+0

धन्यवाद, यह बहुत समझ में आता है! मैं एन्कोडिंग और डिकोडिंग करने के लिए libjpeg का उपयोग करता हूं। चूंकि जेपीईजी 8x8 मैक्रोबॉक्स के भीतर डीसीटी करता है, टाइल्स (मैक्रोबॉक्स से बड़ा) के बीच समानता शायद अधिक मदद नहीं करती है। लेकिन, मुझे लगता है कि पड़ोसी मैक्रोबॉक्स के डीसीटी गुणांक अपेक्षाकृत एन्कोड किए गए हैं, और कुछ हद तक इस टाइल पुनर्गठन द्वारा इसे बेहतर किया जा सकता है। मैंने अपना प्रश्न संशोधित किया है - कृपया एक नज़र डालें। – user655617

+0

खुशी है कि मैं चीजों को स्पष्ट करने में मदद कर सकता हूं। हां, libjpeg जेपीईजी मानक के आईजेजी का संदर्भ जेएफआईएफ कार्यान्वयन है। मुझे डेल्टा एन्कोडिंग (पड़ोसी macroblocks के बीच) का उपयोग कर डीसीटी गुणांक याद नहीं है। AFAIR, प्रत्येक मैक्रोबॉक गुणांक का एक 8x8 मैट्रिक्स बन जाता है, जिसे तब क्षीणित किया जाता है (उन्हें स्टोर करने के लिए आवश्यक बिट्स की संख्या को कम करने के लिए विभाजित किया जाता है - और यह वह जगह है जहां हानिकारक संपीड़न में "हानि" आती है), और ज़िग में पढ़ा जाता है -जैग फैशन। यह ऑर्डरिंग 0s के लंबे रन बनाता है, जो रन-लम्बाई एन्कोडिंग के माध्यम से कुशलता से संपीड़ित होते हैं (17 शून्य संग्रहीत करने के बजाय, हम 17, 0 स्टोर करते हैं)। –

2

दो क्षेत्रों रहे हैं जहाँ आप लाभ देखेंगे:

सबसे पहले, जब आप एक दूसरे के बगल (खासकर अगर छवियों के किनारे कोई अलगाव के साथ पूरी तरह से मेल ही प्रकार के क्षेत्र डाल - हालांकि यह हो जाएगा बहुत दुर्लभ), जेपीईजी एल्गोरिदम का डीसीटी (फ्रीक्वेंसी स्पेस) हिस्सा प्रगतिशील रूप से बड़े-आश क्षेत्रों का अनुमान लगाता है (सुनिश्चित नहीं है कि सबसे बड़ा आकार क्या है), फिर बड़े क्षेत्र और कई छोटे क्षेत्रों के अनुमान के बीच की त्रुटि को देखते हुए, और उत्पादन एक और स्थानीयकरण सुधार।

मुझे संदेह है कि यह प्रभाव छोटा है, जब तक कि आपकी छवियां बहुत समान, या बहुत छोटी (ताकि उनके किनारे उनके क्षेत्र के अनुपात में लंबे हों)।

दूसरे, JPEG संपीड़न के Huffman coding हिस्सा है क्योंकि एक ही सा पैटर्न अनेक उप-छवियों में दिखाई देता है, और एक ही (छोटी) के साथ संकुचित हो टोकन एक लाभ देखेंगे)।

यह पहलू इस छवि पर निर्भर नहीं करेगा कि आप अपनी छवियों को किस संकुचित करते हैं - जब तक वे एक ही छवि में हों।

+0

प्रतिक्रिया के लिए धन्यवाद! मैं आपके पहले भाग के बारे में निश्चित नहीं हूँ। लेकिन, मुझे लगता है कि हफमैन कोडिंग _some_ limit _if_ पर अंतिम आउटपुट को विभाजित कर सकता है, मैंने अंतिम आउटपुट को कई छवियों में विभाजित किया है, प्रत्येक एक समान टाइल्स के साथ। लेकिन, मुझे नहीं लगता कि मुझे प्राप्त होने वाली अंतरिक्ष बचत बताती है। मैंने अपना प्रश्न दोहराया है - कृपया एक नज़र डालें। – user655617

संबंधित मुद्दे