गॉसियन ब्लर को कैसे लागू किया जाता है?


42

मैंने पढ़ा है कि धब्बा वास्तविक समय ग्राफिक्स में एक अक्ष पर और फिर दूसरे पर किया जाता है।

मैंने पिछले दिनों 1D में थोड़ा सा कॉन्फिडेंस किया है, लेकिन मैं इसके बारे में सुपर कम्फर्टेबल नहीं हूं, न ही जानता हूं कि इस मामले में क्या करना है।

क्या कोई स्पष्ट शब्दों में समझा सकता है कि किसी छवि का 2 डी गाऊसी ब्लर कैसे किया जाता है?

मैंने यह भी सुना है कि ब्लर की त्रिज्या प्रदर्शन को प्रभावित कर सकती है। क्या यह एक बड़ा दृढ़ विश्वास करने के कारण है?

जवाबों:


48

दृढ़ संकल्प में, दो गणितीय कार्य एक तीसरे फ़ंक्शन का उत्पादन करने के लिए संयुक्त होते हैं। छवि प्रसंस्करण कार्यों में आमतौर पर गुठली कहा जाता है। एक कर्नेल पिक्सेल के एक (वर्ग) सरणी (बोलने के लिए एक छोटी छवि) से ज्यादा कुछ नहीं है। आमतौर पर, कर्नेल के मान एक तक जुड़ते हैं। यह सुनिश्चित करने के लिए है कि ऑपरेशन के बाद छवि से कोई ऊर्जा नहीं जोड़ी जाती है या हटा दी जाती है।

विशेष रूप से, एक गाऊसी कर्नेल (गाऊसी धब्बा के लिए उपयोग किया जाता है) पिक्सेल का एक वर्ग सरणी है जहां पिक्सेल मान एक गाऊसी वक्र (2 डी में) के मूल्यों के अनुरूप होते हैं।

Http://homepages.inf.ed.ac.uk/rbf/HIPR2/gsmooth.htm से जुड़ी छवि

छवि में प्रत्येक पिक्सेल गाऊसी कर्नेल द्वारा गुणा किया जाता है। यह छवि पिक्सेल पर कर्नेल के केंद्र पिक्सेल को रखकर और ओवरलैप में कर्नेल में पिक्सेल के साथ मूल छवि में मूल्यों को गुणा करके किया जाता है। इन गुणाओं से उत्पन्न मानों को जोड़ा जाता है और उस परिणाम का उपयोग गंतव्य पिक्सेल पर मूल्य के लिए किया जाता है। छवि को देखते हुए, आप इनपुट सरणी में मान (0,0) को कर्नेल सरणी में मान पर (i) से गुणा करेंगे, इनपुट सरणी में मान (1,0) पर मान (h) ) कर्नेल सरणी में, और इसी तरह। और फिर आउटपुट इमेज में मान (1,1) प्राप्त करने के लिए इन सभी मानों को जोड़ें।

Http://www.songho.ca/dsp/convolution/convolution.html से लिंक की गई छवि

पहले अपने दूसरे प्रश्न का उत्तर देने के लिए, कर्नेल जितना बड़ा होगा, ऑपरेशन उतना ही महंगा होगा। तो, धब्बा की त्रिज्या जितनी बड़ी होगी, ऑपरेशन उतना ही लंबा होगा।

आपके पहले प्रश्न का उत्तर देने के लिए, जैसा कि ऊपर बताया गया है, प्रत्येक इनपुट पिक्सेल को पूरे कर्नेल के साथ गुणा करके कन्वेंशन किया जा सकता है। हालाँकि, यदि कर्नेल सममित है (जो कि एक गाऊसी कर्नेल है) तो आप प्रत्येक अक्ष (x और y) को स्वतंत्र रूप से गुणा कर सकते हैं, जिससे गुणा की कुल संख्या घट जाएगी। उचित गणितीय शब्दों में, यदि एक मैट्रिक्स अलग करने योग्य है, तो इसे (M × 1) और (1 × N) मैट्रिसेस में विघटित किया जा सकता है। ऊपर गॉसियन कर्नेल के लिए इसका मतलब है कि आप निम्न कर्नेल का उपयोग कर सकते हैं:

1256[1464141624164624362464162416414641]=1256[14641][14641]

अब आप दोनों पिक्सेल के साथ इनपुट छवि में प्रत्येक पिक्सेल को गुणा करेंगे और आउटपुट पिक्सेल के लिए मान प्राप्त करने के लिए परिणामी मान जोड़ेंगे।

यह देखने के बारे में अधिक जानकारी के लिए कि क्या कर्नेल वियोज्य है, इस लिंक का पालन करें ।

संपादित करें: ऊपर दिखाई गई दो गुठली थोड़े भिन्न मूल्यों का उपयोग करती हैं। ऐसा इसलिए है क्योंकि इन गुठली को बनाने के लिए गाऊसी वक्र के लिए (सिग्मा) पैरामीटर का उपयोग दोनों मामलों में थोड़ा अलग था। स्पष्टीकरण के लिए कि कौन से पैरामीटर गाऊसी वक्र के आकार को प्रभावित करते हैं और इस प्रकार कर्नेल में मान इस लिंक का अनुसरण करते हैं

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


