क्या सभी डिजिटल छवियां अंततः 0 - 255 के बीच केवल पिक्सेल मान नहीं हैं?


56

मेरे पास छवियों के बारे में कुछ अविश्वसनीय रूप से बुनियादी (बेवकूफ) प्रश्न हैं; विशेष रूप से, छवि प्रारूप और पिक्सेल मान।

मुझे माफ कर दो, मैं फोटोग्राफर नहीं हूं। मैं सिर्फ एक व्यक्ति हूं जो छवियों के साथ काम करता है, और मेरे लिए, वे सिर्फ पंक्तियों और संख्याओं के स्तंभ हैं।

मेरे प्रश्न हैं:

यदि कोर में, तस्वीरें पिक्सेल मूल्यों के केवल 3 चैनल हैं [0, 255] एक्स आरबीजी, तो संभवतः किसी भी दो छवियों प्रारूपों के बीच कोई अंतर कैसे हो सकता है? मेरा मतलब है, क्या एक TIFF से अलग रॉ बनाता है - ये सभी 0 - 255 के बीच के मूल्यों तक सीमित नहीं हैं? एक संख्या एक संख्या है - क्या केवल एक सेट प्रारूप संभव नहीं होना चाहिए? या, एक ही ऊंचाई और चौड़ाई के साथ किसी भी दो छवियों को एक ही फ़ाइल आकार में बंद नहीं होना चाहिए?

इसके अलावा, एक संख्यात्मक दृष्टिकोण से, 16-बिट छवियों की तरह 32-बिट छवियों से अलग कुछ क्या बनाता है? फिर से, एक छवि 0 -255 के बीच पूर्णांक मानों के साथ एक सरणी है।

इस परिप्रेक्ष्य के साथ जारी रखना कि कंप्यूटर के फाइल सिस्टम पर 0 - 255 के बीच पूर्णांक का केवल 3-चैनल सरणी है, उदाहरण के लिए, जेपीजी जैसे एक हानिपूर्ण प्रारूप में एक छवि को संपीड़ित करने का क्या मतलब है? कहें कि संपीड़न एल्गो कुछ पिक्सेल मूल्यों को 254 से 255 या जो भी बदलता है। इसलिए? यह फ़ाइल आकार में कोई बचत कैसे प्रदान करता है या दृश्य गुणवत्ता पर कोई प्रभाव डालता है?

मुझे पता है कि छवि डेटा को संग्रहीत करने के कई अलग-अलग तरीके हैं। लेकिन मैं एक बुनियादी 3-चैनल आरबीसी छवि के अलावा और कुछ के बारे में नहीं पूछ रहा हूं। मुझे पता है कि अगर कोई मुझे इनमें से एक को सौंपता है, तो मेरे पास अब एक संख्या है। मेरे पास यह जानने का कोई कारण नहीं है कि संख्याओं की एक सरणी संभवतः 0 से 255 तक की संख्या के किसी अन्य सरणी से भिन्न हो सकती है। मुझे आशा है कि यह समझ में आता है। यह प्रश्न RAW प्रारूप तक सीमित नहीं है! बल्कि, यह पिक्सेल मूल्यों के किसी भी सरणी के बारे में है


32
मुझे आश्चर्य है कि अगर यह गलत धारणा उच्च स्तर के साथ काम करने से आती है। क्या आप matlab या किसी अन्य टूल के साथ फाइल पढ़ रहे हैं? मेरा विश्वास करो, यदि आप कच्चे फ़ाइल स्तर पर एक टीआईएफएफ, पीएनजी या जेपीजी फ़ाइल खोलते हैं और पढ़ते हैं, तो आपको एक अच्छी और साफ आरजीबी मैट्रिक्स के साथ समाप्त होने से पहले आपको बहुत सारे काम करने होंगे।
पाइप

2
यह मदद करेगा अगर ओपी थोड़ा और संदर्भ प्रदान कर सके। ईजी इमेज प्रोसेसिंग कोड से संबंधित है?
रीमेक

1
संपादन के बारे में: यदि आपको संख्याओं की एक सरणी दी गई है, तो बस उसी के साथ काम करें। अन्य सरणी कहाँ है? यदि आपके पास तुलना करने के लिए 2 सरणियाँ हैं तो यह एक अलग कहानी है। वे मान काफी करीब हो सकते हैं जो मानव आंख के समान दिखते हैं। और एक सरणी दिया, एक हानिपूर्ण एन्कोडिंग के बाद, सरणी को डिकोड करने से आप कभी भी मूल सरणी नहीं दे पाएंगे, लेकिन एक पर्याप्त एक
phuclv

3
सॉफ्टवेयर पैकेजों से सावधान रहें, जो TIFF, FITS और अन्य नॉनकंप्रेस्ड इमेज को आयात करने का उद्देश्य रखते हैं। आधार MATLAB और अजगर उपकरण सहित कई ऐसे पैकेज, स्वचालित रूप से स्रोत आकार की परवाह किए बिना 8 बिट्स को डेटा ट्रिम करते हैं। यदि आप इससे बचना चाहते हैं, तो आपको विशेष कार्य / पुस्तकालय खोजने होंगे या अपने स्वयं के उपकरण रोल करने होंगे।
कार्ल विटथॉफ्ट

2
@ मोनिका हेडडेक: पहले से ही अच्छे उत्तरों पर एक गुच्छा है जो आपको सीधे इस विचार पर सेट करता है कि नहीं, एक छवि सरल नहीं है RGB255 मानों का एक पिक्सेल सरणी है, लेकिन मुझे समझ में नहीं आता कि आप तर्क को क्यों नहीं समझते हैं संकुचित स्वरूपों के लिए। वे भंडारण या पारगमन में या तो डेटा को बचाने के लिए हैं। यदि सभी चित्र सिर्फ RGB255 ट्रिपल के होते हैं, तो भी संपीड़न फायदेमंद होगा।
गैबोर

जवाबों:


72

क्षमा करें, लेकिन आपका मूल आधार गलत है: एक छवि को RBG पिक्सेल की एक सरणी के रूप में 8 बिट प्रति मान के साथ एन्कोड किया जा सकता है, लेकिन कई अन्य तरीके भी हैं:

  • एक बिट के साथ एक चैनल / चैनल (शुद्ध काले और सफेद),
  • एक्स बिट / चैनल के साथ एक चैनल (ग्रेस्केल प्रारूप, x आमतौर पर 8 या 16 होगा, 256 या 65536 मान दे रहा है),
  • विभिन्न पैलेट-आधारित प्रारूप (cf.GIF)
  • पूर्ण-रंग के साथ (कम से कम सिद्धांत में) जितने भी चैनल आप किसी भी आवश्यक बिट गहराई के साथ चाहते हैं।

और यह छवि के लिए है जैसा कि संपादन / देखने के दौरान कंप्यूटर की रैम में संग्रहीत है। मैं विभिन्न RAW छवि प्रारूपों को अनदेखा कर रहा हूं जो मौजूद हैं (यहां और इस पोस्ट के बाकी हिस्सों में)।

फोटोग्राफी के लिए , सबसे आम 8, 16 या 32 बिट / चैनल (आमतौर पर पूर्णांक के साथ 3 चैनल हैं, लेकिन कम से कम कुछ प्रोग्राम 32-बिट फ्लोटिंग पॉइंट नंबर के साथ आंतरिक रूप से काम करते हैं)। अक्सर एक 4th चैनल (अल्फा) होता है, खासकर जब प्रोग्राम परतों के उपयोग की अनुमति देता है। और कहीं, छवि सरणी के आयामों को संग्रहीत करने की आवश्यकता है।

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

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

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

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

यह डिस्क पर जानकारी संग्रहीत करने के लिए पहले से ही बहुत सारे तरीके देता है, लेकिन जो भी तरीका आप चुनते हैं, छवि को लोड करने पर सही व्याख्या की अनुमति देने के लिए प्रारूप को अच्छी तरह से निर्दिष्ट किया जाना चाहिए।

तब उदाहरण के लिए दोषरहित संपीड़न तकनीकों में एक निरंतर विकास होता है, जिसे मौजूदा प्रारूप हमेशा संभाल नहीं सकते हैं।

इसलिए हम विभिन्न प्रकार के फ़ाइल स्वरूपों के साथ संग्रहित सूचनाओं की निष्ठा, डिस्क स्थान पर कब्जा करने और पढ़ने, लिखने और संचार की गति के बीच विभिन्न ट्रेड-ऑफ के साथ समाप्त होते हैं (एक गैर-संकुचित TIFF और एक सभ्य गुणवत्ता के आकार की तुलना करें) ।


संपादित प्रश्न को देखने के बाद, कुछ अतिरिक्त पहलू:

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

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

  • कच्ची छवियों में आमतौर पर प्रति पिक्सेल 1 रंग होता है , और पिक्सेल आमतौर पर 4 पिक्सल के 2 हरे, 1 लाल और 1 नीले पिक्सेल प्रति वर्ग के साथ बायर सरणी में व्यवस्थित होते हैं । मान दृश्य तीव्रता के साथ आनुपातिक हैं (बहुत कम और बहुत अधिक मूल्यों को छोड़कर)।
  • संसाधित छवियों को 3 संख्यात्मक मूल्यों वाले रिकॉर्ड के 2 डी सरणी के रूप में या रंग विमानों (3 डी सरणियों, प्रत्येक आर, जी, बी के लिए एक) के रूप में व्यवस्थित किया जा सकता है। इसके अलावा, मान आमतौर पर दृश्य तीव्रता के साथ आनुपातिक नहीं होते हैं । इससे भी बदतर, पिक्सेल मूल्यों और दृश्य तीव्रता के बीच सटीक संबंध छवि के प्रसंस्करण पर निर्भर करता है। और रंगों के बीच संतुलन को मानव आंख की प्रतिक्रिया के अनुरूप समायोजित किया गया है (व्हाइट बैलेंस, लाल और नीले हरे के सापेक्ष प्रवर्धित हैं)।

इसलिए यदि आपको पिक्सेल के प्रति 3 रंग मानों के साथ एक कच्ची छवि मिलती है, तो उस कच्ची छवि का पहले से ही कुछ उपचार होता है (कम से कम या तो डीमोशिंग , या 4 कच्चे पिक्सेल से 1 छवि पिक्सेल के लिए साधारण बिनिंग)। चाहे वह स्वीकार्य हो, आपके आवेदन पर निर्भर करेगा।


मैं छवियों का प्रतिनिधित्व करने के तरीकों की विविधता में थोड़ा कम दिलचस्पी लेता हूं, लेकिन इसके बजाय, अगर मुझे संख्याओं के दो 3 चैनल मैट्रिसेस दिए गए हैं, तो इनमें से किसी एक को दूसरे की तुलना में क्या अलग बनाता है? टीआईएफएफ और रॉ के बीच क्या अंतर है, अगर वे दोनों 3 आयाम सरणियाँ हैं?
मोनिका हेडडेक

