2010-04-13 13 views
5

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

क्या कोई साधारण एल्गोरिदम है जिसका उपयोग मैं पिक्सेल डेटा को लापरवाही से संपीड़ित करने के लिए कर सकता हूं?

मैंने पहली बार लगातार दो पिक्सेल के बीच अंतर की गणना करने और फिर इस अंतर को हफमैन कोड के साथ एन्कोड करने का विचार किया। दुर्भाग्यवश, पिक्सल 16-बिट मात्राओं को हस्ताक्षरित कर रहे हैं, इसलिए अंतर -65535 .. +65535 में अंतर कहीं भी हो सकता है जो संभावित रूप से बड़ी कोडवार्ड लंबाई की ओर जाता है। यदि कुछ वाकई लंबे कोडवार्ड एक पंक्ति में होते हैं, तो मैं बफर ओवरफ्लो समस्याओं में भाग लेगा।

अद्यतन: मेरी मंच एक FPGA

+0

मुझे एक ही समस्या है, एफपीजीए पर नहीं, लेकिन एआरएम का उपयोग करके और मेरा डेटा 12 बिट्स है। आपने क्या उपयोग किया? – user4749

उत्तर

8

PNG मानक उपकरण का उपयोग कर मानक प्रारूप में मुफ़्त, मुक्त स्रोत, लापरवाह छवि संपीड़न प्रदान करता है। पीएनजी अपने संपीड़न के हिस्से के रूप में zlib का उपयोग करता है। libpng भी है। जब तक आपका प्लेटफ़ॉर्म बहुत असामान्य नहीं है, तब तक इस कोड को पोर्ट करना मुश्किल नहीं होना चाहिए।

+0

जेपीजी ग्रे स्केल स्कैन के लिए अधिक उपयुक्त नहीं होगा? –

+2

@ मैथ्यू, शीर्षक "लापरवाह" कहता है। जेपीईजी के लिए एक गैर-मानक लापरवाही मोड है, लेकिन मुझे लगता है कि बेहतर विकल्प पीएनजी होगा। –

+0

इसके अलावा, एक उचित पीएनजी फ़िल्टर का उपयोग करें, क्योंकि एलजेड/हफमैन 2-डी पूर्वानुमानित संपीड़न का फायदा नहीं उठाते हैं। http://www.w3.org/TR/PNG-Filters.html इसके अलावा, उपकरण अंत उपयोगकर्ता को प्रति नमूना बिट्स की एक कम संख्या चुनने की अनुमति दें, क्योंकि कम-से-कम महत्वपूर्ण बिट्स वास्तव में संपीड़ित नहीं हैं और डेटा को बढ़ाएंगे आकार काफी महत्वपूर्ण है। हार्डवेयर/प्रोटोकॉल स्तर पर, स्रोत पर अनियंत्रित बिट्स को केवल शून्य करने से संपीड़न में सुधार होगा। – rwong

3

कितने संसाधनों की क्या ज़रूरत है अपने एम्बेडेड मंच पर उपलब्ध है?

क्या आप zlib पोर्ट कर सकते हैं और gzip संपीड़न कर सकते हैं? सीमित संसाधनों के साथ भी, आपको LZ77 or LZ88 जैसे कुछ पोर्ट करने में सक्षम होना चाहिए।

+0

आपके सुझावों के लिए धन्यवाद। शब्दकोश-आधारित विधियों जैसे आपके द्वारा सुझाए गए कार्यों को हफमैन कोडिंग की तुलना में कार्य के लिए अधिक उपयुक्त लगता है। संसाधनों के बारे में, मैं इसे एक एफपीजीए पर लागू करना चाहता हूं। मेरे पास प्रोसेसर नहीं है। – geschema

3

छवि संपीड़न पुस्तकालयों की एक विस्तृत विविधता उपलब्ध है। उदाहरण के लिए, this page पीएनजी छवियों के लिए लाइब्रेरी/टूलकिट के अलावा कुछ भी नहीं सूचीबद्ध करता है। आपके लिए कौन सा प्रारूप/लाइब्रेरी सबसे अच्छा काम करता है, संभवतः आप उस विशेष संसाधन बाधाओं पर निर्भर करते हैं जो आप काम कर रहे हैं (विशेष रूप से, चाहे आपका एम्बेडेड सिस्टम फ्लोटिंग-पॉइंट अंकगणित कर सकता हो)।

2

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

ध्यान रखें कि यदि आपके पिछले सभी पिक्सल हैं, तो आपके पास पिछले पिक्सेल की तुलना में अधिक प्रासंगिक जानकारी है। यही कारण है, यदि आप X का मूल्य भविष्यवाणी करने के लिए कोशिश कर रहे हैं, तो आप हे पिक्सल का उपयोग करना चाहिए:

..OOO ...
..OX

इसके अलावा, आप पिछले उपयोग नहीं करना चाहते हैं पिक्सेल, बी, धारा निम्नलिखित स्थिति में भविष्यवाणी करने के लिए एक्स में:

OO ... बी < - पंक्ति के अंत
एक्स < - अगली पंक्ति का प्रारंभ

इसके बजाय आप अपनी भविष्यवाणी का आधार बनाना होगा ओएस पर

1

आपको 'हानि रहित' की आवश्यकता है?
यदि यह वास्तविक स्कैनर है तो बैंडविड्थ/रिज़ॉल्यूशन की एक सीमा है, भले ही यह +/- 64K मान भेज सके, यह आसन्न पिक्सेल के लिए 8 बिट्स से अधिक का अंतर रखने के लिए अनौपचारिक हो सकता है।

इस मामले में आप प्रत्येक पंक्ति के लिए प्रारंभ पिक्सेल मान कर सकते हैं और फिर प्रत्येक पिक्सेल के बीच अंतर कर सकते हैं।

यह चोटियों को धुंधला कर देगा लेकिन यह हो सकता है कि 'एन'बिट्स' से भी ज्यादा चोटें शोर हैं।

+0

यह एक दिलचस्प अवलोकन है, लेकिन दुर्भाग्य से मैं छवि पेंटिंग भौतिकी (यह इलेक्ट्रॉन माइक्रोस्कोपी के लिए है) के बारे में बहुत कम जानता है ताकि आसन्न पिक्सल के बीच के अंतर के बारे में धारणाएं हो सकें। – geschema

1

घंटी और wwhistles के साथ एक अच्छा LZ77/आरएलई संकर अद्भुत संपीड़न प्राप्त कर सकते हैं जो डिकंप्रेस करने के लिए काफी तेज़ है। लाइब्रेरी ओवरहेड की कमी के कारण वे छोटी फ़ाइलों पर बड़े, बैडर कंप्रेसर भी होंगे। एक अच्छे के लिए, लेकिन इसके बारे में जीपीएलडी इम्प्लांटेशन, PUCrunch

+0

पीयूसीआरंच एलजीपीएल के तहत है। –