QGIS रेखापुंज इलाके विश्लेषण की वक्रता फिल्टर को समझना?


12

मैंने ढलान, पहलू और वक्रता की गणना करने वाले कई QGis-1.7.4 रैस्टर फिल्टर के स्रोत कोड को पढ़ा है।

फिल्टर में एक सूत्र है जो कुल वक्रता की गणना करता है जो मुझे पहेली बनाता है।

स्रोत फ़ाइल निम्न पथ के साथ, QGis के वर्तमान संस्करण में है:

QGIS-1.7.4 / src / विश्लेषण / रेखापुंज / qgstotalcurvaturefilter.cpp

इस फिल्टर का उद्देश्य सतह की कुल वक्रता को नौ-कोशिकाओं की खिड़की में गणना करना है। फ़ंक्शन कोड निम्नानुसार है:

float QgsTotalCurvatureFilter::processNineCellWindow( 
   float* x11, float* x21, float* x31, 
   float* x12, float* x22, float* x32, 
   float* x13, float* x23, float* x33 ) {

  ... some code deleted ...

  double dxx = ( *x32 - 2 * *x22 + *x12 ) / ( 1 );
  double dyy = ( -*x11 + *x31 + *x13 - *x33 ) / ( 4 * cellSizeAvg*cellSizeAvg );
  double dxy = ( *x21 - 2 * *x22 + *x23 ) / ( 1 );

  return dxx*dxx + 2*dxy*dxy + dyy*dyy;
}

मैं "dxx" फॉर्मूला और रिटर्न एक्सप्रेशन के साथ ठीक हूं। लेकिन मुझे लगता है कि "dyy" और "dxy" सूत्र उल्टे हैं: यह x और y आयामों के संबंध में कुल परिणाम असममित बनाता है।

क्या मुझे कुछ याद आ रहा है या क्या मुझे डबल डेरिवेटिव एक्सप्रेशन को बदल देना चाहिए:

  double dxx = ( *x32 - 2 * *x22 + *x12 ) / ( 1 ); // unchanged
  // inversion of the two following:
  double dxy = ( -*x11 + *x31 + *x13 - *x33 ) / ( 4 * cellSizeAvg*cellSizeAvg );
  double dyy = ( *x21 - 2 * *x22 + *x23 ) / ( 1 );
  return dxx*dxx + 2*dxy*dxy + dyy*dyy; // unchanged

क्या आप मुझे इन सूत्रों पर अपनी राय बता सकते हैं, यदि वे गलत हैं जैसा कि मैंने सोचा था या अगर मैं गलत हूं? इस अंतिम मामले में, क्या आप जानते हैं कि सूत्र को x और y के बारे में असममित क्यों होना पड़ता है?


3
इन समस्याओं की रिपोर्ट करें, ताकि उनका ठीक किया जा सकता hub.qgis.org/projects/quantum-gis/issues/new
UnderDark

हम, इस लिंक पर लॉग इन कैसे करें? लगता है कि साइट ने फ़ोरम के साथ साझा किए गए खाते नहीं हैं, लेकिन मुझे कोई "खाता नहीं बनाना" ... आपके उत्तर के लिए अग्रिम धन्यवाद।
तपदी

1
osgeo लॉगिन साइट का उपयोग करता है www2.osgeo.org/cgi-bin/ldap_create_user.py
UnderDark

जवाबों:


8

आपके सर्मिप सही हैं। समरूपता के लिए जाँच करना एक उत्कृष्ट विचार है: (गॉसियन) वक्रता एक सतह का आंतरिक गुण है। इस प्रकार, ग्रिड को घुमाने से इसे बदलना नहीं चाहिए। हालांकि, रोटेशन 90% के गुणकों द्वारा रोटेशन को छोड़कर - विवेकाधीन त्रुटि का परिचय देते हैं। इसलिए, इस तरह के किसी भी घुमाव को वक्रता को संरक्षित करना चाहिए।

हम समझ सकते हैं कि अंतर पथरी के पहले विचार पर पूंजीकरण द्वारा क्या हो रहा है: डेरिवेटिव अंतर कोटेशन की सीमाएं हैं। हम सभी को वास्तव में जानने की जरूरत है।

