কিউজিআইএস রাস্টার ভূখণ্ড বিশ্লেষণের বক্রতা ফিল্টার বোঝা?


12

আমি বেশিরভাগ কিউজিস -১..4.৪ রাস্টার ফিল্টারগুলি কম্পিউটিং opeাল, দিক এবং বক্ররেখার উত্স কোডটি পড়েছি।

মোট বক্রতা গণনা করে ফিল্টারটিতে একটি সূত্র রয়েছে যা আমাকে ধাঁধা দেয়।

উত্স ফাইলটি নিম্নলিখিত পথের সাথে কিউজিসের বর্তমান সংস্করণে রয়েছে:

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;
}

আমি "ডিএক্সএক্স" সূত্রটি এবং প্রত্যাবর্তনের অভিব্যক্তিটি সহ ঠিক আছি। তবে আমি মনে করি যে "ডিআই" এবং "ডিসিএই" সূত্রগুলি উল্টে গেছে: এটি এক্স এবং ওয়াইয়ের মাত্রাগুলি সম্পর্কিত মোট ফলাফলকে অসমমিত করে তোলে।

আমি কি কিছু মিস করছি বা আমার দ্বিগুণ ডেরিভেটিভ এক্সপ্রেশনগুলি প্রতিস্থাপন করা উচিত:

  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
আন্ডার ডার্ক

হুম, এই লিঙ্কে লগ ইন কিভাবে? সাইটটির ফোরামের সাথে অবশ্যই অ্যাকাউন্টগুলি ভাগ করা আছে বলে মনে হচ্ছে না, তবে আমি কোনও "অ্যাকাউন্ট তৈরি করুন" দেখছি না ... আপনার উত্তরের জন্য আগাম ধন্যবাদ।
তাপাদি

1
osgeo লগইন সাইটে ব্যবহার www2.osgeo.org/cgi-bin/ldap_create_user.py
underdark

উত্তর:


8

আপনার প্রত্যয়গুলি সঠিক correct প্রতিসমের জন্য পরীক্ষা করা একটি দুর্দান্ত ধারণা: (গাউসিয়ান) বক্রতা একটি পৃষ্ঠের অভ্যন্তরীণ সম্পত্তি। সুতরাং, একটি গ্রিড ঘোরানো এটি পরিবর্তন করা উচিত নয়। যাইহোক, আবর্তনগুলি বিচক্ষণ ত্রুটির পরিচয় দেয় - 90 ডিগ্রির গুণকের দ্বারা আবর্তন ব্যতীত। অতএব, এই জাতীয় কোনও ঘূর্ণন বক্রতা সংরক্ষণ করা উচিত।

ডিফারেনশিয়াল ক্যালকুলাসের প্রথম ধারণাটি মূলধন করে আমরা বুঝতে পারি : ডেরিভেটিভগুলি হ'ল পার্থক্যফলকের সীমা। আমাদের সত্যই এটি জানা দরকার to

dxxএক্স-দিকনির্দেশে দ্বিতীয় আংশিক ডেরাইভেটিভের জন্য এটি একটি পৃথক অনুমান হিসাবে বিবেচিত হবে। এই নির্দিষ্ট আনুমানিকতা (অনেকগুলি সম্ভবের মধ্যে) কোষের মাধ্যমে একটি অনুভূমিক প্রশস্ততা বরাবর পৃষ্ঠকে নমুনা দিয়ে গণনা করা হয়। সারি ২ এবং কলাম ২-এ লিখিত (২,২) কেন্দ্রীয় কক্ষটি সনাক্ত করে, ট্রান্সসেক্টটি (1,2), (2,2) এবং (3,2) এ কোষগুলির মধ্য দিয়ে যায়।

এই ট্রান্সেক্টে বরাবর, প্রথম ডেরাইভেটিভগুলি তাদের পার্থক্যফলক, (* x32- * x22) / L এবং (* x22- * x12) / L দ্বারা প্রায় হয় যেখানে এল কোষগুলির মধ্যে (সাধারণ) দূরত্ব হয় (স্পষ্টতই সমান cellSizeAvg)) দ্বিতীয় ডেরাইভেটিভস ফলনকারী এর পার্থক্য ভাগফল দ্বারা প্রাপ্ত হয়

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