4
शायद दिलचस्पी की बात है, मैं उलझन में था जब आपने कहा था कि 16-बिट छवियां 16 बिट प्रति चैनल हैं। कंप्यूटर ग्राफिक्स की दुनिया में, सभी 3 चैनलों (आमतौर पर 5 लाल, 6, हरा, 5 नीला) के योग के लिए 16-बिट छवियां 16 बिट थीं। मैं सिर्फ एक टिप्पणी में इस बात को इंगित करना चाहता था, ताकि कोई व्यक्ति जो 16-बिट रंग देख रहा है, वह जानता है कि उस शब्द के दो अर्थ हैं, जो इस बात पर निर्भर करता है कि इसका उपयोग कौन कर रहा है।
Cort Ammon

"4 32-बिट चैनलों की तुलना में एक 8-बिट चैनल में हेरफेर करने के लिए बहुत तेज"। क्या आपका मतलब "4 8-बिट चैनलों की तुलना में 32-बिट चैनल में हेरफेर करने के लिए बहुत तेज" नहीं है?
l0b0

1
@MonicaHeddneck यदि किसी एक मैट्रिस में RGB डेटा होता है, जबकि दूसरे में (जैसे) HSV डेटा होता है, तो निश्चित रूप से, दोनों सरणियों का आयाम और बिट गहराई समान होती है, और जब एक डिस्प्ले डिवाइस को प्रदान किया जाता है तो वे समान दिखेंगे ( + ) लेकिन दो सरणियों में संग्रहीत डेटा निश्चित रूप से समान नहीं है। ( + ) वास्तविकता में वे बिल्कुल एक जैसे नहीं दिखेंगे, जबकि 888RGB और 888HSV दोनों में 2 ^ 24 "अंक" हैं, अपने-अपने गेम में दो बिंदु सेट के बीच एक-से-एक मैपिंग नहीं है। हालांकि, व्यवहार में यह मानवीय आंखों के साथ अंतर को देखने के लिए शायद ही मुश्किल होगा।
10'18

वास्तव में hdr 32 फ्लोटिंग बिट कलर का बिंदु जो कि 0 से 1 में एन्कोड नहीं किया गया है, लेकिन 0 से कुछ भी यदि आपका वास्तव में ऐसा करने जा रहा है तो इसके बजाय पूर्णांक का उपयोग करें। वास्तविक प्रकाश की तरह वास्तव में कोई ऊपरी सीमा नहीं है। लेकिन आपको सिर्फ इसका एक टुकड़ा दिखाई देगा। यह कई कारणों से उपयोगी है, लेकिन अगर आप उन्हें 3 डी के प्रतिबिंबों में उदाहरण के लिए मुकदमा करते हैं, तो सच्ची ऊर्जा अभी भी कब्जा कर ली गई है जो आकाश जैसी चीजों के लिए बहुत मायने रखती है और उदाहरण के लिए 20% की चयनात्मकता
joojaa

48

यदि कोर में, तस्वीरें पिक्सेल मूल्यों के सिर्फ 3 चैनल हैं [0, 255] एक्स आरबीजी,

लेकिन तस्वीरें "मूल में" भी "पिक्सेल मूल्यों के सिर्फ 3 चैनल नहीं हैं ।" कंप्यूटर स्क्रीन आमतौर पर आरजीबी पिक्सल की एक सरणी से बनी होती हैं, इसलिए यदि आप कंप्यूटर स्क्रीन पर एक छवि प्रदर्शित करना चाहते हैं, तो आपको किसी बिंदु पर, आरजीबी पिक्सल की एक सरणी में जो भी छवि डेटा है, उसे मैप करें, लेकिन वह डेटा केवल है छवि डेटा का एक विशेष प्रतिपादन। छवि में डेटा पिक्सेल मानों की एक धारा से युक्त नहीं हो सकता है। किसी छवि से पिक्सेल मान प्राप्त करने के लिए, आपको पता होना चाहिए कि डेटा कैसे स्वरूपित किया जाता है।

फिर किसी भी दो छवियों स्वरूपों के बीच कोई अंतर कैसे हो सकता है? मेरा मतलब है, क्या एक TIFF से अलग रॉ बनाता है - ये सभी 0 - 255 के बीच के मूल्यों तक सीमित नहीं हैं?

वे दो अच्छे उदाहरण हैं, क्योंकि न तो उन स्वरूपों में से एक आरजीबी मूल्यों का आयताकार सरणी रखता है।

रॉ बिल्कुल भी एक प्रारूप नहीं है - यह उन फाइलों के लिए एक प्रकार का कैच-ऑल नेम है, जिसमें इमेज सेंसर से सीधे रिकॉर्ड किया गया डेटा होता है। इसलिए, RAW फ़ाइल में ऐसे मान हो सकते हैं जो विभिन्न सेंसर साइटों से पढ़े गए वोल्टेज का प्रतिनिधित्व करते हैं। उन साइटों की तरह छवि पिक्सल है, लेकिन वे कर रहे हैं नहीं आरजीबी पिक्सेल। RAW फ़ाइल से RGB पिक्सेल प्राप्त करने के लिए, आपको उस डेटा की सेंसर, समय पर कैमरा सेटिंग्स, आदि के बारे में जानकारी के संदर्भ में व्याख्या करनी होगी। दूसरे शब्दों में, आप एक hex संपादक में RAW फ़ाइल खोल सकते हैं। और जो आप चाहते हैं वह सब देखें, लेकिन आपको एक भी RGB वैल्यू नहीं मिलेगी।

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

एक संख्या एक संख्या है - क्या केवल एक सेट प्रारूप संभव नहीं होना चाहिए?

नहीं। बहुत सारे अलग-अलग छवि प्रारूप हैं क्योंकि लोग एक-दूसरे की जरूरतों का एक अलग सेट पेश करते हैं। JPEG का हानिपूर्ण संपीड़न बहुत छोटी छवि फ़ाइलों को प्राप्त करने के लिए बहुत अच्छा है, लेकिन यह उन छवियों के लिए अच्छा नहीं है जिन्हें कई बार संपादित करना होगा। कुछ प्रारूपों का उपयोग इंटरलेसिंग है, जो यह बहुत तेजी से कई अलग अलग प्रस्तावों पर छवि को पढ़ने के लिए बनाता है। और इसी तरह ... प्रत्येक प्रारूप फायदे और समझौते का अपना मिश्रण प्रदान करता है।

या, एक ही ऊंचाई और चौड़ाई के साथ किसी भी दो छवियों को एक ही फ़ाइल आकार में बंद नहीं होना चाहिए?

नहीं, यह भयानक होगा। यदि हर छवि फ़ाइल का आकार अनिवार्य रूप से width * height * 3(24-बिट रंग मानकर) होना था, तो आप बहुत सारे संग्रहण स्थान बर्बाद कर देंगे । अधिकांश तस्वीरों में बहुत अधिक अतिरेक होता है, अर्थात ऐसे क्षेत्र जहां एक ही रंग को कई बार दोहराया जाता है। भंडारण स्थान को बचाने के लिए, यह अक्सर उस अनावश्यक जानकारी को खत्म करने के लिए समझ में आता है। ऐसा करने का एक तरीका, उदाहरण के लिए, लंबाई एन्कोडिंग चलाया जाता है, या RLE। उदाहरण के लिए, यदि आपके पास 4195 लगातार पिक्सेल का एक क्षेत्र है जो सभी सफेद हैं, तो यह एन्कोड करने के लिए बहुत अधिक कुशल है कि "अगले 4195 पिक्सल सभी के रूप में {255, 255, 255}" हैं, बस के बजाय कई सफेद पिक्सल को स्टोर करने में। फ़ाइल। आरएलई वास्तव में कुछ छवि प्रारूपों में उपयोग किया जाता है, लेकिन कई प्रारूपों में बहुत अधिक परिष्कृत योजनाएं होती हैं जो बहुत अधिक स्थान बचाती हैं, और इसका मतलब है कि आप हार्ड ड्राइव या मेमोरी कार्ड पर कई और छवियां संग्रहीत कर सकते हैं। यह किसी और को छवि भेजने के लिए बहुत तेज़ बनाता है।

इस परिप्रेक्ष्य के साथ जारी रखना कि कंप्यूटर के फाइल सिस्टम पर 0 - 255 के बीच पूर्णांक का केवल 3-चैनल सरणी है, उदाहरण के लिए, जेपीजी जैसे एक हानिपूर्ण प्रारूप में एक छवि को संपीड़ित करने का क्या मतलब है?

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

कहें कि संपीड़न एल्गो कुछ पिक्सेल मूल्यों को 254 से 255 या जो भी बदलता है। इसलिए? यह फ़ाइल आकार में कोई बचत कैसे प्रदान करता है या दृश्य गुणवत्ता पर कोई प्रभाव डालता है?

ऊपर मेरे RLE उदाहरण पर विचार करें। मान लें कि आपके पास एक फ़ोटो है जिसमें एक बड़ी खाली दीवार शामिल है, इसलिए आपकी फ़ोटो के बड़े क्षेत्र सभी एक ही रंग के हैं, सिवाय इसके कि थोड़े गहरे रंग के पिक्सेल का बिखरना है, छवि में मुश्किल से ध्यान देने योग्य भी। वे पिक्सेल कम्प्रेशन की प्रभावशीलता को कम करते हैं। इसके बजाय केवल यह कहने में सक्षम होने के लिए "अगले 500,000 पिक्सेल सभी {243, 251, 227} हैं," आपको लम्बाई को चलाना होगा और भी कई छोटे खंडों को सांकेतिक शब्दों में बदलना होगा, क्योंकि हर बार जब आप उन थोड़े अलग पिक्सलों में से एक में दौड़ते हैं। यदि आप संपीड़न एल्गोरिदम को छोटे परिवर्तन करने की अनुमति देते हैं, तो शायद किसी भी पिक्सेल को 1% या 2% से अधिक नहीं बदल सकता है, तो आप छवि को पूरी तरह से बदलने के बिना बहुत अधिक संपीड़न अनुपात प्राप्त कर सकते हैं। यह एक व्यापार है: आप ' फ़ाइल आकार में एक बड़ी कमी के बदले मूल छवि में थोड़ी मात्रा में जानकारी देना। ठीक उसी तरह जहां आप उस रेखा को खींचना चाहते हैं, परिवर्तन हो सकता है, इसलिए जेपीईजी जैसे हानिरहित प्रारूप उपयोगकर्ता को यह चुनने देते हैं कि वह किस स्तर का संपीड़न चाहता है।


1
किसी जटिल विषय की बहुत स्पष्ट और व्यापक व्याख्या के लिए तैयार! मुझे लगता है कि मैंने इससे बहुत कुछ सीखा है। मैं सोच रहा था कि अगर दोषरहित संपीड़न का प्रबंधन करने के लिए एक प्रभावी तरीका लंबाई-सांकेतिक शब्दों में बदलना होगा, लेकिन तब अनिवार्य रूप से छवि के माध्यम से दूसरा पास-प्रति-पिक्सेल अपवादों में जोड़ने के लिए आवश्यक है। कुछ ऐसा "23 से - 400 काला है" और फिर "302 सफेद है" जो कि एक पिक्सेल है। 23 के बजाय - 301 काला है, 302 काला है, 303 - 400 काला है। मुझे संदेह है कि यह वास्तव में कम से कम एक संपीड़न प्रारूप इसे कैसे व्यवहार करता है।
Ruadhan2300

