|
From: Gustavo P. B. <gb...@us...> - 2005-05-31 03:20:21
|
Update of /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm/features/correlation In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1784/src/methods/hsvcm/features/correlation Modified Files: correlation.cpp Log Message: - Fixed correlation calculation Index: correlation.cpp =================================================================== RCS file: /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm/features/correlation/correlation.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- correlation.cpp 28 May 2005 21:29:27 -0000 1.5 +++ correlation.cpp 31 May 2005 03:20:02 -0000 1.6 @@ -84,31 +84,28 @@ float mult; // ----- V component ------------- - //mean for (i=0; i < cmSizeV; ++i) meanv += pv[i]*i; - //variance - for (i=0; i < cmSizeV; ++i) - sum_sqrv += (i - meanv); - //standard deviation - stddevv = sqrt(sum_sqrv); - // ----- H component ------------ for (j=0; j < cmSizeH; ++j) meanh += pv[j]*j; - //variance - for (j=0; j < cmSizeH; ++j) - sum_sqrh += (j - meanh); - //standard deviation - stddevh = sqrt(sum_sqrh); - // ----- S component ------------ for (k=0; k < cmSizeS; ++k) means += pv[k]*k; + //variance - for (k=0; k < cmSizeS; ++k) - sum_sqrs += (k - means); - //standard deviation + for (i = 0; i < cmSizeV; ++i) + for (j = 0; j < cmSizeH; ++j) + for (k = 0; k < cmSizeS; ++k) + { + value = cm[i][j][k]; + sum_sqrv += value * (i-meanv) * (i-meanv); + sum_sqrh += value * (j-meanh) * (j-meanh); + sum_sqrs += value * (k-means) * (k-means); + } + + stddevv = sqrt(sum_sqrv); + stddevh = sqrt(sum_sqrh); stddevs = sqrt(sum_sqrs); //and now (finally) the correlation itself: @@ -117,7 +114,10 @@ for (j = 0; j < cmSizeH; ++j) for (k = 0; k < cmSizeS; ++k) { - tmp += (i * j * k * cm[i][j][k] - meanv * meanh * means) / (stddevv * stddevh * stddevs); + float mult = stddevv * stddevh * stddevs; + if (mult == 0) + mult = 0.000000000001; + tmp += (i * j * k * cm[i][j][k] - meanv * meanh * means) / mult; } //CHECKME: validate all this code return tmp; |