我已经阅读了几个QGis-1.7.4栅格滤波器的源代码,这些栅格滤波器计算斜率,纵横比和曲率。
过滤器中有一个计算总曲率的公式令我困惑。
源文件位于QGis的当前版本中,具有以下路径:
qgis-1.7.4 / src / analysis / raster / 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不对称吗?