|
From: Gustavo P. B. <gb...@us...> - 2005-05-24 03:37:03
|
Update of /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm/features/correlation In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5817/src/methods/hsvcm/features/correlation Modified Files: correlation.cpp Log Message: - Removed unused struct - Implemented the correlation function (which still have errors when calculating but that is another story ;) Index: correlation.cpp =================================================================== RCS file: /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm/features/correlation/correlation.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- correlation.cpp 6 Apr 2005 04:12:53 -0000 1.3 +++ correlation.cpp 24 May 2005 03:36:54 -0000 1.4 @@ -29,6 +29,8 @@ #include <ktfeaturemanager.h> #include <ktmethod.h> +#include <math.h> + K_EXPORT_COMPONENT_FACTORY( kimageprocess_hsvcm_correlation, KGenericFactory<KTHSVCMCorrelation>( "kimageprocess_hsvcm_correlation" ) ) @@ -48,15 +50,76 @@ float KTHSVCMCorrelation::_calculate(KTImage *img, int direction) { - int cmSize[3]; + int cmSizeV, cmSizeH, cmSizeS, i, j, k; float ***cm = (float***) method()->data(direction); KTMethod *m = method(); - cmSize[0] = m->dataSize(0); - cmSize[1] = m->dataSize(1); - cmSize[2] = m->dataSize(2); + cmSizeV = m->dataSize(0); + cmSizeH = m->dataSize(1); + cmSizeS = m->dataSize(2); - return 0.0; + float pv[cmSizeV], ph[cmSizeH], ps[cmSizeS]; + float sum_sqrv=0, sum_sqrh=0, sum_sqrs=0, tmp; + float meanv=0, meanh=0, means=0, stddevv,stddevh,stddevs; + + //initializing matrices + for (i=0; i < cmSizeV; ++i) + pv[i] = 0; + for (j=0; j < cmSizeH; ++j) + ph[j] = 0; + for (k=0; k < cmSizeS; ++k) + ps[k] = 0; + + //calculate the sum for each component + float value; + for (i = 0; i < cmSizeV; ++i) + for (j = 0; j < cmSizeH; ++j) + for (k = 0; k < cmSizeS; ++k) + { + value = cm[i][j][k]; + pv[i] += value; + ph[j] += value; + ps[k] += value; + } + + float mult; + // ----- V component ------------- + for (i=0; i < cmSizeV; ++i) + { + mult = pv[i]*i; + meanv += mult; + sum_sqrv += mult * i; + } + stddevv = sqrt((sum_sqrv - meanv) * (sum_sqrv - meanv)); + + // ----- H component ------------ + for (j=0; j < cmSizeH; ++j) + { + mult = ph[j]*j; + meanh += mult; + sum_sqrh += mult * j; + } + stddevh = sqrt((sum_sqrh - meanh) * (sum_sqrh - meanh)); + + // ----- S component ------------ + for (k=0; k < cmSizeS; ++k) + { + mult = ps[k]*k; + means+= mult; + sum_sqrs += mult * k; + } + stddevs = sqrt((sum_sqrs - means) * (sum_sqrs - means)); + + //and now (finally) the correlation itself: + tmp = 0; + for (i = 0; i < cmSizeV; ++i) + for (j = 0; j < cmSizeH; ++j) + for (k = 0; k < cmSizeS; ++k) + { + tmp += (i * j * k * cm[i][j][k] - meanv * means * meanv) / (stddevv * stddevh * stddevs); + } + //CHECKME: validate all this code + return tmp; } #include "correlation.moc" |