1
@ Ruadhan2300 - वास्तव में हैं। उदाहरण के लिए देखें: en.wikipedia.org/wiki/Lossless_JPEG जो प्रत्येक पिक्सेल के रंग की भविष्यवाणी करने की एक विधि का उपयोग करता है (भले ही रनिंग एन्कोडिंग की तुलना में कुछ अधिक जटिल हो), और फिर उस भविष्यवाणी और वास्तविक पिक्सेल मान के बीच अंतर को एन्कोड करता है।
जूल्स

18

के अलावा @ Remco के शानदार जवाब , मैं जोड़ने के लिए क्यों (मोटे तौर पर) एक ही उद्देश्य के लिए विभिन्न codecs देखते हैं चाहता हूँ।

Codecs इसके लिए डिज़ाइन किए गए हैं:

  • दोषरहित हो बनाम हानिपूर्ण
  • तेजी से बनाम बनाम फ़ाइलें कम करें
  • असममित बनाम सममित एन- / डिकोडिंग
  • सॉफ्टवेयर के साथ संगत रहें
  • विभिन्न संपीड़न स्तरों / स्थितियों में अवधारणात्मक रूप से लगभग दोषरहित रहें
  • अन्य कोडेक्स की पेशकश सहित अन्य विशेषताएं हैं:
    • रॉयल्टी-मुक्त होना
    • परतों के लिए समर्थन
    • अल्फा-चैनल (जैसे RGBA) / पारदर्शिता के लिए समर्थन
    • तेजी से वेब दृश्य प्रदान करते हैं
    • उच्च (एर) बिट गहराई का समर्थन करें
    • समर्थन कई रंग रिक्त स्थान (RGB / CMYK)
    • मेटाडेटा / संस्करण / के लिए समर्थन ...

उनमें से कुछ चीजें परस्पर अनन्य हैं। और उसके कारण, हम कोडेक्स की एक भीड़ के साथ छोड़ दिए जाते हैं।


कुछ उदाहरण

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

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

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

पीएनजी एक और व्यापक रूप से ज्ञात प्रारूप है - यह दोषरहित है और अल्फा-चैनलों का समर्थन करता है, लेकिन यह गैर-आरजीबी रंग रिक्त स्थान (जैसे सीएमवाईके) के लिए समर्थन प्रदान नहीं करता है। इसलिए, यह एक "ऑनलाइन केवल" -फॉर्म है।

फिर ओपनएक्सआर की तरह वीएफएक्स प्रारूप हैं । वे सभी गुणवत्ता और गति के चारों ओर घूमते हैं: ओपनएक्सआरआर दोषरहित है, 64 बिट तक का समर्थन करता है, और तेजी से एनकोड / डीकोड करता है। यह मुख्य रूप से वीएफएक्स उद्योग में मध्यवर्ती प्रारूप के रूप में उपयोग किया जाता है।

टीआईएफएफ एक और दोषरहित प्रारूप है जो फोटोग्राफरों के साथ काफी लोकप्रिय है। संपीड़न के लिए, यह कोई भी / ज़िप / RLE / LZW / JPEG प्रदान नहीं करता है। यह 32 बिट तक सपोर्ट करता है। अपने चयन योग्य संपीड़न के साथ, यह काफी अनुकूल है, फिर भी इसकी दोषरहितता के कारण, यह एक ऑफ़लाइन-प्रारूप से अधिक है।

HEIF नवीनतम छवि कोडेक्स में से एक है। यह HEVC / h.265 के समान संपीड़न का उपयोग करता है और इसलिए JPEG से बेहतर संपीड़न अनुपात देने की अपेक्षा की जाती है। हालांकि, क्योंकि यह काफी नया है और क्योंकि यह पेटेंट के अधीन है, यह के रूप में मोटे तौर पर समर्थित नहीं है किसी भी ऊपर की।

रॉ छवियां देखें वास्तविक चित्र भी नहीं हैं, वास्तव में: वे कच्चे (इसलिए नाम) सेंसर रीडआउट डेटा के लिए एक कंटेनर के अधिक हैं। केवल सॉफ्टवेयर के साथ जो डेटा की व्याख्या करना जानता है, चित्र प्राप्त करना संभव है। यही कारण है कि RAW कन्वर्टर्स जैसे लाइटरूम / कैप्चर वन / डार्कटेबल / ... को नए कैमरों का समर्थन करने के लिए अपडेट की आवश्यकता है जो कैनन के लिए * .CR2 जैसे पहले से ही निर्दिष्ट कंटेनरों का उपयोग करते हैं। यही कारण है कि एक 14bit RAW एक 32bit TIFF से अधिक संपादन विकल्प प्रदान करता है जिसे आपने उसी RAW से निर्यात किया था।


व्यवधान: दोषरहित बनाम हानिपूर्ण

मुझे अभी भी यकीन नहीं है कि आप वास्तव में क्या पूछ रहे हैं, इसलिए मैंने सोचा कि दोषरहित बनाम हानिपूर्ण के बारे में एक छोटी सी व्याख्या को जोड़ने के लिए इसे चोट नहीं पहुंचेगी।

दोषरहित संपीड़न डेटा को संपीड़ित करने के लिए रन-लंबाई एन्कोडिंग (RLE) / हफ़मैन कोडिंग / ... करके काम करता है । डेटा को स्वयं बदला नहीं गया है, बल्कि एक छोटे पैकेज में सहेजा गया है। उदाहरण के लिए, RLE को लें: कहें, हमारे पास एक R- चैनल बिटस्ट्रीम (पिक्सेल 0,0से पिक्सेल तक 0,11) है 255,255,255,255,255,215,215,235,100,000,000,000- RLE इसे एन्कोड करेगा 52552215123511003000- यह बहुत छोटा है, और चूंकि हम जानते हैं कि यह 4 अंकों के समूहों में सहेजा गया है और यह पहला अंक काउंटर है और अंतिम तीन अंक मूल्य हैं, फिर हम पूर्ण का पुनर्निर्माण कर सकते हैं 255,255,255,255,255,215,215,235,100,000,000,000

हानिपूर्ण संपीड़न , दूसरी ओर, दोषरहित की तुलना में आगे भी सेक करने की कोशिश करता है। ऐसा करने के लिए, हानिपूर्ण कोडेक्स आमतौर पर उन चीजों को हटाने की कोशिश करते हैं जो हमारी धारणा नहीं पाती हैं। उदाहरण के लिए, YUV( YCbCrवास्तव में) मॉडल जेपीईजी (और लगभग हर वीडियो कोडेक) का उपयोग करता है: Y = Luminance, Cb = Chrominance Blue, Cr = Chrominance Red। एक मानव 4:2:0(प्रत्येक पिक्सेल में एक ल्यूमिनेंस मान नहीं है, लेकिन रंगों को 2x2 के ब्लॉक में वैकल्पिक रूप से सहेजा जाता है) और 4:4:4(प्रत्येक पिक्सेल में ल्यूमिनेंस और दोनों रंग चैनल) एन्कोडेड चित्र हैं। यह हमारी आंख के फिजियोलॉजी के कारण है : हम रंग में अंतर नहीं देख सकते हैं और साथ ही हम प्रकाश में अंतर देख सकते हैं।

यह ज्यादातर समय अच्छा काम करता है, लेकिन इसकी तुलना एक एमपी 3 फ़ाइल से करें: लगभग कोई भी व्यक्ति 192kbps और 320kbps के बीच अंतर नहीं कर सकता है, लेकिन 64kbps से नीचे चला जाता है और चीजें जल्दी खराब हो जाती हैं। इसके अलावा, पुन: एन्कोडिंग गुणवत्ता को और कम कर देगा, क्योंकि अवांछित कलाकृतियां दिखाई दे सकती हैं (जैसे जेपीईजी में, उच्च गुणवत्ता वाले एन्कोडिंग से छोटे ब्लॉक को आगे के एन्कोडिंग में चित्र के विवरण के रूप में माना जाएगा)।


जमीनी स्तर

यदि आप छवि प्रारूपों या उनकी विशेषताओं के बारे में परवाह नहीं करते हैं, तो दोनों में से कोई एक ठीक होगा। उच्च पर्याप्त गुणवत्ता सेटिंग्स के साथ, यह संभव और उम्मीद है कि आप उनके बीच अंतर भी नहीं देखेंगे।

यदि, हालांकि, आपको किसी विशिष्ट सुविधा की आवश्यकता है, तो हो सकता है (और लगभग निश्चित रूप से: इच्छाशक्ति) एक ऐसा कोडेक हो जो कि कवर किया गया हो।


मैं कोडेक गुणों की आपकी सूची में दो चीजें जोड़ूंगा: 1. प्रगतिशील प्रतिपादन (आजकल बहुत उपयोग नहीं किया जाता है, लेकिन पीएनजी में एक बड़ी विशेषता थी) 2. एनिमेशन (एनिमेटेड पीएनजी, जेपीईजी, जीआईएफएस हैं ...)।
सुल्तान

@ सुल्तान मैं इसे जोड़ने के बारे में सोचूंगा, हालांकि प्रगतिशील - जैसा कि आप कहते हैं - एक ऐसी चीज नहीं है जिसे आज महत्वपूर्ण माना जाता है, और एनीमेशन एक ऐसी विशेषता नहीं है जो फोटोग्राफी की चिंता करती है। वैसे भी: इनपुट के लिए धन्यवाद!
फ्लोलिलो

2
"केवल उस सॉफ़्टवेयर के साथ जो जानता है कि डेटा की व्याख्या कैसे की जा सकती है, चित्र प्राप्त करना संभव है" जो कि किसी भी छवि प्रारूप के लिए सही है। यदि सॉफ़्टवेयर, JPEG डेटा की व्याख्या, कहना नहीं जानता है, तो वह इसे छवि के रूप में प्रदर्शित या संसाधित नहीं कर पाएगा। कच्ची फाइलें डेटा संग्रहीत करती हैं जो उससे छवि को फिर से संगठित करने की अनुमति देती है और इसे एक निश्चित तरीके से संरचित किया जाता है (संभवतः कैमरा मॉडल के लिए विशिष्ट है, हालांकि)। तो यह एक छवि प्रारूप है, यह सिर्फ एक प्रारूप नहीं है, लेकिन "कैमरा एक्स का कच्चा प्रारूप" है।
n0rd

1
@ n0rd का। लेकिन मेरे 5D एमके III से जेपीईजी एक ही विनिर्देशों (प्रतीत होता है) को Nikon P7000 या EOS E6 के रूप में पूरा करते हैं। .CR2वास्तव में सिर्फ यह कहता है "मुझे देखो, मैं कुछ कैनन कैमरा की रॉ फ़ाइल हूँ! मुझे पढ़ने की हिम्मत करो!" - यह मेरी बात होनी चाहिए थी, हालांकि आपने कहा था कि ज्यादा साफ भाषा में।
फ्लोलिलो

कुछ इमेजफॉर्म में LAB और XYZ स्पेस मौजूद हैं।
joojaa

10

यदि कोर में, तस्वीरें पिक्सेल मूल्यों के केवल 3 चैनल हैं [0, 255] एक्स आरबीजी

यह एक गंभीर रूप से टूटी हुई धारणा है और आपके बाकी का सवाल बस इससे अलग हुए बिना जवाबदेह नहीं है।

मेरा मतलब है, क्या एक TIFF से अलग रॉ बनाता है - ये सभी 0 - 255 के बीच के मूल्यों तक सीमित नहीं हैं?