dxxएक्स-दिशा में दूसरे आंशिक व्युत्पन्न के लिए एक असतत सन्निकटन माना जाता है। इस विशेष सन्निकटन (कई संभव में से) की गणना सेल के माध्यम से एक क्षैतिज पारगमन के साथ सतह का नमूना करके की जाती है। पंक्ति 2 और कॉलम 2, लिखित (2,2) पर केंद्रीय सेल का पता लगाता है, यह ट्रांसक्ट कोशिकाओं (1,2), (2,2) और (3,2) में कोशिकाओं से होकर गुजरता है।

इस परिच्छेद के साथ, पहला व्युत्पत्ति उनके अंतर कोटियों, (* x32- * x22) / L और (* x22- * x12) / L द्वारा अनुमानित किया जाता है जहां L कोशिकाओं के बीच (आम) दूरी (क्रमशः के बराबर cellSizeAvg) है। दूसरा व्युत्पन्न, इनमें से भिन्न भावों द्वारा प्राप्त किया जाता है, उपज

dxx = ((*x32-*x22)/L - (*x22-*x12)/L)/L
    = (*x32 - 2 * *x22 + *x12) / L^2.

एल ^ 2 द्वारा विभाजन पर ध्यान दें!

इसी तरह, dyyहै चाहिए y-दिशा में दूसरा आंशिक व्युत्पन्न के लिए एक असतत सन्निकटन किया जाना है। ट्रांजिट ऊर्ध्वाधर है, (2,1), (2,2), और (2,3) पर कोशिकाओं से गुजर रहा है। सूत्र उसी के जैसा दिखेगा dxxलेकिन इसके लिए सब्सक्राइबर्स ट्रांसपोज़ किए गए होंगे। यह प्रश्न में तीसरा सूत्र होगा - लेकिन आपको अभी भी L ^ 2 से विभाजित करने की आवश्यकता है।

मिश्रित दूसरे आंशिक व्युत्पन्न, का dxyअनुमान अंतर को दो कोशिकाओं को अलग करके लिया जा सकता है । उदाहरण के लिए, सेल में x के संबंध में पहला व्युत्पन्न (2,3) (शीर्ष मध्य सेल, केंद्रीय सेल नहीं!) का अनुमान इसके बाईं ओर के मूल्य को घटाकर लगाया जा सकता है, * x13, इसके दाईं ओर के मूल्य से, * x33, और उन कोशिकाओं के बीच की दूरी से विभाजित, 2 एल। सेल में x के संबंध में पहला व्युत्पन्न (2,1) (निचला मध्य सेल) (* x31 - * x11) / (2L) द्वारा अनुमानित है। 2 एल द्वारा विभाजित उनके अंतर, मिश्रित आंशिक का अनुमान लगाते हैं, दे रहे हैं

dxy = ((*x33 - *x13)/(2L) - (*x31 - *x11)/(2L))/(2L)
    = (*x33 - *x13 - *x31 + *x11) / (4 L^2).

मुझे वास्तव में यकीन नहीं है कि "कुल" वक्रता का क्या मतलब है, लेकिन यह संभवतः गॉसियन वक्रता (जो मूल वक्रता का उत्पाद है) का इरादा है। के अनुसार मीक और वाल्टन 2000 , समीकरण 2.4, गाऊसी DXY ^ 2 - वक्रता dxx * dyy विभाजित कर प्राप्त किया जाता है (नोटिस ऋण चिह्न - यह एक है निर्धारक ) सतह की ढाल के आदर्श के वर्ग से। इस प्रकार, प्रश्न में उद्धृत रिटर्न मान काफी वक्रता नहीं है, लेकिन यह गॉसियन वक्रता के लिए एक गड़बड़-अप आंशिक अभिव्यक्ति की तरह दिखता है।

फिर, हमें कोड में छह त्रुटियां मिलीं , जिनमें से अधिकांश महत्वपूर्ण हैं:

  1. dxx को L ^ 2 से विभाजित करने की आवश्यकता है, न कि 1।

  2. dyy को L ^ 2 से विभाजित करने की आवश्यकता है, न कि 1।

  3. Dxy का चिन्ह गलत है। (हालांकि, वक्रता सूत्र पर इसका कोई प्रभाव नहीं है, हालांकि)

  4. जैसे-जैसे आप ध्यान दें, डाई और डिक्सी के फॉर्मूले मिश्रित होते जाते हैं।

  5. रिटर्न मान में एक शब्द से एक नकारात्मक चिन्ह गायब है।

  6. यह वास्तव में एक वक्रता की गणना नहीं करता है, लेकिन केवल वक्रता के लिए एक तर्कसंगत अभिव्यक्ति का अंश है।


