algorithm - क्या रंग मिश्रण के लिए एक एल्गोरिथ्म है जो वास्तविक रंगों के मिश्रण की तरह काम करता है?




colors language-agnostic (5)

आरजीबी रंगों का आम मिश्रण चित्रों के लिए रंगों के मिश्रण से बहुत अलग है, यह रंजक के मिश्रण के बजाय प्रकाश का मिश्रण है।

उदाहरण के लिए:

Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)

(यह नीला + पीला = हरा होना चाहिए)

क्या रंग मिश्रण के लिए कोई ज्ञात एल्गोरिथ्म है जो वास्तविक रंगों के मिश्रण की तरह काम करता है?

मेरा दृष्टिकोण

मैंने पहले से ही कोशिश की है:

दोनों रंगों को एचएसवी में बदलना और एचयूएस को मिलाना (संतृप्ति से गणना गुणांक द्वारा गुणा), और संतृप्ति और मूल्य चैनलों के लिए एक सरल औसत। फिर मैंने दोनों रंगों से औसत ल्यूमिनेंस की गणना की और इस ल्यूमिनेंस से मेल खाने के लिए परिणामी रंग को समायोजित किया। यह काफी अच्छी तरह से काम किया है, लेकिन रंग मिश्रण कभी-कभी गलत था, जैसे:

Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)

मुझे पता चला है कि कभी-कभी मुझे ह्यू वैल्यू को 360 ° (जब hues के बीच का अंतर 180 ° से अधिक होता है) में शिफ्ट करने की आवश्यकता होती है।

Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)

लेकिन यह स्थानांतरण बहुत अच्छा नहीं था, जैसे:

Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°

(ह्यू 179 + लाल) और (ह्यू 181 + लाल) दो पूरी तरह से अलग-अलग रंगों के परिणाम हैं।

फिर मैंने CIE लैब रंग स्थान (फ़ोटोशॉप में) की कोशिश की, जो कि मनुष्य को रंगों को देखने के तरीके के करीब होने के लिए डिज़ाइन किया गया है।

मैंने प्रत्येक संगत दो चैनलों के लिए एक साधारण औसत का उपयोग किया, लेकिन परिणाम संतोषजनक नहीं थे, उदाहरण के लिए, मुझे गुलाबी (64, 26, -9.5) नीला (98, -16, 93) और पीला (30) में से मिला। 68, -112)। ये गुणांक फ़ोटोशॉप से ​​लिए गए थे।

शायद अगर मैंने औसत से कुछ अलग ऑपरेशन किया, तो यह काम कर सकता है, लेकिन मुझे नहीं पता कि क्या।

CMYK ने भी काम नहीं किया , परिणाम RGB या LAB की तरह हैं।

ऐसा लगता है कि इनमें से किसी भी रंग के स्थानों में न तो तुच्छ योजक और न ही घटिया रंग मिश्रण प्राकृतिक परिणाम देता है।

कार्य कार्यान्वयन

क्रिटा - पेंटरली मिक्सर

रेखापुंज ग्राफिक्स के संपादक कृता ने कुछ बिंदु पर अधिक यथार्थवादी रंग मिश्रण का एक कार्यशील कार्यान्वयन किया था: http://commit-digest.org/issues/2007-08-12/ (पेंटरली मिक्सर प्लगइन)

वे कहते हैं कि यह पहला सार्वजनिक अनुप्रयोग है जो कुबेल्का और मंक समीकरणों का उपयोग करके विशेष तकनीक को लागू करता है जो वर्णक के व्यवहार का वर्णन करता है।

यहाँ कृता रंग मिश्रण का एक वीडियो है: https://www.youtube.com/watch?v=lyLPZDVdQiQ

कागज फिफ्टीश्री द्वारा

FiftyThree द्वारा विकसित iOS के लिए पेपर ऐप में कलर ब्लेंडिंग के बारे में भी लेख है । वे वर्णन करते हैं कि वे किस तरह से नवाचार करते हैं और क्षेत्र में प्रयोग करते हैं और नीले और पीले रंग के मिश्रण का नमूना पेश करते हैं जिसके परिणामस्वरूप हरा होता है। हालाँकि, वास्तविक प्रक्रिया या एल्गोरिथ्म वास्तव में वहाँ वर्णित नहीं है।

का हवाला देते हुए:

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

ऐसा लगता है कि क्रिटा के समान ही, पेपर कुबेल्का-मंक मॉडल को लागू करता है:

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

इन सभी जानकारियों से, ऐसा लगता है कि कुबेल्का-मंक मॉडल पर आधारित कार्यान्वयन आगे बढ़ने का तरीका हो सकता है और परिणाम की पेशकश कर सकता है जो वास्तविकता के बहुत करीब हैं।

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

संबंधित सवाल

इन सवालों को एक ही चीज़ से संबंधित सभी के बाद पोस्ट किया गया था।

उनमें से किसी के पास वास्तव में उत्तर नहीं है।

अन्य संबंधित लिंक और संसाधन


Additive, substractive और अन्य मिश्रण alghoritms के लिए इस implementation जाँच करें।

पूरी तरह कार्यात्मक है (जावा में लिखित है), इसलिए आप जो भी रंग मिश्रण करने की आवश्यकता है, उसका परीक्षण कर सकते हैं, और देखें कि क्या यह आपकी आवश्यकताओं के अनुरूप है।

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


RGB रंगों का घटिया मिश्रण करने का एक तरीका यह है कि पहले RGB रंगों को वर्णक्रमीय परावर्तक घटता में परिवर्तित किया जाए। रूपांतरण काफी सरल है, और एक बार जब आप इसे कर लेते हैं, तो आप प्रतिबिंब घटता का एक सच्चा घटिया मिश्रण कर सकते हैं, और फिर परिणाम को RGB में बदल सकते हैं। इसी तरह का एक और सवाल है: .com/questions/10254022/ , जहां इस प्रक्रिया पर अधिक विस्तार से चर्चा की गई है।


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


रंग को यथार्थवादी तरीके से रंगों में मिलाने के लिए कोड है: https://projects.kde.org/projects/calligra/repository/revisions/master/show/krita/plugins/extensions/painterlyframework

ध्यान दें कि illuminants फ़ाइल सहित कोड GPLv2 + है। यह RGB से तरंग दैर्ध्य में परिवर्तित हो सकता है, रचना कर सकता है और वापस परिवर्तित हो सकता है।


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

हालांकि, सरलीकृत उत्तर है: हां, एडिटिव मिक्सिंग के बजाय घटिया मिश्रण का उपयोग करें।

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

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

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

ठीक है, यदि आप RGB में एडिटिव कॉम्बिनेशन से घटाना चाहते हैं, तो आप दो रंगों को मिलाने के लिए निम्न रिवर्स-बायसन टाइप फॉर्मूला का उपयोग कर सकते हैं:

NewColor.R = (Color1.R * Color2.R)/255
NewColor.G = (Color1.G * Color2.G)/255
NewColor.B = (Color1.B * Color2.B)/255

वर्णिक ध्रुवों में अंतर के लिए समायोजन (जी से वाई, फिर वापस जी) बहुत कठिन है ...

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

NewColor.R = 255 - SQRT(((255-Color1.R)^2 + (255-Color2.R)^2)/2)
NewColor.G = 255 - SQRT(((255-Color1.G)^2 + (255-Color2.G)^2)/2)
NewColor.B = 255 - SQRT(((255-Color1.B)^2 + (255-Color2.B)^2)/2)

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





color-space