// Feature map reduction // In each cell we reduce dimension of the feature vector // according to original paper special procedure // // API // int PCAFeatureMaps(featureMap *map) // INPUT // map - feature map // OUTPUT // map - feature map // RESULT // Error status */
| 412 | // Error status |
| 413 | */ |
| 414 | int PCAFeatureMaps(CvLSVMFeatureMapCaskade *map) |
| 415 | { |
| 416 | int i,j, ii, jj, k; |
| 417 | int sizeX, sizeY, p, pp, xp, yp, pos1, pos2; |
| 418 | float * newData; |
| 419 | float val; |
| 420 | float nx, ny; |
| 421 | |
| 422 | sizeX = map->sizeX; |
| 423 | sizeY = map->sizeY; |
| 424 | p = map->numFeatures; |
| 425 | pp = NUM_SECTOR * 3 + 4; |
| 426 | yp = 4; |
| 427 | xp = NUM_SECTOR; |
| 428 | |
| 429 | nx = 1.0f / sqrtf((float)(xp * 2)); |
| 430 | ny = 1.0f / sqrtf((float)(yp )); |
| 431 | |
| 432 | newData = (float *)malloc (sizeof(float) * (sizeX * sizeY * pp)); |
| 433 | |
| 434 | for(i = 0; i < sizeY; i++) |
| 435 | { |
| 436 | for(j = 0; j < sizeX; j++) |
| 437 | { |
| 438 | pos1 = ((i)*sizeX + j)*p; |
| 439 | pos2 = ((i)*sizeX + j)*pp; |
| 440 | k = 0; |
| 441 | for(jj = 0; jj < xp * 2; jj++) |
| 442 | { |
| 443 | val = 0; |
| 444 | for(ii = 0; ii < yp; ii++) |
| 445 | { |
| 446 | val += map->map[pos1 + yp * xp + ii * xp * 2 + jj]; |
| 447 | }/*for(ii = 0; ii < yp; ii++)*/ |
| 448 | newData[pos2 + k] = val * ny; |
| 449 | k++; |
| 450 | }/*for(jj = 0; jj < xp * 2; jj++)*/ |
| 451 | for(jj = 0; jj < xp; jj++) |
| 452 | { |
| 453 | val = 0; |
| 454 | for(ii = 0; ii < yp; ii++) |
| 455 | { |
| 456 | val += map->map[pos1 + ii * xp + jj]; |
| 457 | }/*for(ii = 0; ii < yp; ii++)*/ |
| 458 | newData[pos2 + k] = val * ny; |
| 459 | k++; |
| 460 | }/*for(jj = 0; jj < xp; jj++)*/ |
| 461 | for(ii = 0; ii < yp; ii++) |
| 462 | { |
| 463 | val = 0; |
| 464 | for(jj = 0; jj < 2 * xp; jj++) |
| 465 | { |
| 466 | val += map->map[pos1 + yp * xp + ii * xp * 2 + jj]; |
| 467 | }/*for(jj = 0; jj < xp; jj++)*/ |
| 468 | newData[pos2 + k] = val * nx; |
| 469 | k++; |
| 470 | } /*for(ii = 0; ii < yp; ii++)*/ |
| 471 | }/*for(j = 0; j < sizeX; j++)*/ |