1
क्या आप यह बताने के लिए एक संक्षिप्त नोट जोड़ सकते हैं कि दो अलग-अलग 5 बाय 5 कर्नेल की अलग-अलग संख्याएँ क्यों हैं (एक योग 273, दूसरा योग 256)? यह किसी नए व्यक्ति के लिए एक संभावित भ्रम की तरह लगता है।
ट्राइकोप्लाक्स

इसी तरह, क्या आप बता सकते हैं कि कर्नेल आपके दूसरे आरेख में क्यों फ़्लिप किया गया है? मुझे नहीं लगता कि यह स्पष्टीकरण के लिए प्रासंगिक है, लेकिन तथ्य यह है कि यह एक स्पष्ट अतिरिक्त कदम है जो किसी ऐसे व्यक्ति को समझने में बाधा डाल सकता है जो यह नहीं जानता कि यह आवश्यक नहीं है।
ट्राइकोप्लाक्स

सही परिणाम के लिए रैखिक रंग अंतरिक्ष में काम करने के लिए मत भूलना।
v.oddou

16

यहाँ मैंने इस विषय पर सबसे अच्छा लेख पढ़ा है: रैखिक नमूने के साथ कुशल गाऊसी धुंधला । यह आपके सभी प्रश्नों को संबोधित करता है और वास्तव में सुलभ है।

आम आदमी के लिए बहुत ही संक्षिप्त विवरण: गाऊसियन एक ऐसी संपत्ति है, जो अलग होने की अच्छी संपत्ति के साथ है, जिसका अर्थ है कि 2 डी गौसियन फ़ंक्शन को दो 1 डी गौसियन कार्यों के संयोजन से गणना की जा सकती है।

n×nO(n2)2×nO(n)

nn


13

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

चूंकि आप दृढ़ संकल्प के साथ सुपर सहज नहीं हैं, इसलिए पहले समीक्षा करें कि इस तरह के असतत संदर्भ में एक कनवल्शन का क्या मतलब है, और फिर एक सरल ब्लर पर जाएं।

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

अब जब हमने दृढ़ संकल्पों को देखा है, तो हम दोषों की ओर बढ़ सकते हैं। गॉसियन डिस्ट्रीब्यूशन द्वारा एक इमेज को दोषी ठहराते हुए गॉसियन ब्लर लागू किया जाता है। अन्य दोषों को आम तौर पर अन्य वितरणों द्वारा छवि को हल करके लागू किया जाता है। सबसे सरल धब्बा बॉक्स धब्बा है, और यह उसी वितरण का उपयोग करता है जिसे हमने ऊपर वर्णित किया है, इकाई क्षेत्र वाला एक बॉक्स। यदि हम 10x10 क्षेत्र को धुंधला करना चाहते हैं, तो हम बॉक्स में प्रत्येक नमूने को 0.01 से गुणा करते हैं, और फिर केंद्र पिक्सेल का उत्पादन करने के लिए उन सभी को एक साथ जोड़ते हैं। हमें अभी भी यह सुनिश्चित करने की आवश्यकता है कि हमारे ब्लर वितरण में सभी नमूनों की कुल राशि 1.0 है ताकि यह सुनिश्चित हो सके कि छवि को उज्जवल या गहरा नहीं मिला है।

r

ex2/22π

O(n2)O(n)


1
आपके अन्य उत्तर को देखते हुए, ऐसा लगता है कि आपकी गणित पृष्ठभूमि मेरे साथ काम करने की तुलना में बेहतर है, लेकिन मुझे उम्मीद है कि यह अभी भी सहायक होने के लिए पर्याप्त विवरण में है। मैं चाहता था कि यह किसी भी पृष्ठभूमि के लोगों के लिए उपयोगी हो।
porglezomp

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

11

O(n2)O(n)

लेकिन दो और तरकीबें हैं जिन्हें आप एक वास्तविक कार्यान्वयन में विचार कर सकते हैं:

फ़िल्टर की एक निश्चित त्रिज्या होती है और इसके कारण, बहुत सीमाओं पर, आपको पिक्सेल के साथ गणना करने की आवश्यकता होगी जो छवि के बाहर गिरते हैं। ऐसे मामले में, आप निम्न में से एक का प्रयास कर सकते हैं: बाहर के पिक्सेल के लिए आप बस अंतिम संभव मान लेते हैं (जैसे कि बहुत सीमा पर पिक्सेल, जैसा कि अंदर है max(x, 0)। या आप बाहर (जैसे x < 0 ? -x : x) में छवि को "प्रतिबिंबित" कर सकते हैं । या आप बस सीमा पर रुक सकते हैं, लेकिन तब आपको निस्पंदन फिल्टर में भाजक को समायोजित करने की आवश्यकता होगी ताकि यह उदाहरण के लिए 1. तक बोले:

sum1256[1464141624164624362464162416414641]=sum1225[0000001624160024361600162416000000]=1.
     1
    1 1
   1 2 1
  1 3 3 1
[1 4 6 4 1]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.