এল ^ 2 দ্বারা বিভাগ লক্ষ্য করুন!

একইভাবে, y- দিকের দ্বিতীয় আংশিক ডেরাইভেটিভের জন্য একটি পৃথক অনুমান dyyহিসাবে বিবেচিত হয়। (২,২), (২,২), এবং (২,৩) কোষের মধ্য দিয়ে ট্রান্সসেক্টটি উল্লম্ব হয়। সূত্রটি দেখতে একই রকম হবে dxxতবে স্থানান্তরিত সাবস্ক্রিপ্টগুলির সাথে। এটি প্রশ্নের তৃতীয় সূত্র হবে - তবে আপনাকে এখনও এল ^ 2 দ্বারা ভাগ করতে হবে।

মিশ্র দ্বিতীয় আংশিক ডেরাইভেটিভ, dxyপার্থক্য দুটি কোষ পৃথক করে অনুমান করা যেতে পারে । উদাহরণস্বরূপ, কক্ষে x (2) এর সাথে সম্মিলিত প্রথম ডেরাইভেটিভ (শীর্ষ মধ্য কোষটি, কেন্দ্রীয় কক্ষটি নয়!) এর ডানদিকের মান থেকে তার বামে, * x13, বিয়োগ করে অনুমান করা যেতে পারে x33, এবং এই কক্ষগুলির মধ্যে দূরত্ব দ্বারা বিভাজন, 2L। X এ শ্রমের সাথে প্রথম ডেরাইভেটিভ (২.১) (নীচের মাঝের ঘর) দ্বারা অনুমান করা হয় (* x31 - * x11) / (2L)। তাদের পার্থক্য, 2L দ্বারা বিভক্ত, মিশ্রিত আংশিক অনুমান করে, দেয়

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

"মোট" বক্রতা বলতে কী বোঝায় তা আমি সত্যিই নিশ্চিত নই তবে এটি সম্ভবত গাউসিয়ান বক্রতা (যা মূল কার্ভচারের পণ্য) হতে হবে। মতে বিনম্র ও ওয়ালটন 2000 , সমীকরণ 2.4, গসিয়ান dxy ^ 2 - বক্রতা dxx * dyy বিভাজক দ্বারা প্রাপ্ত হয় (নোটিশ বিয়োগ চিহ্ন - এই একটি হল নির্ধারক ) পৃষ্ঠের গ্রেডিয়েন্টের আদর্শ বর্গ দ্বারা। সুতরাং, প্রশ্নে উদ্ধৃত মানটি মোটামুটি একটি বক্রতা নয়, তবে এটি গাউসিয়ান বক্রতার জন্য বিশৃঙ্খলাযুক্ত আংশিক অভিব্যক্তির মতো দেখায়।

আমরা তখন কোডটিতে ছয়টি ত্রুটি খুঁজে পাই , যার মধ্যে বেশিরভাগই সমালোচনা:

  1. dxx কে 1 দ্বারা নয়, L ^ 2 দিয়ে ভাগ করা দরকার needs

  2. DY কে 1 নয়, L ^ 2 দ্বারা ভাগ করা দরকার।

  3. ডাইসির চিহ্নটি ভুল। (যদিও এটি বক্রতা সূত্রে কোনও প্রভাব ফেলবে না))

  4. আপনারা যেমন খেয়াল করেছেন তেমন dy এবং dxy এর সূত্রগুলি মিশ্রিত হয়।

  5. রিটার্ন ভ্যালুতে একটি পদ থেকে একটি নেতিবাচক চিহ্নটি অনুপস্থিত।

  6. এটি আসলে একটি বক্রতা গণনা করে না, তবে কেবল বক্রতার জন্য যুক্তিযুক্ত প্রকাশের সংখ্যক।