शब्द "रॉ" दो अलग-अलग चीजों को संदर्भित कर सकता है, एक "कैमरा रॉ" छवि या एक फ़ाइल जिसमें बिना हेडर के कच्ची छवि डेटा होती है।

एक "कैमरा रॉ" छवि कच्चे डेटा को स्टोर करती है क्योंकि यह सेंसर से बाहर आती है। अधिकांश आधुनिक कैमरा सेंसर में 8 से अधिक बिट्स के साथ एडीसी होते हैं, लेकिन वे प्रत्येक स्थान पर केवल एक रंग के लिए तीव्रता डेटा एकत्र करते हैं। ज्यामिति को लेंस द्वारा विकृत किया जा सकता है, एडीसी से तीव्रता मान मानव तीव्रता की धारणा को प्रतिबिंबित करने का एक अच्छा काम नहीं कर सकते हैं, रंग घटक आपके मॉनिटर और इतने पर उपयोग किए गए लोगों के लिए बिल्कुल मैप नहीं कर सकते हैं।

कच्चे सेंसर डेटा को एक अच्छी गुणवत्ता वाले RGB छवि में बदलने के लिए प्रक्षेप से जुड़ी एक जटिल मैपिंग प्रक्रिया की आवश्यकता होती है और इसे करने का कोई एक सही तरीका नहीं है। इसके अलावा रंग घटकों को अलग करने की आवश्यकता के कारण आरजीबी छवि कच्चे डेटा से बड़ी हो सकती है।

रूपांतरण कैमरे में हो सकता है (और अक्सर होता है) लेकिन कई फ़ोटोग्राफ़र कच्चे डेटा को बचाने के लिए गड़बड़ाते हैं ताकि वे इस तथ्य के बाद प्रसंस्करण को मोड़ सकें।

टिफ़ एक जटिल फ़ाइल प्रारूप है जो विभिन्न प्रकार के मेटाडेटा की एक विस्तृत विविधता में छवियों को संग्रहीत कर सकता है। व्यवहार में हालांकि यह आमतौर पर असम्पीडित या दोषरहित संपीड़ित RGB या CMYK छवियों को संग्रहीत करने के लिए उपयोग किया जाता है।

बिना हेडर वाली कच्ची छवि डेटा वाली फ़ाइलों का उपयोग शायद ही कभी किया जाता है क्योंकि आपको उन्हें पढ़ने से पहले उनके प्रारूप और आयामों को जानना होगा। कुछ इमेज प्रोसेसिंग टूल हालांकि उनका समर्थन करते हैं।

इसके अलावा, एक संख्यात्मक दृष्टिकोण से, 16-बिट छवियों की तरह 32-बिट छवियों से अलग कुछ क्या बनाता है?

दुर्भाग्य से "एन बिट" का अर्थ दो अलग-अलग चीजें हो सकती हैं। इसका मतलब यह हो सकता है कि सभी रंग घटकों को एक बिट संख्या में समेटा गया है (उदाहरण के लिए लाल रंग के लिए 5 बिट्स, नीले रंग के लिए 5 बिट्स और हरे रंग के लिए 6 बिट्स या 16 बिट्स के लिए हरे रंग के 8 बिट्स, हरे रंग के 8 बिट्स, नीले रंग के 8 बिट्स और 8 बिट्स) 32 बिट के लिए अल्फा का) या इसका मतलब यह हो सकता है कि प्रत्येक रंग घटक में प्रत्येक पिक्सेल स्थान पर जानकारी के बिट्स हैं।

इस परिप्रेक्ष्य के साथ जारी रखना कि कंप्यूटर की फाइलसिस्टम पर एक छवि 0 - 255 के बीच पूर्णांक का केवल 3-चैनल सरणी है

फिर से यह परिप्रेक्ष्य सिर्फ गलत है।

एक फाइल बाइट्स का एक क्रम है, लेकिन उन बाइट्स लगभग कभी नहीं "0 से 255 के बीच पूर्णांक का सिर्फ 3-चैनल सरणी है"

आप उस तरह की एक छवि संग्रहीत कर सकते हैं। कुछ उपकरण ऐसी फ़ाइलों को पढ़ने और लिखने का समर्थन भी करते हैं लेकिन समस्या यह है कि इसका मतलब है कि आपको फ़ाइल को पढ़ने से पहले उसके बारे में जानना होगा। मान लीजिए कि आपके पास ऐसी फाइल थी जो 3000 बाइट आकार की थी, तो क्या आपके पास 1000 24 बिट आरजीबी पिक्सेल हैं? 3000 8 बिट ग्रेस्केल पिक्सेल? एक पटल से 3000 8 बिट पिक्सल? रंग घटक किस क्रम में हैं? छवि किस आकार की है? आरजीबी या बीजीआर में रंग घटक हैं? जब तक आप इन सवालों के जवाब नहीं जानते, आप ऐसी फाइल को सार्थक रूप से नहीं पढ़ सकते।

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

उदाहरण के लिए, JPG जैसे एक हानिपूर्ण प्रारूप में एक छवि को संपीड़ित करने का क्या मतलब है? कहें कि संपीड़न एल्गो कुछ पिक्सेल मूल्यों को 254 से 255 या जो भी बदलता है। इसलिए? यह फ़ाइल आकार में कोई बचत कैसे प्रदान करता है या दृश्य गुणवत्ता पर कोई प्रभाव डालता है?

संपीड़न एल्गोरिदम केवल "परिवर्तन मान" नहीं है, वे पूरी तरह से अलग तरीके से जानकारी को सांकेतिक शब्दों में बदलना करते हैं, उदाहरण के लिए JPEG को मोटे तौर पर माना जा सकता है

  • RGB से YUV में डेटा कन्वर्ट करें
  • (वैकल्पिक रूप से) एक या दोनों आयामों में 2 गुणनखंड द्वारा क्रोमा चैनलों के पुन: विभाजन को कम करते हैं
  • प्रत्येक चैनल के लिए डेटा को 8x8 ब्लॉकों में विभाजित करें।
  • असतत कोसाइन रूपांतरण का उपयोग करके ब्लॉक को आवृत्ति डोमेन में बदलें
  • परिणामों की मात्रा निर्धारित करें, उच्च आवृत्ति जानकारी की शुद्धता को कम करते हुए कम आवृत्ति जानकारी को संरक्षित करना।
  • चर लंबाई एन्कोडिंग योजना (हफ़मैन कोडिंग या अंकगणितीय कोड) का उपयोग करके बाइट्स के अनुक्रम के रूप में परिणामी संख्याओं को एनकोड करें)
  • उपयुक्त हेडर के साथ फाइल में उन बाइट्स को सहेजें।

दूसरी ओर दोषरहित संपीड़ित प्रारूप अक्सर सामान्य प्रयोजन डेटा संपीड़न एल्गोरिदम पर निर्मित होते हैं, लेकिन कभी-कभी पूरक होते हैं, छवि-विशिष्ट पूर्व-प्रसंस्करण के साथ, उदाहरण के लिए पीएनजी जैसा दिखता है।

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

1
यह शायद यहां सबसे अच्छा जवाब है, यह छवियों को धारण करने और संपीड़ित करने के लिए दोनों अलग-अलग फ़ाइल स्वरूपों के बारे में बात करता है और कैसे धारणा है कि एक छवि 0-255 से संख्याओं का एक गुच्छा है त्रुटिपूर्ण है
pfg

घटक आदेश का उल्लेख करने के लिए अच्छा है। मुझे लगता है कि opengl 2 ish जैसी चीजें आरजीबी ऑर्डर के विभिन्न क्रमपरिवर्तन को पढ़ने के लिए कार्य करने के लिए अच्छे कारण थे। ईमानदारी से, एक मानक या मेटाडेटा के बिना आप यह भी नहीं जानते हैं कि छवि की उत्पत्ति या दिशा केवल यह बताती है कि लाइनें कितनी लंबी हैं। यदि आप पेल्टी स्प्राइट को लोड करने के बाद भी लोड करते हैं, तो आपके द्वारा नीचे बाईं ओर शुरू होने वाले रंगों का मतलब होगा, स्तंभों से ऊपर जाना और फिर पंक्तियों द्वारा दाईं ओर…
StarWeaver

मुझे लगता है कि घटक आदेश एंडियन की तरह थोड़े है। कुछ सिस्टम विक्रेताओं ने आरजीबी को चुना जबकि अन्य (असाधारण रूप से विंडोज़) ने बीजीआर को चुना।
पीटर ग्रीन

9

इस धारणा के गलत होने के कई कारण हैं, और वे सभी एक बात पर आते हैं:

आप वास्तव में किस पैमाने का उपयोग कर रहे हैं?

और जो थोड़ा आगे टूट सकता है:

255 क्या है?

"रंग" भौतिक ब्रह्मांड की एक संपत्ति नहीं है। यह एक संवेदना है जो मन में उठती है। और, जिसमें "ब्लू", "ग्रीन" और "रेड" जैसी चीजें शामिल हैं। 0 से एक पैमाने का अर्थ है "बिल्कुल नीला नहीं" से 255 तक का अर्थ "सभी नीले!" वास्तव में 255 नीले रंग के प्लेटोनिक आदर्श का प्रतिनिधित्व नहीं कर सकते हैं , क्योंकि ... वास्तविक दुनिया में ऐसी कोई सही चीज नहीं है। तो, क्या इसका मतलब है:

  • आप के सामने डिवाइस पर बना सकते हैं?
  • मानव दृष्टि प्रणाली के दृष्टिकोण से शुद्ध नीले रंग के आदर्श मैच के करीब, भले ही अधिकांश स्क्रीन और प्रिंटर / इंक / पेपर संयोजन इसका प्रतिनिधित्व नहीं कर सकते?
  • एक बहुत अच्छा नीला जो कि विभिन्न प्रकार के उपकरणों पर यथोचित प्रतिनिधित्व करने की संभावना है।
  • एक नीला जो मानव दृष्टि की सीमा के बाहर है, लेकिन जो आपके आरजीबी ट्रिपल को सबसे अधिक रंगों को कवर करने की अनुमति देता है जो सीमा में हैं?

ध्वनि से वंचित? नहीं! ये वास्तव में वास्तविक उदाहरण हैं। प्रत्येक पसंद के इन अभ्यावेदन की जाँच करें। घुमावदार क्षेत्र मानव दृष्टि रंग अंतरिक्ष का एक 2 डी टुकड़ा है, और त्रिकोण उस क्षेत्र को दर्शाता है जिसे लाल, हरे या नीले रंग के लिए एक विशेष पसंद का प्रतिनिधित्व किया जा सकता है।

सबसे पहले, यहाँ मेरी लैपटॉप स्क्रीन के लिए प्रोफाइल है, जो वर्तमान मध्य-श्रेणी के उपकरणों का सुंदर प्रतिनिधि है:

थिंकपैड X260

अब, यहाँ Adobe RGB स्पेस है। ध्यान दें कि यह कितना बड़ा है जो मेरी स्क्रीन दिखा सकती है!

AdobeRGB

तो, यहाँ sRGB - डिफैक्टो मानक और डिफ़ॉल्ट स्थान आमतौर पर माना जाता है जब कुछ भी निर्दिष्ट नहीं किया जाता है। यह ज्यादातर स्थितियों में "काफी अच्छा" होने के लिए है।

