आरजीबी रूपांतरण के लिए रंग तापमान (केल्विन): एल्गोरिथ्म और नमूना

Color Temperature Rgb Conversion



जहाँ तक मुझे पता है, रंग तापमान से आरजीबी में परिवर्तित करने के लिए एक विश्वसनीय सूत्र मिलने की संभावना नहीं है। हालांकि कई एल्गोरिदम हैं जो समान कार्यों को प्राप्त करते हैं, उनमें से अधिकांश को रंग तापमान से XYZ रंग स्थान में परिवर्तित किया जाता है। उसके बाद, आप आवश्यकतानुसार XYZ स्पेस से RGB कलर स्पेस में परिवर्तित कर सकते हैं। इस एल्गोरिथ्म का एक कार्यान्वयन यहां पाया जा सकता है।

दुर्भाग्य से, यह विधि सही अर्थों में एक गणितीय सूत्र नहीं है, लेकिन सिर्फ एक सुशोभित लुकअप टेबल कार्यान्वयन है। कुछ मामलों में, यह एक विश्वसनीय तरीका है। हालांकि, जब यह XYZ-> RGB रूपांतरण की बात आती है, तो यह विधि सरल वास्तविक समय के रंग तापमान समायोजन के लिए बहुत धीमी है।



इसलिए, मैंने RGB रूपांतरण एल्गोरिदम में रंग तापमान का एक सेट लागू किया। यह एल्गोरिथ्म रूपांतरण काफी अच्छा है। निम्नलिखित मेरे कुछ विचार हैं।



इस एल्गोरिथ्म का उपयोग करने की कुछ सीमाएँ:

  1. मेरा एल्गोरिथ्म एक उच्च-सटीक अनुमान है। हालांकि, वैज्ञानिक शोध के लिए अभी भी पर्याप्त नहीं है। यह एल्गोरिथ्म मुख्य रूप से तस्वीरों के कुछ प्रसंस्करण में उपयोग किया जाता है, इसलिए खगोल विज्ञान और चिकित्सा छवि प्रसंस्करण के क्षेत्र में इस एल्गोरिथ्म का उपयोग करने की कोशिश न करें।
  2. क्योंकि एल्गोरिथ्म अपेक्षाकृत सरल है, उचित आकार की छवियों को संसाधित करते समय यह एल्गोरिथ्म काफी तेज है। हालांकि, बेहतर रीयल-टाइम प्रदर्शन प्राप्त करने के लिए, आपको अपने द्वारा उपयोग की जाने वाली प्रोग्रामिंग भाषा को अनुकूलित करने के लिए एल्गोरिदम को लागू करना होगा।
  3. यह एल्गोरिथ्म केवल 1000K से 40000K तक रंग तापमान रूपांतरण के लिए उपयुक्त है। फोटोग्राफी के लिए, इतनी बड़ी स्पेक्ट्रल रेंज पर्याप्त है। जब रंग तापमान इस सीमा से अधिक हो जाता है, तो सटीकता कम हो जाएगी।

एल्गोरिथम कार्यान्वयन: नमूना आउटपुट

निम्न आकृति 1000K से 40000K तक आउटपुट एल्गोरिदम की एक छवि है।



निम्न चित्र फोटोग्राफी के लिए रंग तापमान की सीमा है: 1500K से 15000K तक



एल्गोरिदम कार्यान्वयन विचारों

मेरा पहला काम है चैरिटी के मूल ब्लैकबॉडी मान एक विश्वसनीय सूत्र प्राप्त करने के लिए इंजीनियरिंग उल्टा।

चैरिटी के मूल ब्लैकबॉडी मान एक ग्राफ के रूप में डेटा के रूप में व्यक्त किया जाता है:

जैसा कि चार्ट से देखा जा सकता है, कुछ ऊपरी और निचली सीमाएं हैं, जिससे हमारे एल्गोरिथ्म को लागू करना आसान है। विशेष:

  1. जब लाल घटक 6600K से नीचे होता है, तो यह हमेशा 255 रहता है
  2. नीला घटक हमेशा 2000K पर 0 रहता है
  3. ब्लू 6500K से ऊपर 255 रखने के लिए कहता है

इन आंकड़ों को बेहतर ढंग से फिट करने के लिए, हरे रंग के घटक को फिटिंग के लिए दो भागों में विभाजित किया गया है। एक हिस्सा 6600K से नीचे है तो दूसरा हिस्सा 6600K से ऊपर है।

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

जैसा कि ऊपर उल्लेख किया गया है, वक्र अच्छी तरह से फिट बैठता है।

एल्गोरिदम कार्यान्वयन

एल्गोरिथ्म कार्यान्वयन के लिए निम्नलिखित छद्म कोड है:

Input: 1000K to 40000K color temperature the variable of color temperature and color component must be double precision Set Temperature = Temperature 100 Calculate Red: If Temperature <= 66 Then Red = 255 Else Red = Temperature - 60 Red = 329.698727446 * (Red ^ -0.1332047592) If Red 255 Then Red = 255 End If Calculate Green: If Temperature <= 66 Then Green = Temperature Green = 99.4708025861 * Ln(Green) - 161.1195681661 If Green 255 Then Green = 255 Else Green = Temperature - 60 Green = 288.1221695283 * (Green ^ -0.0755148492) If Green 255 Then Green = 255 End If Calculate Blue: If Temperature>= 66 Then Blue = 255 Else If Temperature <= 19 Then Blue = 0 Else Blue = Temperature - 10 Blue = 138.5177312231 * Ln(Blue) - 305.0447927307 If Blue 255 Then Blue = 255 End If End If

उपरोक्त छद्मकोश में, Ln () प्राकृतिक लघुगणक का प्रतिनिधित्व करता है।

निम्नलिखित VB का कोड कार्यान्वयन है। निम्नलिखित कोड अनुकूलित नहीं है, लेकिन कोड छोटा और पठनीय है।

Static tmpCalc As Double 'Temperature must fall between 1000 and 40000 degrees If tmpKelvin 40000 Then tmpKelvin = 40000 'All calculations require tmpKelvin 100, so only do the conversion once tmpKelvin = tmpKelvin 100 'Calculate each color in turn 'First: red If tmpKelvin <= 66 Then r = 255 Else 'Note: the R-squared value for this approximation is .988 tmpCalc = tmpKelvin - 60 tmpCalc = 329.698727446 * (tmpCalc ^ -0.1332047592) r = tmpCalc If r 255 Then r = 255 End If 'Second: green If tmpKelvin <= 66 Then 'Note: the R-squared value for this approximation is .996 tmpCalc = tmpKelvin tmpCalc = 99.4708025861 * Log(tmpCalc) - 161.1195681661 g = tmpCalc If g 255 Then g = 255 Else 'Note: the R-squared value for this approximation is .987 tmpCalc = tmpKelvin - 60 tmpCalc = 288.1221695283 * (tmpCalc ^ -0.0755148492) g = tmpCalc If g 255 Then g = 255 End If 'Third: blue If tmpKelvin>= 66 Then b = 255 ElseIf tmpKelvin <= 19 Then b = 0 Else 'Note: the R-squared value for this approximation is .998 tmpCalc = tmpKelvin - 10 tmpCalc = 138.5177312231 * Log(tmpCalc) - 305.0447927307 b = tmpCalc If b <0 Then b = 0 If b> 255 Then b = 255 End If End Sub

एल्गोरिथम प्रभाव:

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

उपकरण में प्राप्त वास्तविक प्रभाव नीचे दिखाया गया है:

वैकल्पिक अनुवाद: http://www.tannerhelland.com/4435/convert-tENS-rgb-algorithm-code/