瀏覽代碼

r.texture: optimize

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@69880 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 8 年之前
父節點
當前提交
fa96f4561a
共有 1 個文件被更改,包括 28 次插入2 次删除
  1. 28 2
      raster/r.texture/h_measure.c

+ 28 - 2
raster/r.texture/h_measure.c

@@ -391,9 +391,17 @@ float f1_asm(void)
     float sum = 0;
     float **P = P_matrix;
 
+    /*
     for (i = 0; i < Ng; i++)
 	for (j = 0; j < Ng; j++)
 	    sum += P[i][j] * P[i][j];
+    */
+
+    for (i = 0; i < Ng; i++) {
+	sum += P[i][i] * P[i][i];
+	for (j = 0; j < i; j++)
+	    sum += 2 * P[i][j] * P[i][j];
+    }
 
     return sum;
 }
@@ -501,9 +509,17 @@ float f5_idm(void)
     float idm = 0;
     float **P = P_matrix;
 
+    /*
     for (i = 0; i < Ng; i++)
 	for (j = 0; j < Ng; j++)
 	    idm += P[i][j] / (1 + (tone[i] - tone[j]) * (tone[i] - tone[j]));
+    */
+
+    for (i = 0; i < Ng; i++) {
+	idm += P[i][i];
+	for (j = 0; j < i; j++)
+	    idm += 2 * P[i][j] / (1 + (tone[i] - tone[j]) * (tone[i] - tone[j]));
+    }
 
     return idm;
 }
@@ -577,12 +593,23 @@ float f9_entropy(void)
     float entropy = 0;
     float **P = P_matrix;
 
+    /*
     for (i = 0; i < Ng; i++) {
 	for (j = 0; j < Ng; j++) {
 	    if (P[i][j] > 0)
 		entropy += P[i][j] * log2(P[i][j]);
 	}
     }
+    */
+
+    for (i = 0; i < Ng; i++) {
+	if (P[i][i] > 0)
+	    entropy += P[i][i] * log2(P[i][i]);
+	for (j = 0; j < i; j++) {
+	    if (P[i][j] > 0)
+		entropy += 2 * P[i][j] * log2(P[i][j]);
+	}
+    }
 
     return -entropy;
 }
@@ -630,7 +657,7 @@ float f12_icorr(void)
     float hx = 0, hy = 0, hxy = 0, hxy1 = 0;
     float **P = P_matrix;
 
-    for (i = 0; i < Ng; i++)
+    for (i = 0; i < Ng; i++) {
 	for (j = 0; j < Ng; j++) {
 	    if (px[i] * py[j] > 0)
 		hxy1 -= P[i][j] * log2(px[i] * py[j]);
@@ -639,7 +666,6 @@ float f12_icorr(void)
 	}
 
     /* Calculate entropies of px and py - is this right? */
-    for (i = 0; i < Ng; i++) {
 	if (px[i] > 0)
 	    hx -= px[i] * log2(px[i]);
 	if (py[i] > 0)