रे ट्रेसिंग में एंटी-अलियासिंग / फ़िल्टरिंग


20

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

इंटरनेट के चारों ओर खोज करने पर, मुझे ऐसा करने के लिए दो अलग-अलग तरीके मिले हैं:

  1. हालाँकि, आप जो नमूने चाहते हैं, उसे तैयार करें और फ़िल्टर के साथ परिणाम का वजन करें
  2. एक फिल्टर के आकार के बराबर एक वितरण के साथ नमूने उत्पन्न करें


उत्पन्न और वजनी

मूल प्रक्रिया है:

  1. हालाँकि आप जो भी नमूने बनाना चाहते हैं (बेतरतीब ढंग से, स्तरीकृत, कम-विसंगति के अनुक्रम आदि)।
  2. दो नमूनों (x और y) का उपयोग करके कैमरा किरण को बंद करें
  3. किरण के साथ दृश्य रेंडर करें
  4. एक फिल्टर फ़ंक्शन और पिक्सेल केंद्र के संदर्भ में नमूने की दूरी का उपयोग करके एक वजन की गणना करें। उदाहरण के लिए, बॉक्स फ़िल्टर, टेंट फ़िल्टर, गाऊसी फ़िल्टर, आदि) आकार फ़िल्टर करें
  5. रेंडर से रंग के लिए वजन लागू करें


एक फिल्टर के आकार में उत्पन्न करें

मूल आधार एक फिल्टर के आकार के अनुसार वितरित किए गए नमूनों को बनाने के लिए इन्वर्स ट्रांसफॉर्म सैम्पलिंग का उपयोग करना है। उदाहरण के लिए एक गाऊसी के आकार में वितरित नमूनों का हिस्टोग्राम होगा:
गाऊसी हिस्टोग्राम

यह या तो बिल्कुल किया जा सकता है, या फ़ंक्शन को असतत पीडीएफ / सीएफडी में बिन करके। smallt एक टेंट फिल्टर के सटीक उलटा cdf का उपयोग करता है। बिनिंग विधि के उदाहरण यहां देखे जा सकते हैं


प्रशन

प्रत्येक विधि के पेशेवरों और विपक्ष क्या हैं? और आप एक का उपयोग क्यों करेंगे? मैं कुछ चीजों के बारे में सोच सकता हूं:

जेनरेट और वेज सबसे ज्यादा मज़बूत लगता है, जिससे किसी भी सैंपल मेथड को किसी भी फिल्टर के साथ मिलाया जा सकता है। हालाँकि, इसके लिए आपको ImageBuffer में वज़न को ट्रैक करना होगा और फिर एक अंतिम समाधान करना होगा।

एक फिल्टर के आकार में उत्पन्न केवल सकारात्मक फिल्टर आकार का समर्थन कर सकते हैं (यानी। कोई मिशेल, कैटमूल रोम, या लैंक्ज़ोस), क्योंकि आपके पास एक नकारात्मक पीडीएफ नहीं हो सकता है। लेकिन, जैसा कि ऊपर उल्लेख किया गया है, इसे लागू करना आसान है, क्योंकि आपको किसी भी वजन को ट्रैक करने की आवश्यकता नहीं है।

हालांकि, अंत में, मुझे लगता है कि आप विधि 2 को विधि 1 के सरलीकरण के रूप में सोच सकते हैं, क्योंकि यह अनिवार्य रूप से एक निहित बॉक्स फ़िल्टर वजन का उपयोग कर रहा है।


बस यह सोचकर ... क्या आप अलग-अलग फ़िल्टर के नकारात्मक भाग को नमूने के दो सेट उत्पन्न करने के लिए मॉडल कर सकते हैं, एक को सकारात्मक माना जाए और दूसरा नकारात्मक? क्या यह आपके दूसरे दृष्टिकोण (फिल्टर के आकार में उत्पन्न) के लिए मनमाने ढंग से फ़िल्टर की अनुमति देगा?
ट्राइकोप्लाक्स

शायद? Lemme एक बिट के लिए इसके साथ बेला
RichieSams

1
ठीक है, यदि आप फ़ंक्शन के शून्य को ट्रैक करते हैं, तो आप पीडीएफ में आउटपुट () कर सकते हैं। फिर जब नमूना लेते हैं, तो आप जांच सकते हैं कि क्या आप नकारात्मक हैं। यहाँ नमूना कोड: gist.github.com/RichieSams/aa7e71a0fb4720c8cb41
RichieSams

जवाबों:


9

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

विधि 2 को समानांतर करने में थोड़ा आसान होने का लाभ भी है क्योंकि प्रत्येक पिक्सेल की गणना अन्य सभी पिक्सेल से स्वतंत्र होती है, जबकि विधि 1 में, नमूना परिणाम पड़ोसी पिक्सेल में साझा किए जाते हैं (और इसलिए जब पिक्सेल समानांतर हो तो किसी भी तरह से सिंक्रनाइज़ / संचार किया जाना चाहिए। कई प्रोसेसर)। इसी कारण से, विधि 1 की तुलना में विधि 2 के साथ अनुकूली नमूनाकरण (छवि के उच्च-विचरण क्षेत्रों में अधिक नमूने) करना आसान है।

कागज में, उन्होंने मिशेल फिल्टर के साथ प्रयोग किया, फिल्टर के एब्स () से नमूना लिया और फिर +1 या ,1 के साथ प्रत्येक नमूने को भारित किया, जैसे @trichoplax ने सुझाव दिया। लेकिन यह वास्तव में विचरण को बढ़ा रहा है और विधि 1 से भी बदतर है, इसलिए वे यह निष्कर्ष निकालते हैं कि विधि 2 केवल सकारात्मक फिल्टर के लिए उपयोग करने योग्य है।

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


धन्यवाद! ये महान संसाधन हैं। तो, अंत में, 3 विधियां हैं? 1. जेनरेट और
वेट को स्प्लैटिंग के

क्या आप किसी भी कागजात, ब्लॉग आदि के बारे में जानते हैं, जो यह बताता है कि छींटाकशी के साथ जनरेट और वज़न को कैसे बराबर किया जाए ? मेरे सिर के ऊपर से, आप प्रति टाइल एक म्यूटेक्स रख सकते हैं, या प्रत्येक पिक्सेल को परमाणु बना सकते हैं।
रिचीसेम्स

2
@RichieSams मुझे नहीं पता कि आप "बिना छींटे उत्पन्न और तौले" का उपयोग क्यों करेंगे, वास्तव में- ऐसा लगता है कि यह किसी भी मामले में फ़िल्टर महत्व के नमूने से भी बदतर होगा। मैं मान रहा था कि "उत्पन्न और तौलना" का अर्थ है बिखरना। स्प्लैटिंग के समानांतरकरण के लिए, मेरे सिर के ऊपर से, एक तरह से छवि को टाइलों में विभाजित किया जाएगा, लेकिन टाइल के किनारों को पार करने वाले स्प्लैट्स को पकड़ने के लिए प्रत्येक टाइल को 2 each3 पिक्सेल की सीमा दें। फिर एक अंतिम पास में, additively संयुक्त छवि में सीमा टाइलों को एक साथ मिलाएं।
नाथन रीड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.