// Feature map Normalization and Truncation // // API // int normalizeAndTruncate(featureMap *map, const float alfa); // INPUT // map - feature map // alfa - truncation threshold // OUTPUT // map - truncated and normalized feature map // RESULT // Error status */
| 288 | // Error status |
| 289 | */ |
| 290 | int normalizeAndTruncate(CvLSVMFeatureMapCaskade *map, const float alfa) |
| 291 | { |
| 292 | int i,j, ii; |
| 293 | int sizeX, sizeY, p, pos, pp, xp, pos1, pos2; |
| 294 | float * partOfNorm; // norm of C(i, j) |
| 295 | float * newData; |
| 296 | float valOfNorm; |
| 297 | |
| 298 | sizeX = map->sizeX; |
| 299 | sizeY = map->sizeY; |
| 300 | partOfNorm = (float *)malloc (sizeof(float) * (sizeX * sizeY)); |
| 301 | |
| 302 | p = NUM_SECTOR; |
| 303 | xp = NUM_SECTOR * 3; |
| 304 | pp = NUM_SECTOR * 12; |
| 305 | |
| 306 | for(i = 0; i < sizeX * sizeY; i++) |
| 307 | { |
| 308 | valOfNorm = 0.0f; |
| 309 | pos = i * map->numFeatures; |
| 310 | for(j = 0; j < p; j++) |
| 311 | { |
| 312 | valOfNorm += map->map[pos + j] * map->map[pos + j]; |
| 313 | }/*for(j = 0; j < p; j++)*/ |
| 314 | partOfNorm[i] = valOfNorm; |
| 315 | }/*for(i = 0; i < sizeX * sizeY; i++)*/ |
| 316 | |
| 317 | sizeX -= 2; |
| 318 | sizeY -= 2; |
| 319 | |
| 320 | newData = (float *)malloc (sizeof(float) * (sizeX * sizeY * pp)); |
| 321 | //normalization |
| 322 | for(i = 1; i <= sizeY; i++) |
| 323 | { |
| 324 | for(j = 1; j <= sizeX; j++) |
| 325 | { |
| 326 | valOfNorm = sqrtf( |
| 327 | partOfNorm[(i )*(sizeX + 2) + (j )] + |
| 328 | partOfNorm[(i )*(sizeX + 2) + (j + 1)] + |
| 329 | partOfNorm[(i + 1)*(sizeX + 2) + (j )] + |
| 330 | partOfNorm[(i + 1)*(sizeX + 2) + (j + 1)]) + FLT_EPSILON; |
| 331 | pos1 = (i ) * (sizeX + 2) * xp + (j ) * xp; |
| 332 | pos2 = (i-1) * (sizeX ) * pp + (j-1) * pp; |
| 333 | for(ii = 0; ii < p; ii++) |
| 334 | { |
| 335 | newData[pos2 + ii ] = map->map[pos1 + ii ] / valOfNorm; |
| 336 | }/*for(ii = 0; ii < p; ii++)*/ |
| 337 | for(ii = 0; ii < 2 * p; ii++) |
| 338 | { |
| 339 | newData[pos2 + ii + p * 4] = map->map[pos1 + ii + p] / valOfNorm; |
| 340 | }/*for(ii = 0; ii < 2 * p; ii++)*/ |
| 341 | valOfNorm = sqrtf( |
| 342 | partOfNorm[(i )*(sizeX + 2) + (j )] + |
| 343 | partOfNorm[(i )*(sizeX + 2) + (j + 1)] + |
| 344 | partOfNorm[(i - 1)*(sizeX + 2) + (j )] + |
| 345 | partOfNorm[(i - 1)*(sizeX + 2) + (j + 1)]) + FLT_EPSILON; |
| 346 | for(ii = 0; ii < p; ii++) |
| 347 | { |