sRGB

और अंत में, प्रोफ़ोटो आरजीबी, जो प्राइमेरी के रूप में काल्पनिक रंगों का उपयोग करते हैं , ताकि त्रिकोण को लगभग सभी मानव दृष्टि से फिट करने के लिए पर्याप्त रूप से बड़ा किया जा सके।

प्रोफ़ोटो आरजीबी

अब खुद को प्रकाश के रंग में फेंक दें, और रंगीन अनुकूलन - पर्यावरण के प्रति धारणा को समायोजित करने की मानव दृष्टि प्रणाली। वास्तव में, सिर्फ क्षमता नहीं: वह चीज जो आप चाहते हैं या नहीं, यह होता है । क्या "शुद्ध नीला" का मतलब यह है कि यह चीज़ नीले रंग की दिखती है क्योंकि यह संभवतः इस गरमागरम रोशनी के तहत हो सकती है? यदि हम सूर्य के प्रकाश में फोटो के बजाय मान लें तो क्या होना चाहिए?

तो "255" का मतलब बहुत सारी अलग-अलग चीजें हो सकती हैं।

0 क्या है?

यह काफी सरल है - 0 होने के लिए आपको कितना काला चाहिए? यह है vantablack काला? यदि यह है, लेकिन आपके दृश्य के सभी वास्तविक शेड बहुत कम चरम हैं , तो क्या आप वास्तव में एक गतिशील रेंज के लिए संभावित मूल्यों का एक गुच्छा "बेकार" करना चाहते हैं जो आपके दृश्य में नहीं है - और जो रंग की तरह हो सकता है यहां तक ​​कि आपके द्वारा एक्सेस किए गए किसी भी उपकरण या प्रिंटर द्वारा भी प्रतिनिधित्व नहीं किया जाएगा?

आपका कर्व क्या है?

इसलिए, जब आपके पास अपना समापन बिंदु हो, तो आप एक से दूसरे में कैसे पहुंचेंगे? चमक की मानवीय धारणा निश्चित रूप से गैर-रैखिक है । आपके 0-255 पैमाने पर, 100 को 50 की तुलना में दोगुना उज्ज्वल होना चाहिए, या क्या यह कुछ बड़ा कारक होना चाहिए? क्या, 3 और 4 के बीच अवधारणात्मक अंतर 203 और 204 के बीच समान होना चाहिए?

यदि आप एक लॉग स्टोरेज सिस्टम का उपयोग करने का निर्णय लेते हैं, तो क्या उस वक्र को मानव दृष्टि से मेल खाने के लिए अनुकूलित किया जाना चाहिए, या डेटा अनुकूलन के लिए, या कुछ और के लिए?

कई अलग-अलग जरूरतों के लिए कई संभावनाएं हैं।

संपीड़न पर

तुम पूछो।

कहें कि संपीड़न एल्गो कुछ पिक्सेल मूल्यों को 254 से 255 या जो भी बदलता है। इसलिए? यह फ़ाइल आकार में कोई बचत कैसे प्रदान करता है या दृश्य गुणवत्ता पर कोई प्रभाव डालता है?

आधुनिक संपीड़न एल्गोरिदम इससे अधिक जटिल हैं, लेकिन यह एक अच्छा उदाहरण प्रदान करता है। मैं FF255 FEका प्रतिनिधित्व करने और 254 का प्रतिनिधित्व करने के लिए हेक्साडेसिमल का उपयोग करने जा रहा हूं , और कल्पना करता हूं कि हम संपीड़न के रूप में रन लंबाई एन्कोडिंग का उपयोग कर रहे हैं । और सादगी के लिए, चलो रंग के बजाय काले और सफेद मान लें। इसके साथ, यदि हमारे पास डेटा की एक पंक्ति है जो इस तरह दिखता है:

FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 

हम इसे बहुत ही सरल तरीके से संपीड़ित कर सकते हैं

16×FF 

... जो एक बहुत स्पष्ट बचत है। हम मूल रूप से 16 बाइट्स को दो (गिनती के लिए एक, डेटा के लिए दो) में स्टोर कर सकते हैं। लेकिन हम कहते हैं:

FF FF FE FF FE FF FF FF FF FF FE FE FE FF FE FE

अब, रन-लेंथ एन्कोडिंग हमें देता है:

2×FF 1×FE 1×FF 1×FE 5×FF 3×FE 1×FF 2×FE

... जो बिल्कुल भी बचत नहीं है, और वास्तव में फ़ाइल का आकार बढ़ सकता है । लेकिन अगर हम सभी FEमानों को गोल FFकरते हैं, तो हम पहले मामले में वापस आ गए हैं, एक महत्वपूर्ण आकार में कमी के साथ, फ़ाइल गुणवत्ता पर प्रभाव को नोटिस करने के लिए एक छोटा लेकिन शायद ही मुश्किल है।

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

थोड़ी गहराई पर

इसके अलावा, एक संख्यात्मक दृष्टिकोण से, 16-बिट छवियों की तरह 32-बिट छवियों से अलग कुछ क्या बनाता है? फिर, एक छवि 0-255 के बीच पूर्णांक मानों के साथ एक सरणी है।

तो ..... 0-255 के बीच पूर्णांक मानों का एक सरणी एक आठ बिट सरणी है। (2 (= 256.) तीन चैनलों के साथ, यह एक 24-बिट छवि है; कुछ प्रारूपों में 32 बिट्स के लिए एक पारदर्शिता ("अल्फा") चैनल है। प्रति चैनल एक उच्च मूल्य का उपयोग भी किया जा सकता है, जो आमतौर पर "16 बिट गहराई" कहने पर हमारा मतलब है। इसका मतलब है कि सरणी 0-255 के बजाय 0-65535 (2 6 = 65536) से जाती है। आम तौर पर इस तरह की योजना में, यह मूल रूप से सिर्फ एक गुणक है जहां उच्चतम मूल्य प्रत्येक पैमाने पर एक ही चीज का प्रतिनिधित्व करता है, लेकिन उच्च बिट गहराई अधिक संभव अति सूक्ष्म अंतर देता है। ( इस पर और अधिक के लिए इस उत्तर को देखें ।) कुछ विशेष फ़ाइल स्वरूप भी हैं जो उपयोग के मामले के आधार पर मानों या अन्य डेटा प्रकारों के लिए पूर्णांक के बजाय 64-बिट फ़्लोट्स (!) का उपयोग करते हैं, लेकिन मूल अवधारणा समान है ।


s / 0-65536 / 0-65535 /
रुस्लान

1
@ रोलन गुड कैच। बफर अतिप्रवाह के लिए क्षमा करें। :)
mattdm

यह भी एक अच्छी व्याख्या है कि पोशाक इतना ध्रुवीकरण क्यों था, एफडब्ल्यूआईडब्ल्यू
वेन वर्नर

8

नहीं, एक छवि 0-255 की सीमा में केवल RGB मान नहीं है। यहां तक ​​कि अगर आप भंडारण प्रारूपों को अनदेखा करते हैं, तो रंग का वर्णन करने के कई तरीके हैं। यहाँ कुछ उदाहरण हैं:

  • लाल, हरे और नीले रंग के घटक (RGB)
  • सियान, मैजेंटा, पीले और काले रंग के घटक (CMYK)
  • रंग, संतृप्ति और लपट / मूल्य (HSL / HSV)
  • एक कैमरे में सेंसर के समूह पर प्रकाश की मात्रा
  • प्रकाश की मात्रा और इसकी दिशा जब यह सेंसर से टकराती है (एक लाइट-फील्ड कैमरा में )

पहले दो क्रमशः मॉनिटर पर और मुद्रण के लिए प्रदर्शित करने के लिए सबसे अधिक उपयोग किए जाते हैं।

इसके अतिरिक्त, एक छवि न केवल पिक्सेल है, बल्कि मेटाडेटा भी है। यह पिक्सेल की संख्या में चौड़ाई, भौतिक चौड़ाई जैसी चीजें हो सकती हैं यदि आप इसे प्रिंट करना चाहते हैं, तो एक थंबनेल छवि , या यहां तक ​​कि कैमरे की भौगोलिक स्थिति भी जब छवि ली गई थी।


6
और यहां तक ​​कि आरजीबी के रूप में "सरल" कुछ के साथ, अलग-अलग रंग के स्थान हैं। एक साधारण 24-बिट आरजीबी बिटमैप गामा-सही हो सकता है, उदाहरण के लिए - और उस सुधार को उलटने के बिना, यह बहुत काला दिखाई देगा। तीव्रता का वितरण रैखिक हो सकता है, या कुछ भी लेकिन। Adobe RGB और sRGB दोनों 24-बिट RGB बिटमैप हैं, लेकिन "समान" रंगों का एक बहुत अलग प्रतिनिधित्व है। जैसे "वहाँ एक सादे पाठ फ़ाइल के रूप में ऐसी कोई चीज़ नहीं है", वहाँ कोई "सादे छवि" प्रारूप नहीं है। सबसे अच्छा आप प्राप्त कर सकते हैं "इस विशेष प्रणाली / अनुप्रयोग के लिए मूल छवि प्रारूप"।
लुआण

1
कभी ऐसा प्रारूप नहीं देखा जो hsv / hsl डेटा रखता हो, लेकिन मैंने उन लोगों को देखा है जो LAB या XYZ डेटा स्टोर करते हैं
joojaa

2
@ Luaan आपको एक उत्तर में विस्तार करना चाहिए। गामा मतभेद एक बात है जो किसी और को उनके जवाबों में स्पर्श नहीं करते थे।
टिम सेगिन

5

आपका आधार गलत नहीं है: किसी भी छवि को परिमित मूल्यों के एन-आयामी सरणी का उपयोग करके दिखाया जा सकता है। व्यक्तिगत रूप से, मैं सामान्य करता हूं कि मैट्रिक्स के बजाय असतत ज्यामिति का उपयोग करना, लेकिन सार समान है। लेकिन यह सामग्री है, फ़ाइल नहीं।

हालाँकि, फ़ाइल स्वरूप भिन्न हैं। मूल रूप से, उस छवि का प्रतिनिधित्व करने के कई अलग-अलग तरीके हैं, जैसे कि लोगों ने उल्लेख किया है: bmp, png, jpg, आदि, बेशक, एक बार जब आप उन्हें डिकोड करते हैं, तो एक ही छवि के दो दोषरहित एन्कोडेड संस्करण समान मैट्रिसेस को जन्म देंगे।
इसे एक .txt फ़ाइल के रूप में सोचें जिसे आपने ज़िप के साथ संपीड़ित किया है। जोड़े गए अजीबता के साथ कि एक गैर-दोषरहित एन्कोडिंग एक पाठ लौटाएगा जो मूल के समान नहीं है, लेकिन वास्तव में करीब है, लगभग पाठ के डंबल डाउन संस्करण की तरह।

पाठ सादृश्य के साथ रहते हुए, मान लें कि आपके पास एक ही पाठ है, जिसे .txt, .docx, .pdf, आदि के रूप में सहेजा गया है। यदि सामग्री समान है तो सभी फाइलें बिल्कुल एक जैसी क्यों नहीं हैं? (ठीक है, txt का प्रारूपण नहीं है, लेकिन दूसरे करते हैं)।

