2010-03-31 12 views
5

का लैपलासीन मुझे लोग कर्नेल को लागू करने में समस्या हो रही है। मैं इस लिंक http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm में दिखाए गए अनुसार theta = 1.4 के साथ 9 x 9 कर्नल को लागू करने की कोशिश कर रहा हूं।गॉसियन

हालांकि, मुझे फॉर्मूला के साथ ही समस्या हो रही है। अगर कोई मुझे बता सकता है कि 9 x 9 कर्नेल में -40 प्राप्त करने के लिए केंद्र की गणना कैसे करें x या y मानों का उपयोग करने के लिए यह बहुत सराहना की जाएगी।

+0

आप ट्रिपल नहीं स्टांप कर सकते हैं एक डबल टिकट बना दिया। – rook

+0

क्या आप कृपया विस्तृत कर सकते हैं? – Don

+1

... x और y एक पिक्सेल के समन्वय को संदर्भित करता है। –

उत्तर

2

आपको सूत्र के बारे में चिंता करने की आवश्यकता नहीं है - जिसका उपयोग केवल गुणांक उत्पन्न करने के लिए किया जाता है। आपको बस उन 9x 9 गुणांक को अपनी छवि पर लागू करने की आवश्यकता है।

उदाहरण (अपरीक्षित कोड!):

const int K = 9; 
const int K2 = K/2; 
const int NORM = 500; // constant for normalising filter gain 
const int coeffs[K][K] = { ... }; 
int in_image[M][N]; 
int out_image[M][N]; 

for (i = K2; i < M - K2; ++i) 
{ 
    for (j = K2; j < N - K2; ++j) 
    { 
     int term = 0; 
     for (di = -K2; di <= K2; ++di) 
     { 
      for (dj = -K2; dj <= K2; ++dj) 
      { 
       term += in_image[i + di][j + dj] * coeff[K2 + ii][K2 + jj]; 
      } 
     } 
     out_image = term/NORM; 
    } 
} 
+2

अहह। लेकिन मैं उत्सुक हूं, और जुनूनी, सिग्मा = 1.4 के साथ 9 x 9 कर्नेल उस सूत्र का उपयोग करके उत्पन्न हुआ था? मेरे जीवन के लिए मैं इसे लागू करने वाले मूल्यों में से कोई भी नहीं प्राप्त कर सकता हूं। – Don

+1

इसे जांचने का सबसे आसान तरीका सिर्फ उस मामले को देखें जहां y = 0 है और x के मानों को देखें। ऐसा लगता है कि लगभग 483 का स्केलिंग कारक है। इसलिए यदि आप y = 0, x = -4 के लिए 483 * LoG (x, y) का मूल्यांकन करते हैं। + 4 आपको यह पता होना चाहिए कि आपको सही मान मिलते हैं। (मैंने बस इसे एक स्प्रेडशीट का उपयोग करके चेक किया है और यह सही दिखता है।) यदि आप आगे जाना चाहते हैं तो आप निश्चित रूप से कर्नेल का मूल्यांकन y = -4 .. + 4, x = -4 .. + 4 के लिए कर सकते हैं, लेकिन मैं इसे छोड़ देता हूं पाठक के लिए एक अभ्यास के रूप में ... ;-) –

+1

हां। आप सही हे। मैंने अभी 5 मिनट पहले यह अनुमान लगाया था। स्केलिंग कारक है कि। यह किसी और की तरह परेशान था। बहुत बहुत धन्यवाद पॉल, आपकी मदद की बहुत सराहना की गई थी। – Don

1

हाल ही में मैं प्रवेश करें फिल्टर, केवल एक चीज आप की जरूरत है कि सूत्र और एक पैरामीटर के रूप सिग्मा है क्रियान्वित किया है। यदि आपको एक निश्चित आकार मास्क की आवश्यकता है, तो आप मैट्रिक्स में फ़िल्टर मास्क मानों को स्टोर कर सकते हैं और इसका उपयोग कर सकते हैं, या हर बार इसे पुन: गणना करें और आवश्यक मैट्रिक्स बनाएं। फ़िल्टर का आकार सिग्मा मान पर निर्भर करता है, यदि उस आकार से अधिक उपयोग किया जाता है - यह कोई संवेदना नहीं बनाता है, क्योंकि शेष भाग जो कुछ अधिकतम आकार से बाहर है, उस सूत्र का उपयोग करके शून्य पर गणना की जाती है। तो, उदाहरण के लिए यदि आप एक फिल्टर आकार = 9x9 तो आदेश में एक मैट्रिक्स के रूप में फिल्टर खुद की गणना करने के मिला, आप इस मूल्यों के माध्यम से सूत्र को चलाने के लिए की जरूरत है:

int halfsize = size/2;  
for (int x = -halfsize; x < halfsize; ++x) 
    for (int y = -halfsize; y < halfsize; ++y) 
     mask[x][y] = LoGFunction(x, y); 

कुछ ऐसे ही। इसका यह भी अर्थ है कि फ़िल्टर आकार एक विषम मूल्य होना चाहिए। उम्मीद है कि यह मदद करता है। आपके मामले में, आकार = 9 सिग्मा = 1.4 x और y परिवर्तन के माध्यम से -4 4. बिंदु पर सूत्र (0, 0) (यह फिल्टर का केंद्र है) आप के पास कुछ पाने का उपयोग कर के लिए - 12

लेकिन अगर आप सिग्मा को 0.2 9 86 पर डाल दें तो आपको -40 के पास आवश्यक उत्तर मिल जाएगा। मैं भी समझ में नहीं आता क्यों लिखा है कि सिग्मा मूल्य 1.4 मई बा मैं कुछ याद कर रहा हूँ के बराबर है .. मुझे सही अगर मैं एक गलती कृपया

संबंधित मुद्दे