एक बहुत ही सरल जाँच के रूप में, आइए सत्यापित करें कि संशोधित सूत्र द्विघात सतहों पर क्षैतिज स्थानों के लिए उचित मान लौटाता है। समन्वय प्रणाली की उत्पत्ति के लिए इस तरह के स्थान को लेना, और शून्य ऊंचाई पर होने के लिए इसकी ऊंचाई को लेना, ऐसी सभी सतहों में फॉर्म के समीकरण हैं

elevation = a*x^2 + 2b*x*y + c*y^2.

निरंतर ए, बी और सी के लिए। निर्देशांक (0,0) पर केंद्रीय वर्ग के साथ, इसके बाईं ओर के निर्देशांक (-L, 0), आदि हैं। अन्य ऊंचाई हैं

*x13 *x23 *x33     (a-2b+c)L^2, (c)L^2, (a+2b+c)L^2
*x12 *x22 *x32  =  (a)L^2,      0,      (a)L^2
*x11 *x21 *x31     (a+2b+c)L^2, (c)L^2, (a-2b+c)L^2

संशोधित सूत्र द्वारा,

dxx = (a*L^2 - 2*0 + a*L^2) / L^2
    = 2a;

dxy = ((a+2b+c)L^2 - (a-2b+c)L^2 - (a-2b+c)L^2 + (a+2b+c)L^2)/(4L^2)
    = 2b;

dyy = ... [computed as in dxx] ... = 2c.

वक्रता का अनुमान 2a * 2c - (2b) ^ 2 = 4 (ac - b ^ 2) है। (मेक और वाल्टन सूत्र में हर एक इस मामले में एक है।) क्या यह समझ में आता है? कुछ सरल मानों की कोशिश करो, बी, और सी:

  • a = c = 1, b = 0. यह एक वृत्ताकार परवलय है; इसकी गाऊसी वक्रता सकारात्मक होनी चाहिए। 4 (एसी-बी ^ 2) का मूल्य वास्तव में सकारात्मक है (4 के बराबर)।

  • a = c = 0, b = 1. यह एक शीट का हाइपरबोलाइड है - एक काठी - जो नकारात्मक वक्रता की सतह का मानक उदाहरण है । निश्चित पर्याप्त, 4 (एसी-बी ^ 2) = -4।

  • a = 1, b = 0, c = -1। यह एक शीट के हाइपरबोलॉइड का एक और समीकरण है (45 डिग्री से घुमाया गया)। एक बार फिर, 4 (एसी-बी ^ 2) = -4।

  • a = 1, b = 0, c = 0. यह समतल सतह है जो परवलयिक आकार में मुड़ी हुई है। अब, 4 (एसी-बी ^ 2) = 0: शून्य गाऊसी वक्रता इस सतह के समतलता का सही पता लगाती है।

यदि आप इन उदाहरणों पर प्रश्न में कोड को आज़माते हैं, तो आप पाएंगे कि यह हमेशा एक गलत मान है।


हमेशा सुबह अपने स्पष्ट विस्तार को पढ़ने के लिए दिलचस्प है।
तमंचा

@Tomek अब वहाँ एक राजनयिक (= व्यवहारकुशल और अत्यधिक अस्पष्ट) टिप्पणी है! :-)
whuber

1
ऐसे पूर्ण उत्तर के लिए बहुत बहुत धन्यवाद! मैं सूत्र त्रुटियों की रिपोर्ट करने जा रहा हूं क्योंकि मैं अब सुनिश्चित कर रहा हूं कि रिपोर्ट करने के लिए कुछ है। :)
तपदी

@ शुभंकर: मैं टोमेक के उत्तर की पुष्टि कर सकता हूं कि इस मंच पर आपकी टिप्पणियों को पढ़ना हमेशा दिलचस्प होता है, और मैं हमेशा उनसे कुछ नया सीखता हूँ !! हमारे साथ अपना अमूल्य ज्ञान मुफ्त में साझा करने के लिए धन्यवाद !! क्या आप बुरा मानेंगे अगर मैं सिर्फ एक और सवाल पूछूं: किसी भी जीआईएस एप्लिकेशन में, जब इलाके (रेखापुंज) का वक्रता विश्लेषण किया जाता है, तो यह हमेशा गॉसियन वक्रता है? कभी मीन वक्रता?
मार्को
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.