वैसे, बाहर की जाँच करें कि कैसे Netpbm एन्कोडिंग वास्तव में JPEG से अलग है ।


3

रॉ और टीआईएफएफ प्रारूपों के लिए, जहां तक ​​मैं बता सकता हूं, जवाब (जैसा कि अन्य ने कहा है) यह है कि वे वास्तव में हमेशा एक ही रंग के रिक्त स्थान का उपयोग नहीं करते हैं (उदाहरण के लिए RAW फाइलें पिक्सेल प्रति अधिक बिट्स का उपयोग कर सकती हैं ताकि बेहतर रंग जानकारी संग्रहीत कर सकें) ।

लेकिन अपने प्रश्न के क्रूस पर जाने के लिए - कभी-कभी ऐसी छवियां होती हैं जो विभिन्न स्वरूपों में संग्रहीत होती हैं, लेकिन प्रत्येक अंत में संख्याओं की समान सरणी का प्रतिनिधित्व करती है।

इसका एक कारण का एक अच्छा उदाहरण PNG फ़ाइल और TIFF फ़ाइल के बीच संपीड़न में अंतर है।

PNG फाइलें एक विशेष संपीड़न एल्गोरिदम का उपयोग करती हैं। इसका मतलब है कि एक छवि को प्रत्येक पिक्सेल के लिए संख्याओं की एक बड़ी सूची के रूप में संग्रहीत नहीं किया जाएगा। सरलीकृत उदाहरण: यह कुछ ऐसा संग्रहीत कर सकता है जो कहता है "पिक्सेल के इस 10x10 ब्लॉक में, सभी पिक्सेल रंग XYZ हैं"। फिर उस जानकारी को 100 बार स्टोर करने के बजाय, वह इसे एक बार स्टोर कर लेता है, साथ ही उस क्षेत्र के बारे में थोड़ी सी जानकारी जो जानकारी पर लागू होती है।

मुद्दा फिर संख्या की मूल सरणी (रंगों का प्रतिनिधित्व करने) को वापस पाने के लिए है, इसलिए आप इसे दिखा सकते हैं या इसे संपादित कर सकते हैं या जो भी हो, आपको सॉफ़्टवेयर की आवश्यकता है जो उस संकुचित जानकारी की व्याख्या करना जानता है।

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

दूसरी ओर, TIFF फ़ाइलें, कई अलग-अलग संपीड़न एल्गोरिदम का समर्थन करती हैं। वास्तव में, यह छवि के विभिन्न हिस्सों को अलग-अलग संपीड़ित भी कर सकता है। और यह 'एक्सटेंशन' का समर्थन करता है, इसलिए आप मालिकाना तरीकों का उपयोग करके छवियों को संपीड़ित कर सकते हैं। तो शायद आपकी छवि का शीर्ष आधा PNG के समान विधि का उपयोग करके संपीड़ित किया जाएगा, लेकिन यह नीचे के आधे हिस्से को अच्छी तरह से संपीड़ित नहीं करेगा, इसलिए नीचे का आधा एक अलग विधि का उपयोग करके संपीड़ित किया जाता है।

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

तो तुम पूछते हो

लेकिन मैं एक बुनियादी 3-चैनल आरबीसी छवि के अलावा और कुछ के बारे में नहीं पूछ रहा हूं। मुझे पता है कि अगर कोई मुझे इनमें से एक को सौंपता है, तो मेरे पास अब एक संख्या है। मेरे पास यह जानने का कोई कारण नहीं है कि संख्याओं की एक सरणी संभवतः 0 से 255 तक की संख्याओं के किसी अन्य सरणी से भिन्न हो सकती है।

इसे आपको सौंपने के लिए, किसी को यह जानना होगा कि छवि को कैसे संग्रहीत किया गया था और इसे संख्याओं की एक सरणी में कैसे अनुवाद किया जाए। (या संभवतः कुछ सॉफ्टवेयर आपके लिए अनजाने में आपके लिए अनुवाद कर रहे हैं)।

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


1
But to get to the crux of your question - sometimes there are images which are stored in different formats, but each ultimately represents exactly the same array of numbers.यह दोषरहित छवियों के लिए सही हो सकता है - लेकिन यह पूरी तरह से गलत है यदि आप उदाहरण के लिए एक कम-बिटरेट HEIF छवि की तुलना एक कम-बिटरेट JPEG के साथ करते हैं
फ्लोलिलो

1
@flolilolilo हां, इसलिए मैंने "कभी-कभी" कहा - सवाल की मेरी व्याख्या यह थी कि वे पूछ रहे थे "अगर मैं रंगों के सटीक ग्रिड के साथ समाप्त होता हूं, तो फ़ाइलों के बीच अंतर क्या है"। तो मैं एक सरलीकृत मामले के रूप में दोषरहित संपीड़न के बारे में बात कर रहा था जहां आप विभिन्न संपीड़न विधियों का उपयोग करके विभिन्न फ़ाइल प्रकारों से संख्याओं के सटीक ग्रिड के साथ मिल सकते हैं।
लांगेहारे

रॉ लगभग कभी भी "पिक्सेल" प्रति बिट्स का उपयोग नहीं करता है, लेकिन रॉ भी पिक्सेल का वर्णन नहीं करता है, यह फोटो का वर्णन करता है। RAW छवियां सेंसर से कच्चे सेंसर डेटा हैं और प्रत्येक विशेष फोटोसाइट में केवल 1 चैनल है, न कि 3. आरजीबी चैनल अन्य रंगों के पड़ोसी फोटो को देखकर निर्धारित किए जाते हैं। RAW फाइलें वास्तव में एक असम्पीडित छवि से छोटी होंगी जो RAW प्रसंस्करण का परिणाम है।
ए जे हेंडरसन

1
उदाहरण के लिए 16 बिट कच्चा केवल 16 बिट प्रति "पिक्सेल" का उपयोग करता है, लेकिन एक असम्पीडित 8 बिट रंग बीएमपी 24 बिट प्रति पिक्सेल का उपयोग करने जा रहा है क्योंकि इसमें लाल, हरे और नीले रंग के लिए 8 बिट की जानकारी संग्रहीत करने की आवश्यकता होती है। RAW को अधिक समायोजित करने का कारण यह है कि रंग जानकारी को अभी तक संयोजित नहीं किया गया है। आप सफेद संतुलन जैसी चीजों को बदल सकते हैं (जो प्रत्येक परिणामी पिक्सेल की रंग जानकारी को निर्धारित करने में प्रत्येक विशेष रंगीन फोटोसाइट के प्रभाव को बदल देते हैं)।
ए जे हेंडरसन

3

बिटमैप

एक बिटमैप (बीएमपी) अनिवार्य रूप से आप जो वर्णन करते हैं, एक संख्या है जो पिक्सेल रंगों का प्रतिनिधित्व करती है। जैसे कुछ

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-बिट बिटमैप उन छवियों का प्रतिनिधित्व कर सकते हैं जो अलग-अलग दिखती हैं (एक ही आकार लेकिन अलग-अलग रंग)।

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

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

यह वास्तविक छवि से निपटने का एक सरलीकृत संस्करण है। हालांकि, मुझे लगता है कि उपदेशात्मक उद्देश्यों के लिए, आवश्यक बिंदुओं को मारते हुए भी अधिक जटिल वास्तविकता की तुलना में समझना आसान है।


3

मान लीजिए कि यह सच था, कि प्रत्येक पिक्सेल 0-255 की सीमा में प्रत्येक संख्या (लाल, हरा और नीला) था। अन्य उत्तरदाताओं ने उस धारणा को चुनौती देते हुए (सही तरीके से) शुरू किया है, लेकिन सरलता के लिए आइए हम इसे सच कहते हैं।

मुझे याद है (लेकिन दुख की बात है कि ऑनलाइन नहीं मिल सकता है) एक भाषा विज्ञान की पाठ्यपुस्तक से एक कार्टून: मिस्र की दो प्राचीन पत्थर की नक्काशीदार दीवारें एक विशाल दीवार के नीचे खाली बैठी हुई हैं, जिस पर उन्होंने बहुत बड़ी संख्या में नक्काशी की हुई नक्काशी की है। एक दूसरे से कह रहा है: "निश्चित रूप से लिखने का एक आसान तरीका है, 'फिरौन के पास 100,000 सैनिक थे?'"। उस विचार को ध्यान में रखें।

अब, मान लीजिए कि आपकी छवि की पहली पंक्ति में 1800 ब्लैक पिक्सेल हैं। इसका प्रतिनिधित्व कैसे होगा?

0 0 0    0 0 0     0 0 0   ....

तो कितना संग्रहण स्थान की आवश्यकता होगी? प्रत्येक मान एक बाइट है। प्रति पिक्सेल तीन बाइट्स, पंक्ति में 1800 पिक्सेल, इसलिए पहले से ही प्रति पंक्ति 5400 बाइट्स। तो 1800 x 1200 के आयामों के साथ एक छवि को 1200 गुना ज्यादा लेना चाहिए, जो 6 मेगाबाइट से अधिक है। तो अब चलिए गूगल इमेज सर्च करते हैं और 1800x1200 इमेज के एक जोड़े को डाउनलोड करते हैं - आइए बताते हैं, एक .pngइमेज और एक .jpgइमेज। फ़ाइल का आकार देखें: क्या यह 6 एमबी है? कोई रास्ता नहीं, यह आमतौर पर उससे बहुत छोटा है। और यह एक वांछनीय बात है, निश्चित रूप से, वह सब जगह बच गई, और कम डाउनलोड समय ...।

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

ठीक है, आप कहते हैं, कि काम करता है अगर आसन्न पिक्सल का एक पूरा गुच्छा एक ही रंग का हो। लेकिन अगर वे नहीं करते हैं तो क्या होगा? ठीक है, निश्चित रूप से, यह विशेष छवि की सामग्री पर निर्भर है: अधिक अतिरेक है, जानकारी को संपीड़ित करना जितना आसान है । अतिरेक का अर्थ है कि यदि आप पहले से ही अन्य भागों को जानते हैं तो छवि के कुछ हिस्सों का अच्छी तरह से अनुमान लगाया जा सकता है। संपीडन का अर्थ है सूचना को समेटने के लिए आवश्यक नंगे न्यूनतम लिखना। हर संभव छवि में अतिरेक नहीं है, लेकिन किसी भी वास्तविक छवि का मानव आंख और मस्तिष्क के लिए अर्थ है, मेरे शुद्ध-काले उदाहरण की तुलना में अधिक जटिल होने के बावजूद, अब भी बहुत अधिक अतिरेक होगा। और कंप्रेसिंग के कई अलग-अलग तरीके हैं। कुछ संपीड़न विधियाँ दोषरहित हैं, जिसका अर्थ है कि जानकारी को गणितीय रूप से मूल के समान समेटा जा सकता है, जैसा कि मेरे ब्लैक-रो-ऑफ-पिक्सल्स उदाहरण में है। अधिकांश .pngफाइलें दोषरहित संपीड़न विधि का उपयोग करती हैं। कुछ विधियां हानिपूर्ण हैं : पुनर्निर्माण सही नहीं है, लेकिन त्रुटियां ऐसे तरीकों से छिपी हुई हैं जैसे कि मानव आंख और मस्तिष्क शायद ही उन्हें नोटिस करते हैं। अधिकांश .jpgफाइलें हानिप्रद हैं।

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

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


