मेरा जवाब reuses @ lostsource के उत्तर में अधिकांश कोड लेकिन यह अंधेरे और हल्की छवियों के बीच अंतर करने का प्रयास करने के लिए एक अलग विधि का उपयोग करता है।
सबसे पहले हमें (संक्षिप्त रूप से) विश्लेषण करना होगा कि आरजीबी चैनलों के योग के औसत मूल्य का नतीजा क्या है। मनुष्यों के लिए, यह व्यर्थ है। हरे रंग की तुलना में गुलाबी चमकदार है? यानी, आप (0, 255, 0) क्यों चाहते हैं (255, 0, 255) से कम चमक मूल्य दें? इसके अलावा, एक मध्य हरा (128, 128, 128) उज्ज्वल है जैसे कि एक मध्य हरा (128, 255, 0)? इसे ध्यान में रखने के लिए, मैं केवल चैनल की रंग चमक से निपटता हूं जैसा एचएसवी कलर स्पेस में किया जाता है। यह केवल एक दिए गए आरजीबी ट्रिपलेट का अधिकतम मूल्य है।
शेष हेरिस्टिक्स है। कुछ बिंदु i
के लिए max_rgb = max(RGB_i)
दें। यदि max_rgb
128 से कम है (8bpp छवि मानते हुए), तो हमें एक नया बिंदु i
मिला जो अंधेरा है, अन्यथा यह हल्का है। प्रत्येक बिंदु i
के लिए ऐसा करने के लिए, हमें A
अंक मिलते हैं जो प्रकाश और B
अंक अंधेरे होते हैं। यदि (A - B)/(A + B) >= 0
तो हम कहते हैं कि छवि हल्की है। ध्यान दें कि यदि हर बिंदु अंधेरा है, तो आपको -1 का मान मिलता है, इसके विपरीत यदि प्रत्येक बिंदु प्रकाश है तो आपको +1 मिल जाएगा। पिछले सूत्र को tweaked किया जा सकता है ताकि आप छवियों को मुश्किल से स्वीकार कर सकते हैं। कोड में मैंने चर को fuzzy
के रूप में नामित किया है, लेकिन यह छवि प्रसंस्करण में fuzzy
फ़ील्ड का कोई न्याय नहीं करता है। इसलिए, हम कहते हैं कि (A - B)/(A + B) + fuzzy >= 0
पर छवि हल्की है।
कोड http://jsfiddle.net/s7Wx2/7/ पर है, यह बहुत सरल है, मेरे नोट्स आपको डराए मत।
ऐसा करने का एकमात्र तरीका एचटीएमएल