मुझे लगता है कि मुख्य समस्या डायनेमिक रेंज में से एक है, आपका एल्गोरिथ्म शायद सही है लेकिन आप गलत प्रकार के डेटा पर काम कर रहे हैं।
एक बिंदु प्रकाश स्रोत जो अन्यथा क्लिप होता है और शुद्ध सफेद होता है, एक डिफोकस लेंस द्वारा एक बड़े क्षेत्र में फैल जाता है, जिससे यह एक डिस्क बनाता है जो उतना उज्ज्वल नहीं है और इसलिए क्लिप नहीं करता है।
यही कारण है कि आप अपनी असली बोकेह छवि में उन अच्छे हलकों को प्राप्त करते हैं। यदि आप सिग्नल को क्लिप करते हैं (इसे कम उज्ज्वल बनाते हैं अन्यथा यह होगा और फिर इसे अपने बोके सिमुलेशन के साथ फैलाएं आपको एक मंद सर्कल (या हेक्सागोन, या जो कुछ भी) मिलता है जो बाहर खड़ा नहीं होता है और इस तरह यथार्थवादी नहीं दिखता है।
आपके पास वास्तविक छवि श्रृंखला में क्या है:
bokeh (from the lens) -> digitisation (clipping) -> gamma correction & dynamic range compression
आप जो कर रहे हैं, वह है
sharp image -> digitisation (clipping) -> gamma correction & dynamic range compression -> bokeh simulation
आपको सही परिणाम नहीं मिलेगा क्योंकि आप रैखिक डेटा के साथ काम नहीं कर रहे हैं।
आप क्या कर सकते हैं डेटा को रैखिक बनाने का प्रयास करें, किसी भी डायनेमिक रेंज को बदलें जो क्लिपिंग में खो गया है, अपने बोके सिमुलेशन का प्रदर्शन करें, और फिर नॉनलाइनर ऑपरेशंस को फिर से करें!
यहाँ एक उदाहरण है। मैंने एक HDR इमेज के साथ शुरुआत की है जो कि एक बहुत ही नॉनलाइनर रिजल्ट देने के साथ एक नया मॉडल बनाया गया है। बोके सिमुलेशन के साथ प्रयास करने के लिए यह सबसे खराब प्रकार की छवि है!
बोकेह को अनुकरण करने के लिए एक मानक कनवल्शन ऑपरेशन करना (फोटोशॉप के लेंस ब्लर टूल का उपयोग करके) इस परिणाम को प्राप्त करता है, जो कि आपको मिल रहे समान है।
एक बेहतर परिणाम प्राप्त करने के लिए, मैंने कोशिश करने के लिए एक चरम वक्र लागू किया और छवि को मोटे तौर पर वापस पाने के लिए इसे आज रात से पहले क्या होगा, जहां हाइलाइट्स बाकी छवि की तुलना में बहुत उज्ज्वल हैं। मैंने इसे स्तर के उपकरण के साथ किया, केंद्र इनपुट को दाईं ओर एक लंबा रास्ता धक्का दिया, 1.0 से लगभग 0.2 तक)। मैंने पहले की तरह ही लेंस ब्लर टूल लगाया। अंत में मैंने पहले कर्व के विपरीत दिशा में एक चरम वक्र लगाया। परिणाम, सही से लंबा रास्ता तय करते हुए, वास्तविक लेंस बोकेह की तरह दिखता है:
यदि आप कोड में ऐसा कर रहे हैं, तो प्रत्येक मान को क्यूबिंग करने का प्रयास करें, फिर अपनी बोके सिमुलेशन दिनचर्या को लागू करें, फिर प्रत्येक मान के घनमूल को लें। आपको एक सुधार देखना चाहिए। इसमें कुछ समय लग सकता है।
tl; dr; अगर आपने bokeh का एक सही गणितीय मॉडल लागू किया है, तो भी इसे अनपेक्षित रैखिक डेटा पर लागू किया जाना चाहिए। यदि आप एक ही गणना को भारी संशोधित डेटा पर लागू करते हैं (यहां तक कि कैमरे में एक मानक जेपीईजी को गणितीय दृष्टिकोण से भारी रूप से संशोधित किया जाता है) तो आपको बहुत अलग परिणाम मिलेगा।