1

हां, लेकिन आप उन 1s और 0s के लिए कैसे अलग हैं।

मैं एक उदाहरण प्रस्तुत करूंगा, लेकिन यह नकली है और यह माना जाता है कि सटीक होने से अधिक वर्णन करने के लिए। ध्यान रखें कि सभी डिजिटल छवियों को किसी न किसी स्तर पर बाइनरी में दर्शाया गया है।

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

इसलिए हमारे नमूने में, हम एक काले और सफेद छवि को देखने जा रहे हैं।

00067000
00067000
00567800
04056090
40056009

संख्याएं दर्शाती हैं कि "ब्लैक" कितना मजबूत है। यह कैसे कैमरा छवि पर कब्जा कर लिया है। यह एक सभ्य कैमरा है, इसलिए यह छवि को कैसे संग्रहीत करता है, यह भी है।

अब यह एक कंप्यूटर पर छवि को संग्रहीत करता है, लेकिन बहुत अधिक जगह लेता है इसलिए हम इसे संपीड़ित करने जा रहे हैं। इसे खत्म करने के अलावा, हम यह भी जानते हैं कि अधिकांश लोग 1 काले स्तर के अंतर का पता नहीं लगा सकते हैं इसलिए हम इसे कुछ हद तक सुचारू करने जा रहे हैं।

302730
302730
204820
*04056090
1420262019

अब यह है कि हम डिस्क पर इमेज को कैसे स्टोर करते हैं। यह कम जगह लेता है और हमें मूल छवि का अधिक उत्पादन करने देता है।

अब हम कहते हैं कि हम इसे एक प्रिंटर पर प्रिंट करना चाहते हैं। प्रिंटर केवल एक स्तर का काला प्रिंट करता है, इसलिए एक कंप्यूटर प्रिंटर में संग्रहीत, संपीड़ित छवि का अनुवाद करता है।

00011000
00011000
00111100
01011010
10011001

यह एक उचित दिखने वाली छवि को प्रिंट करता है, लेकिन आप देख सकते हैं, उदाहरण के लिए गुणवत्ता की कमी भी है। लेकिन हे यह प्रिंटर की गलती है।

अंत में, आप एक अच्छे प्रिंटर पर ब्लैक के 10 स्तरों के साथ छवि को प्रिंट करने के लिए जाते हैं। आपके कैमरे के समान। तो आप संग्रहीत और संपीड़ित छवि का उपयोग करते हैं।

00077000
00077000
00888800
04056090
40066009

जैसा कि आप देख सकते हैं कि छवि "बेहतर" है, लेकिन मूल से थोड़ा बदल दिया गया है।

किसी भी समय आपका सही है कि यह सब सिर्फ एक चैनल की ताकत है। और अन्य तो संकुचित छवि, जो वैसे भी विघटित होना है, यह उस पर बहुत हद तक सही है।

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


आपका दूसरा कोड ब्लॉक (संपीड़ित) RLE दिखा रहा है, है ना? आपको शायद यह कहना चाहिए कि आप नमूनों को रिपीट-काउंट + सैंपल-वैल्यू के साथ बदल रहे हैं ताकि लोग जान सकें कि किस तरह का कम्प्रेशन है, क्योंकि अगर आप RLE की उम्मीद नहीं कर रहे हैं तो यह पूरी तरह से गैर-स्पष्ट है।
पीटर कॉर्डेस

1

मैं पूरक जानकारी के एक बिट के साथ झंकार करूँगा क्योंकि मैंने इमेज सेंसिंग और एन्कोडिंग / कम्प्रेशन के साथ काम किया है, यद्यपि ज्यादातर चलती हुई छवियां।

अपने मूल रूप में, एक विशेष स्क्रीन पर प्रदर्शित एक छवि (कोई भी छवि) वास्तव में संख्याओं की एक समान सरणी है। वे संख्याएँ सभी हो सकती हैं 0-255 या 0-65535 या 0-जो भी 32-बिट्स-है-आई-फॉरगेट-गो-गूगल-इट।

लेकिन वहाँ बहुत सारे तरीके हैं कि परिवहन और जानकारी के लिए, उनमें से बहुत से बस समय की mists को खो प्रौद्योगिकियों के उत्पादों रहे हैं।

इसके अलावा, एक विस्तार जिसे मैंने यहां किसी अन्य पेडेंट में नहीं देखा है, वह यह है कि वास्तव में एक डिजिटल कैमरा से रॉ इमेज सेंसर डेटा बायर पैटर्न या सोमेसच में आरजीआरबीबी हो सकता है जिसे बनाने के लिए कम से कम थोड़ा सा संसाधित करने की आवश्यकता होती है Mk.1 मानव नेत्रगोलक के लिए कोई भी अर्थ। संभावना है कि आप अपने DSLR द्वारा सहेजे गए RAW प्रारूप में भी कभी नहीं मिलेंगे क्योंकि यह तब तक बेकार है जब तक आप इसे RGB या YUV पिक्सेल के एक अच्छे ग्रिड में परिवर्तित नहीं करते, वे 8, 16, 32 या ग्यारहवें-स्क्विलियन बिट्स गहरे हों।

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

कुछ हल्के सोते समय पढ़ने के लिए, "फ्रेम छवि प्रारूप" अनुभाग देखें: http://focus.ti.com/lit/ug/sprufg8b/sprufg8b.pdf

वैसे भी ... असम्बद्ध छवि फ़ाइलों जैसे कि TIFF / RAW / IFF / PNG के बीच अंतर के बारे में आपके मूल प्रश्न पर वापस।

आम तौर पर इसका कारण यह है कि, कई चंद्रमा पहले, प्रत्येक कंप्यूटर / ओएस / प्रिंटर निर्माता अपने स्वयं के थोड़े अलग सेट के साथ किसी तरह के भंडारण / चित्र भेजने के लिए आया था।

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

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

RAW इस बारे में भी जानकारी संग्रहीत करता है कि डेटा के उस विशेष बंडल को मानव-देखने योग्य चित्र में कैसे वापस लाया जाए, डेटा को "सही" देखने के लिए छवि को प्राप्त करने के लिए बस आपको जो भी ट्विक करने की आवश्यकता है, वह डालें।

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

IFF (हाँ, यह एक बात है) एक समान प्रारूप था जिसका उपयोग अमीगा कंप्यूटरों पर किया गया था, मेरा मानना ​​है कि उनके द्वारा आविष्कार किया गया था या लोकप्रिय पेंट पैकेजों में से एक। लेकिन, मैं इसे एक उदाहरण के रूप में यहाँ उपयोग कर रहा हूँ क्योंकि यद्यपि यह दूसरों की तरह बिट-मैप पिक्चर डेटा को संग्रहीत करता है, यह असम्पीडित या RLE डेटा, चर बिट-डेप्थ को 1-बिट मोनो से 8-बिट 256-रंग (लेकिन साथ में) का समर्थन करता है एक 3x8-बिट आरजीबी पैलेट प्रत्येक रंग के लिए चुनने के लिए) और साथ ही हाफ़टोन और होल्ड-एंड-संशोधित नामक विशेष मोड युग की अन्य मशीनों की तुलना में कई और रंगों की अनुमति दे सकता है। ओह, और इसने एनीमेशन का समर्थन किया (साथ ही जीआईएफ की तरह) इसलिए एक आईएफएफ फ़ाइल किसी भी संख्या में फ़्रेम को स्टोर कर सकती है, फ्रेम के बीच परिवर्तनीय देरी के साथ, और प्रत्येक फ्रेम का अपना पैलेट हो सकता है। इसलिए, IFF में TIFF फ़ाइल की तुलना में यह सब कहने के लिए अतिरिक्त डेटा शामिल होगा।

PNG एक और दोषरहित छवि प्रारूप है, जो फिर से बिटमैप डेटा को संग्रहीत करता है, लेकिन कुछ फंकी फीचर्स का समर्थन करता है, जैसे कि एक छवि के पार परिवर्तनीयता के लिए 8-बिट अल्फा चैनल (वेब ​​पेजों पर उपयोगी), इसलिए फिर से चित्र डेटा "पेलोड" समान दिख सकता है लेकिन इसके चारों ओर आवरण अलग है, और पेलोड में RGB डेटा प्रति पिक्सेल के बजाय RGBA हो सकता है।

तो, यह 4 अलग-अलग छवि फ़ाइल स्वरूपों का वर्णन है - आप 4 में से किसी में भी एक बिल्ली का एक नमूना पूर्ण-रंग एचडी चित्र स्टोर कर सकते हैं और यह समान होगा, आपकी स्क्रीन पर प्रत्येक पिक्सेल का समान सम मूल्य होगा और कोई भी नहीं होगा 4 के बीच गुणवत्ता में अंतर ... लेकिन 4 फाइलें आकार, लेआउट में भिन्न होगी, और सॉफ़्टवेयर को लोड और प्रोसेस करने के लिए आसान या कठिन होगा।

उम्मीद है की वो मदद करदे!


0

बस मैंने सोचा था कि इस जानकारी के साथ मैं यहाँ झंकार करूँगा जो इस प्रश्न के पहले उत्तर में होनी चाहिए थी।

एक छवि में पिक्सेल एक बाइट में संग्रहीत नहीं किए जाते हैं - जब तक कि छवि मोनोक्रोम न हो, केवल काले और सफेद।

यदि आपके पास एक ट्रूकॉलर छवि है, तो प्रत्येक पिक्सेल को 16 बिट्स, या 2 बाइट्स - एक मूल्य के रूप में दर्शाया जाता है। यदि आपके पास 32 बिट की छवि है, तो प्रत्येक पिक्सेल को 32 बिट्स या 4 बाइट्स की आवश्यकता होती है, फिर से एकल मूल्य के रूप में।

दिलचस्प रूप से पर्याप्त, छवि और ध्वनि फ़ाइलें और कंप्यूटर में प्रत्येक अन्य प्रकार 1s और 0 के बिट्स के लिए फोड़ा जाता है। यह केवल उन्हें सही आकार के चक्रों में व्याख्या करने से है, जिसका अर्थ है कि वे उनसे निकाले जाते हैं।

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

इसलिए, संक्षेप में, एक कंप्यूटर केवल बिट्स के बारे में जानता है - एक बिट या तो 1 या 0. है सभी छवियों, ध्वनियों, दस्तावेजों, फिल्मों, वीडियो, रिकॉर्डिंग, गेम, फोन कॉल, पाठ संदेश और डिजिटल के रूप में लेबल किए गए कुछ और समान सटीक हैं। सामग्री - 1 और 0 का एक गुच्छा। 1 और 0 की छवियां, ध्वनियां और दस्तावेज़ बन जाते हैं और बाकी सब कुछ क्योंकि कोड पढ़ने वाले उन्हें उन बिट्स को समूहों में पढ़ना और उनके अनुसार प्रक्रिया करना जानते हैं।

