बिटमैप
एक बिटमैप (बीएमपी) अनिवार्य रूप से आप जो वर्णन करते हैं, एक संख्या है जो पिक्सेल रंगों का प्रतिनिधित्व करती है। जैसे कुछ
1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1
दोषरहित संपीड़न
अब, चलो एक संपीड़न योजना को परिभाषित करते हैं। हमारी संपीड़न योजना में, हमारे पास संख्याओं के जोड़ होंगे। उदाहरण के लिए
3, 1, 1, 0, 7, 1
अब, मैं पहली बात यह बताना चाहता हूं कि यह संपीड़न योजना पहले सरणी के समान पिक्सेल का प्रतिनिधित्व करती है। पहले एरे में तीन 1s और उसके बाद एक सिंगल 0 है। और यही हम यहां प्रस्तुत कर रहे हैं। यह प्रारूप छोटा है, क्योंकि यह दो संख्याओं के साथ कई पिक्सेल का प्रतिनिधित्व करता है। बिटमैप प्रारूप में प्रत्येक पिक्सेल के लिए एक नंबर का उपयोग करना होता है।
जाहिर है यह एक छवि का कुछ हद तक सरलीकृत दृश्य है (उदाहरण के लिए यह सिर्फ एक पंक्ति है) और एक संपीड़न योजना। लेकिन उम्मीद है कि यह आपको यह देखने की अनुमति देता है कि कैसे एक संपीड़न योजना एक छवि के प्रारूप को बदलती है। यह एक GIF कैसे BMP से संबंधित है। जीआईएफ एक सरलीकृत योजना के बजाय लम्पेल-ज़िव-वेल्च नामक एक संपीड़न योजना का उपयोग करता है ।
हमने यहां जो वर्णन किया है वह दोषरहित संपीड़न योजना है। दोषरहित संपीड़न योजनाओं के साथ एक समस्या यह है कि कुछ इनपुट के लिए, एन्कोडेड फॉर्म मूल से अधिक लंबा हो सकता है। जैसे के लिए
1, 0, 1, 0, 1
एन्कोडिंग है
1, 1, 1, 0, 1, 1, 1, 0, 1, 1
खैर, यह बेकार था। हमने इनपुट को दो बार लंबा किया।
एक और दोषरहित संपीड़न
अब, आइए एक अलग संपीड़न योजना पर विचार करें। इस एक में, हम छवि को ओवरलेड सर्कल के रूप में दर्शाएंगे। प्रत्येक सर्कल के लिए, हम एक केंद्र, एक त्रिज्या और एक रंग को परिभाषित करेंगे।
हमारा पहला बिटमैप बन जाएगा
5, 5, 1, 3, 0, 0
यह हमारी पहली संपीड़न विधि के समान लंबाई है।
और हमारा दूसरा भी हो सकता है
2, 2, 1, 2, 1, 0, 2, 0, 1
यह तीन तत्व हैं जो मध्य तत्व पर केंद्रित हैं (जो कंप्यूटर की गिनती में नंबर 2 है, क्योंकि कंप्यूटर 0 पर गिनना शुरू करते हैं)। एक सर्कल में त्रिज्या 2 और रंग 1 है। फिर हम रंग 0 और त्रिज्या 1 का एक वृत्त जोड़ते हैं। अंत में, हमारा रंग 1 और त्रिज्या 0. है। चरणों में, यह होगा
1, 1, 1, 1, 1
1, 0, 0,
1, 1, 0, 1, 0, 1
या
2, 2, 1, 1, 0, 0, 3, 0, 0
यह एक ही प्रारंभिक सर्कल है लेकिन दो बिंदु सर्कल द्वारा कवर किया गया है। चरणों में, यह होगा
1, 1, 1, 1, 1
1, 0, 1, 1, 1
1, 0, 1, 0, 1
ये दोनों पहले एन्कोड किए गए संस्करण की तुलना में कम हैं, लेकिन मूल से अधिक लंबे हैं।
आप आश्चर्यचकित हो सकते हैं कि मैं मंडलियों के बारे में क्यों बात कर रहा हूं और सीमाएं नहीं। मुख्य कारण यह है कि मंडलियां वास्तविक दो आयामी छवियों का उपयोग करने के करीब हैं।
हानिपूर्ण संपीड़न
हमारे पास हानिपूर्ण संपीड़न योजनाओं की अवधारणा भी है। इन दोषरहित संपीड़न योजनाओं को मूल बिटमैप सरणी में वापस लाया जा सकता है। हानिपूर्ण संपीड़न योजनाएं प्रतिवर्ती नहीं हो सकती हैं।
आइए हमारी मंडलियों पद्धति के एक हानिपूर्ण संस्करण पर विचार करें। इसमें, हम एक सरल नियम का उपयोग करेंगे। हम 1 से कम त्रिज्या वाले किसी भी सर्कल को स्टोर नहीं करेंगे। इसलिए हमारे पिछले दो एन्कोडिंग में, हम इसके बजाय होगा
2, 2, 1, 2, 1, 0
तथा
२, २, १
जो फिर से पिक्सेल में परिवर्तित होते हैं
1, 0, 0, 0, 1
तथा
1, 1, 1, 1, 1
पहला संस्करण मूल से केवल एक तत्व लंबा है। दूसरा संस्करण छोटा है। दोनों मान्य हैं, इसलिए एल्गोरिथ्म दोनों को विकसित करने और छोटे को चुनने के लिए स्वतंत्र है।
हम निम्न गुणवत्ता वाले होने के साथ अधिक प्रतिबंधात्मक नियमों के साथ छवियों का वर्णन करते हैं।
वृत्ताकार आकृतियों के ओवरलैड संग्रह के रूप में छवियों का यह प्रतिनिधित्व संयुक्त फोटोग्राफिक विशेषज्ञ समूह या जेपीईजी प्रारूप कैसे काम करता है, इसके समान है। इसके आकार हलकों के बजाय दीर्घवृत्त हैं, लेकिन विचार समान है। हमारी सरलीकृत पद्धति के बजाय, यह असतत कोसाइन रूपांतरण का उपयोग छवियों को एनकोड करने के लिए करता है।
GIF के विपरीत, JPEG वास्तव में छवि का प्रतिनिधित्व करने का एक अलग तरीका है। GIF अभी भी पिक्सेल है। वे सिर्फ एक अलग तरीके से संग्रहीत होते हैं। JPEG आकार है। एक JPEG देखने के लिए, हम फिर आकार को पिक्सेल में बदलते हैं क्योंकि स्क्रीन कैसे काम करती है। सिद्धांत रूप में, हम एक स्क्रीन विकसित कर सकते हैं जो इस तरह से काम नहीं करती है। पिक्सल के बजाय, यह आकार दे सकता है ताकि जेपीईजी प्रारूप से बेहतर मिलान हो सके। बेशक, वह स्क्रीन बिटमैप को दिखाने में सक्षम नहीं होगी। BMP या GIF प्रदर्शित करने के लिए, हमें JPEG में कनवर्ट करना होगा।
यदि आप एक मानक जीआईएफ कन्वर्ट करते हैं, तो 300x300 पिक्सल कहें, इसे जेपीईजी में बदलें, और गुणवत्ता के तरीके को नीचे क्रैंक करें, जो आधार आकार का उपयोग करता है वह दिखाई देना चाहिए। कई जेपीईजी बहुत अधिक रिज़ॉल्यूशन छवि के साथ शुरुआत करके इन कलाकृतियों से बचते हैं।
JPEGs अच्छी तरह से स्केल करते हैं क्योंकि वे पिक्सेल के बजाय आकार होते हैं। इसलिए यदि आप 8000x8000 की छवि के साथ शुरू करते हैं, तो इसे JPEG में बदलें, और इसे 300x300 छवि के रूप में प्रदर्शित करें, जो अधिक विवरण खो गया था वह वैसे भी खो गया होगा। यदि आपने 8000x8000 बिटमैप को 300x300 बिटमैप और फिर जेपीईजी में परिवर्तित किया है, तो परिणाम अक्सर निम्न गुणवत्ता वाले होंगे।
एमपीईजी
हम अभी भी छवियों के बारे में बात कर रहे हैं। मूविंग पिक्चर एक्सपर्ट्स ग्रुप या एमपीईजी प्रारूप JPEG के रूप में संपीड़न के एक ही तरह का उपयोग करता है, लेकिन यह भी कुछ और ही है। जबकि वीडियो करने का एक सरल तरीका अभी भी छवियों का एक क्रम भेजना है, एमपीईजी वास्तव में एक फ्रेम भेजता है, इसके बाद कुछ संख्या में फ्रेम लिस्टिंग में परिवर्तन होता है, और एक अंतिम फ्रेम के साथ परिष्करण होता है। क्योंकि अधिकांश फ़्रेम पिछले फ्रेम के समान हैं, इसलिए परिवर्तनों की सूची अक्सर एक दूसरी छवि की तुलना में छोटी होती है।
क्रम सामान्य रूप से इतना लंबा नहीं है, पांच फ्रेम कहते हैं। लेकिन यह धारा को इससे छोटा बनाने में मदद करता है अन्यथा यह अन्यथा होगा।
सरलीकरण
मैंने बहुत उपेक्षा की है। मेरी छवियों में केवल दो रंग (1-बिट) हैं, 8-बिट छवि के 256 नहीं और निश्चित रूप से 32-बिट छवि के 4,294,967,296 नहीं हैं। 8-बिट छवियों के साथ भी, ध्यान दें कि आप अक्सर छवि के लिए अलग-अलग पट्टियाँ चुन सकते हैं। तो एक ही क्रम वाले दो 8-बिट बिटमैप उन छवियों का प्रतिनिधित्व कर सकते हैं जो अलग-अलग दिखती हैं (एक ही आकार लेकिन अलग-अलग रंग)।
मेरी छवियाँ एकल पंक्तियाँ हैं, दो आयामी नहीं हैं। अधिकांश छवियों में एक विशिष्ट पंक्ति आकार संग्रहीत होगा, जिससे सरणियों को दो-आयामी बनाया जा सकता है।
मैंने वास्तविक एन्कोडिंग का प्रतिनिधित्व करने की कोशिश नहीं की है। वे मेरे द्वारा उपयोग किए जाने वाले साधारण से बहुत अधिक जटिल हैं। मैंने ऐसा इसलिए किया क्योंकि मैं इस पोस्ट में एन्कोडिंग का वर्णन करने में सक्षम होना चाहता था। मुझे विश्वास नहीं है कि मैं लेम्पेल-ज़िव को एक ही उत्तर में अधिक जटिल लेम्पेल-ज़िव-वेल्च शोधन समझा सकता हूं। और मुझे समझ में नहीं आता है कि फूरियर किसी भी लंबाई में उन्हें समझाने के लिए पर्याप्त रूप से रूपांतरित करता है।
यह वास्तविक छवि से निपटने का एक सरलीकृत संस्करण है। हालांकि, मुझे लगता है कि उपदेशात्मक उद्देश्यों के लिए, आवश्यक बिंदुओं को मारते हुए भी अधिक जटिल वास्तविकता की तुलना में समझना आसान है।