बोकेह का अनुकरण करने के लिए मैं किस एल्गोरिथ्म का उपयोग कर सकता हूं?


12

मैं एक स्क्रिप्ट लिखने का प्रयास कर रहा हूं जो एक तस्वीर में प्रत्येक पिक्सेल के माध्यम से लूप करता है और पूरे के रूप में छवि पर एक बोकेह लागू करता है।

मैंने इस लिंक पर आधारित एक स्क्रिप्ट का निर्माण किया , हालांकि यह एक हैक लगता है।

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

यह लग रहा है ... छोटे बोके ब्रश पर ठीक है, लेकिन एक बार जब मैं बोश ब्रश का आकार बढ़ाता हूं, तो यह गॉसियन कलंक की तरह दिखता है। यहाँ मेरे एल्गोरिथ्म के साथ चौकोर धुंधला की एक तस्वीर है:

यहाँ छवि विवरण दर्ज करें

अंधेरे किनारों के अलावा, मैं इसे ठीक कर सकता हूं।

आप यह बता सकते हैं कि यह गाऊसी से अलग है, लेकिन यह अभी भी एक लंबा रास्ता है, जिसे सम्मानजनक रूप से बोकेह कहा जा सकता है, जिसमें कुरकुरा किनारा है:

यहाँ छवि विवरण दर्ज करें

मैं समझता हूं कि मेरा एल्गोरिथ्म ऐसा क्यों करता है ... मैं अधिक सटीक रूप से एक बोकेह का अनुकरण कैसे कर सकता हूं?



@ मैं मतभेदों को समझता हूं, और यह कि बोकेह आमतौर पर लेंस के कारण होता है, और गॉसियन पोस्ट-प्रोसेसिंग द्वारा, लेकिन मैं बोकेह को अनुकरण करना चाहता हूं।
इकाई

@ क्षमता: मैं सटीक गहराई के नक्शे के साथ नमूना चित्रों की तलाश कैसे करूं? क्या आप सही है? मैं खुद (फाइनल के बाद) यह कोशिश करना चाहूंगा। शायद मैं कुछ हफ़्ते में एक जवाब के साथ आऊंगा। यदि आपकी जानकारी सार्वजनिक है, तो क्या मुझे इसका लिंक मिल सकता है?
मार्टिज़न कोर्टो

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

जवाबों:


20

मुझे लगता है कि मुख्य समस्या डायनेमिक रेंज में से एक है, आपका एल्गोरिथ्म शायद सही है लेकिन आप गलत प्रकार के डेटा पर काम कर रहे हैं।

एक बिंदु प्रकाश स्रोत जो अन्यथा क्लिप होता है और शुद्ध सफेद होता है, एक डिफोकस लेंस द्वारा एक बड़े क्षेत्र में फैल जाता है, जिससे यह एक डिस्क बनाता है जो उतना उज्ज्वल नहीं है और इसलिए क्लिप नहीं करता है।

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

आपके पास वास्तविक छवि श्रृंखला में क्या है:

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 का एक सही गणितीय मॉडल लागू किया है, तो भी इसे अनपेक्षित रैखिक डेटा पर लागू किया जाना चाहिए। यदि आप एक ही गणना को भारी संशोधित डेटा पर लागू करते हैं (यहां तक ​​कि कैमरे में एक मानक जेपीईजी को गणितीय दृष्टिकोण से भारी रूप से संशोधित किया जाता है) तो आपको बहुत अलग परिणाम मिलेगा।


12

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

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

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


बशर्ते संचालन आप सभी को जोड़ने योग्य हो जो आपको अंधेरे क्षेत्रों में फैलने की समस्या न हो। यह सच है कि आपको तेज सर्कल प्राप्त करने के लिए तेज मास्क की आवश्यकता है, लेकिन बड़ी समस्या यह है कि उसका बोके ऑपरेशन गैर-रैखिक डेटा पर लागू किया जा रहा है।
मैट ग्राम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.