इसलिए हमारे पास 16 बिट और 32 बिट चित्र, और 16 बिट और 24 बिट ऑडियो फाइलें जैसी चीजें हैं। जितने बिट्स आप पिक्सेल या साउंड सैंपल के लिए इस्तेमाल करते हैं, उतने ही एक्सप्रेसिव आप हो सकते हैं - 16 बिट्स केवल 64k यूनिक कलर्स को डिफाइन कर सकते हैं, लेकिन 32 बिट्स 4 मिलियन यूनिक कलर्स को डिफाइन कर सकते हैं। एक मोनोक्रोम छवि 1 बिट प्रति पिक्सेल का उपयोग करती है - यह या तो चालू या बंद है।

ऑडियो फाइलों के साथ, आप जितने बिट प्रति नमूना उपयोग करते हैं, रिकॉर्डिंग उतनी ही विस्तृत और बारीक हो सकती है।


0

मैंने पूरे सूत्र को नहीं पढ़ा है, लेकिन ऐसा लगता है कि बहुत से लोग वेक्टर की गई छवि प्रारूपों के बारे में भूल रहे हैं। वे पिक्सेल की सरणियाँ नहीं हैं, क्योंकि पिक्सेल की अवधारणा ऐसे प्रारूप में भी मौजूद नहीं है। यह रेंडरर पर निर्भर है कि वह स्क्रीन या किसी अन्य माध्यम पर छवि का निर्माण कैसे करे।

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


1
यह एक फोटोग्राफी साइट है, और चूंकि डिजिटल कैमरे वैक्टर के बजाय पिक्सेल सरणियों को रिकॉर्ड करते हैं, मैं यह नहीं कहूंगा कि यह "इस बारे में भूल" है क्योंकि इस संदर्भ में सामान्य नहीं है।
mattdm

0

इस सवाल का जवाब पहले काफी विस्तृत था। हालाँकि उत्तर में बहुत अधिक सिद्धांत प्रस्तुत किए जाने के बावजूद, मुझे लगता है कि कुछ बुनियादी विषय हैं, जो आमतौर पर कंप्यूटर प्रोग्रामिंग से संबंधित हैं, जिन्हें अधिक स्पष्टीकरण की आवश्यकता होती है। मुझे एक सॉफ्टवेयर इंजीनियर बनना चाहिए। इस प्रश्न को पढ़ने के बाद मैंने महसूस किया कि बुनियादी प्रोग्रामिंग डेटा प्रकारों की पूरी तरह से गलतफहमी है जो इस प्रश्न को उत्पन्न करती है।

यहाँ पहला प्रश्न है:

इसके अलावा, एक संख्यात्मक दृष्टिकोण से, 16-बिट छवियों की तरह 32-बिट छवियों से अलग कुछ क्या बनाता है? फिर से, एक छवि 0 -255 के बीच पूर्णांक मानों के साथ एक सरणी है।

जैसा कि पहले प्रस्तुत किया गया: नहीं यह नहीं है। एक छवि 0-255 के बीच पूर्णांक मानों की एक सरणी नहीं है। वास्तव में यह 0 से 65535 मानों का एकल या बहुआयामी सरणी हो सकता है, 0 से 4294967295 का एक सरणी या बिट्स का एक सरणी (थोड़ा 0 या 1 मान रख सकता है, यह सब) सॉफ्टवेयर द्वारा परिवर्तित किया गया है जो सक्षम है विभिन्न एन्कोडिंग नियमों के अनुसार पूर्णांक संख्याओं में छवि फ़ाइलों को पढ़ें।

इसे आगे समझने के लिए, जैसा कि पहले कहा गया है, मुझे लगता है कि बुनियादी प्रोग्रामिंग डेटा प्रकारों पर चर्चा आवश्यक है। मैं उन्हें यथासंभव सरल रूप से समझाने की कोशिश करूंगा ताकि कोई भी कंप्यूटर फ़ाइलों में पूर्णांक मानों को संग्रहीत करने में शामिल समस्याओं को समझ सके।

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

  • बीआईटी - 0 या 1 को पकड़े हुए
  • UINT8 - 8bit अहस्ताक्षरित पूर्णांक - वे [0 से 255] अंतराल के बीच मान रख सकते हैं।
  • INT8 - 8bit हस्ताक्षरित पूर्णांक - वे [-126 से 127] अंतराल के बीच मान रख सकते हैं।
  • UINT16 - 16 बिट अहस्ताक्षरित पूर्णांक - वे [0 से 65535] अंतराल के बीच मान रख सकते हैं।
  • INT16 - 16 बिट अहस्ताक्षरित पूर्णांक - वे [832768 से 32767] अंतराल के बीच मान रख सकते हैं।
  • UINT32 - 32 बिट अहस्ताक्षरित पूर्णांक - वे [0 से 4294967295] अंतराल के बीच मान रख सकते हैं।
  • INT32 - 32 बिट अहस्ताक्षरित पूर्णांक - वे [72147483648 से 2147483647] अंतराल के बीच मान रख सकते हैं।
  • या अधिक जटिल प्रारूप में उन सभी डेटा प्रकारों का संयोजन। उदाहरण के लिए एक UINT16 (16 BIT) में 3 अलग-अलग मान रखे जाते हैं, पहले 4 BIT मान 0 से 127 के बीच, अगले BIT 0 या 1 पकड़े।

इसके अलावा और कुछ प्रोग्रामर्स को फाइलों से पूर्णांक डेटा प्रकार को पढ़ते या लिखते समय सौदा करना पड़ता है। धीरज रखनेवाला।एंडियननेस अनुक्रमिक क्रम को संदर्भित करता है जिसमें बाइट्स (हमारी तालिका से UINT8) को मेमोरी या फ़ाइलों में संग्रहीत होने पर बड़े संख्यात्मक मानों में व्यवस्थित किया जाता है। एंडियंस की कंप्यूटर विज्ञान में रुचि है क्योंकि दो परस्पर विरोधी और असंगत प्रारूप आम उपयोग में हैं: मूल्यों का प्रतिनिधित्व बड़े-एंडियन या छोटे-एंडियन प्रारूप में किया जा सकता है, यह इस बात पर निर्भर करता है कि बिट्स या बाइट्स या अन्य घटकों को बड़े अंत से ऑर्डर किया गया है (सबसे महत्वपूर्ण) बिट) या थोड़ा अंत (कम से कम महत्वपूर्ण बिट)। सिंपल पुट आप इस 0000000011011111 या ... 1101111100000000 के आधार पर या जैसे एंडियन ऑर्डर को चुन सकते हैं। और आप किसी भी ऐसे आदेश को चुनने के लिए स्वतंत्र हैं जो आपके उद्देश्य के अनुकूल हो। कोई अन्य नियम नहीं हैं जो आप बनाते हैं जब आप एक छवि फ़ाइल प्रारूप बनाते हैं।

कृपया ध्यान दें कि कंप्यूटर प्रोग्रामिंग पूर्णांक अधिक या कम स्थान का उपयोग कर रहे हैं, मूल्य पर निर्भर करता है। जैसे आपको 255255255 लिखने के लिए अधिक पेपर की आवश्यकता होती है, आपको एक बड़ा मान लिखने के लिए अधिक बीआईटी की आवश्यकता होती है। फिर बाद में जब आप मूल्य पढ़ना चाहते हैं, तो आपको यह जानना चाहिए कि आपके द्वारा लिखे जाने पर आपके द्वारा बनाए गए नियमों के बारे में ठीक-ठीक पता होना चाहिए। अन्यथा आपके लिए यह जानना असंभव है कि 0 -255 के बीच पूर्णांक मानों के साथ सिर्फ एक सरणी को कैसे पढ़ा जाए क्योंकि आप केवल यह नहीं जानते हैं कि उन संख्याओं को कहाँ संग्रहीत किया जाता है और उन संख्याओं को कैसे संग्रहीत किया जाता है जो आपके पास बहुत सारे विकल्प हैं (BIT, UINT8) , UINT16, UINT32 या उन सभी कंप्यूटर डेटा प्रकारों का एक संयोजन)। और मत भूलो, एंडियननेस। यदि आपको नहीं पता कि डेटा को बड़े-एंडियन या छोटे-एंडियन ऑर्डर का उपयोग करके लिखा गया था, तो आप उचित मूल्य को पढ़ने में असमर्थ हैं।

इस चित्र के कारण 0 - 255 के बीच पूर्णांक मानों के साथ सिर्फ एक सरणी है। उनमें से कुछ UINT16 (16bit चित्र) के सरणियाँ हैं, अन्य UINT32 (32 बिट चित्र) के सरणियाँ हैं या अन्य U8 (8bit चित्र) के सरणियाँ हैं। कुछ बहुत ही रचनात्मक कंप्यूटर प्रोग्रामर भी हस्ताक्षरित प्रकारों का उपयोग कर सकते हैं जो आपको INT8 के सरणियों के साथ रहते हैं, इसका मतलब है कि -126 और 127 के बीच मूल्यों का सरणी।

वास्तव में जब आप एक छवि फ़ाइल पढ़ते हैं, तो आपके द्वारा सामना किए जाने वाले पहले डेटा में से एक आमतौर पर छवि चौड़ाई और ऊंचाई का प्रतिनिधित्व करने वाले कुछ बीआईटी होते हैं। और वे सिर्फ कुछ 0-255 मूल्य नहीं हैं। प्रोग्रामर द्वारा दिए गए कुछ डेटा प्रकार भी हैं। कुछ प्रोग्रामर सोचेंगे कि 16 बीआईटी 65535 पिक्सल की अधिकतम छवि की चौड़ाई के लिए एनओएच हैं, क्योंकि वे कुछ छोटे बटन छवियों को रखने के लिए एक गेम में उपयोग किए जाने वाले छवि प्रारूप को डिजाइन कर रहे हैं। कुछ अन्य प्रोग्रामर यहाँ एक 32 बिट मूल्य का उपयोग कर सकते हैं, जिससे आप 4294967295 की चौड़ाई और ऊँचाई तक की छवियों को स्टोर कर सकते हैं। कुछ पागल नासा प्रोग्रामर 1844674073709551615 पिक्सेल तक की आकाशगंगा की एक विशाल फोटो को स्टोर करने के लिए 64 बिट का उपयोग भी कर सकते हैं।यदि आप नियमों को नहीं जानते हैं, तो आप उन "मूल्यों" को नहीं पढ़ सकते हैं जैसा कि आप उन्हें कहते हैं। क्योंकि आपको नहीं पता कि वे छवि फ़ाइल में कहां से शुरू करते हैं और कहां समाप्त होते हैं। इसलिए आप बीआईटी के एक समूह के साथ अंत करते हैं, जिसके बारे में आप कुछ नहीं समझते हैं।

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

एक काले और सफेद छवि का एक व्यावहारिक सरल फ़ाइल प्रारूप जो 4x2 पिक्सेल छवि का प्रतिनिधित्व करने के लिए केवल एक ही मूल्य 166 रखता है:

छवि (1 - काला पिक्सेल, 0 - सफेद पिक्सेल):

1010 
0110

यह फ़ाइल प्रारूप 1 बीआईटी प्रति PIXEL का उपयोग करता है जिसे एक सिंगल 8 बिट पूर्णांक मान 166 (10100110) के रूप में संग्रहीत किया जाता है। बस इतना ही। 0-255 मानों के किसी भी सरणी का उपयोग नहीं किया जाता है, लेकिन 8 विभिन्न 0 या 1 मान मान 166 के रूप में संग्रहीत होते हैं।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.