খুব সাধারণ চেক হিসাবে, আসুন যাচাই করুন যে পরিবর্তিত সূত্রটি চতুর্ভুজীয় পৃষ্ঠগুলির উপরের অনুভূমিক অবস্থানগুলির জন্য যুক্তিসঙ্গত মান প্রদান করে returns সমন্বয় ব্যবস্থার উত্স হিসাবে এই জাতীয় অবস্থান গ্রহণ করা এবং এর উচ্চতা শূন্য উচ্চতায় হওয়া, এ জাতীয় সমস্ত পৃষ্ঠের ফর্মের সমীকরণ রয়েছে

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

ধ্রুবক a, b, এবং c এর জন্য। স্থানাঙ্কে কেন্দ্রীয় বর্গক্ষেত্র (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 - (2 বি) ^ 2 = 4 (এসি - বি ^ 2) হিসাবে অনুমান করা হয়। (মেক অ্যান্ড ওয়ালটন সূত্রে ডিনোমিনেটর এক্ষেত্রে একটি।) এটি কি কোনও অর্থবোধ করে? ক, খ এবং গ এর কিছু সাধারণ মান চেষ্টা করুন:

  • a = c = 1, b = 0. এটি গোলাকার প্যারাবোলয়েড; এর গাউসিয়ান বক্রতা ধনাত্মক হওয়া উচিত। 4 (এসি-বি ^ 2) এর মানটি ইতিবাচক (4 এর সমান) is

  • a = c = 0, b = 1. এটি একটি শীটের একটি হাইপারবোলয়েড - একটি জিন - negative ণাত্মক বক্রতার পৃষ্ঠের আদর্শ উদাহরণ । অবশ্যই যথেষ্ট, 4 (এসি-বি ^ 2) = -4।

  • a = 1, b = 0, c = -1। এটি একটি শীটের হাইপারবোলয়েডের অন্য সমীকরণ (45 ডিগ্রি দ্বারা আবর্তিত)। আবার, 4 (এসি-বি ^ 2) = -4।

  • a = 1, b = 0, c = 0. এটি একটি সমতল পৃষ্ঠ যা প্যারাবোলিক আকারে ভাঁজ করে। এখন, 4 (এসি-বি ^ 2) = 0: শূন্য গাউসিয়ান বক্রতা সঠিকভাবে এই পৃষ্ঠের সমতলতা সনাক্ত করে।

আপনি যদি এই উদাহরণগুলিতে প্রশ্নের কোড ব্যবহার করে দেখে থাকেন তবে আপনি সর্বদা এটির ভ্রান্ত মান পেয়ে যাবেন।


সকালে আপনার সুস্পষ্ট বিবরণ পড়তে এটি সর্বদা আকর্ষণীয়।
টমেক

@Tomek এখন সেখানে কূটনৈতিক (= কৌশলী এবং অত্যন্ত দ্ব্যর্থক) মন্তব্য! :-)
হোবার

1
এই ধরনের একটি সম্পূর্ণ উত্তরের জন্য আপনাকে অনেক ধন্যবাদ! আমি সূত্রের ত্রুটিগুলি রিপোর্ট করতে চলেছি কারণ এখনই নিশ্চিত হয়েছি যে এখানে রিপোর্ট করার মতো কিছু আছে। :)
তাপাদি

@ শুভ: আমি টোমকের জবাবটি নিশ্চিত করতে পারি যে এই ফোরামে আপনার মন্তব্যগুলি পড়া সর্বদা আকর্ষণীয় এবং আমি তাদের কাছ থেকে সর্বদা নতুন কিছু শিখি !! আমাদের সাথে আপনার অমূল্য জ্ঞান বিনামূল্যে ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ !! আমি আরও একটি প্রশ্ন জিজ্ঞাসা করলে আপনি কি আপত্তি করবেন: কোনও জিআইএস অ্যাপ্লিকেশনটিতে, ভূখণ্ডের বক্রতা বিশ্লেষণ (রাস্টার) সঞ্চালিত হলে, এটি সর্বদা গাউসীয় বক্রতা থাকে? কখনও কি গড়ন বাঁক?
মার্কো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.