|
From: Gustavo P. B. <gb...@us...> - 2005-04-08 20:02:22
|
Update of /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm/features/contrast In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30244 Modified Files: contrast.cpp Log Message: Implemented contrast Index: contrast.cpp =================================================================== RCS file: /cvsroot/kimageprocess/kimageprocess/src/methods/hsvcm/features/contrast/contrast.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- contrast.cpp 6 Apr 2005 04:12:53 -0000 1.3 +++ contrast.cpp 8 Apr 2005 20:02:13 -0000 1.4 @@ -29,6 +29,8 @@ #include <ktfeaturemanager.h> #include <ktmethod.h> +#define MAX(x,y) ( x > y ? x : y ) + K_EXPORT_COMPONENT_FACTORY( kimageprocess_hsvcm_contrast, KGenericFactory<KTHSVCMContrast>( "kimageprocess_hsvcm_contrast" ) ) @@ -52,11 +54,62 @@ float ***cm = (float***) method()->data(direction); KTMethod *m = method(); - cmSize[0] = m->dataSize(0); - cmSize[1] = m->dataSize(1); - cmSize[2] = m->dataSize(2); + cmSize[0] = m->dataSize(0); // v + cmSize[1] = m->dataSize(1); // h + cmSize[2] = m->dataSize(2); // s - return 0.0; + double bigsum[3] = {0, 0, 0}; + + // calculating the S component + int max = MAX(cmSize[1], cmSize[0]); + for (int k=0; k < cmSize[2]; k++) + { + float sum[max]; + for (int a=0; a < max; a++) + sum[max] = 0; + for (int i=0; i < cmSize[0]; i++) + for (int j=0; j < cmSize[1]; j++) + sum[abs(i-j)] += cm[i][j][k]; + + //calculate bigsum + for (int n=0; n < max; n++) + bigsum[0] += sum[n] * n * n; + } + + // calculating the H component + max = MAX(cmSize[2], cmSize[0]); + for (int j=0; j < cmSize[1]; j++) + { + float sum[max]; + for (int a=0; a < max; a++) + sum[max] = 0; + for (int i=0; i < cmSize[0]; i++) + for (int k=0; k < cmSize[2]; k++) + sum[abs(i-k)] += cm[i][j][k]; + + //calculate bigsum + for (int n=0; n < max; n++) + bigsum[1] += sum[n] * n * n; + } + + // calculating the S component + max = MAX(cmSize[1], cmSize[2]); + for (int i=0; i < cmSize[2]; i++) + { + float sum[max]; + for (int a=0; a < max; a++) + sum[max] = 0; + for (int k=0; k < cmSize[2]; k++) + for (int j=0; j < cmSize[1]; j++) + sum[abs(k-j)] += cm[i][j][k]; + + //calculate bigsum + for (int n=0; n < max; n++) + bigsum[2] += sum[n] * n * n; + } + float result = bigsum[0] / cmSize[2] + bigsum[1] / cmSize[1] + bigsum[2] / cmSize[0]; + kdDebug() << "Result: " << result << endl; + return result; } #include "contrast.moc" |