// 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 */
| 386 | // Error status |
| 387 | */ |
| 388 | int PCAFeatureMaps(CvLSVMFeatureMapCaskade *map) |
| 389 | { |
| 390 | int i,j, ii, jj, k; |
| 391 | int sizeX, sizeY, p, pp, xp, yp, pos1, pos2; |
| 392 | float * newData; |
| 393 | float val; |
| 394 | float nx, ny; |
| 395 | |
| 396 | sizeX = map->sizeX; |
| 397 | sizeY = map->sizeY; |
| 398 | p = map->numFeatures; |
| 399 | pp = NUM_SECTOR * 3 + 4; |
| 400 | yp = 4; |
| 401 | xp = NUM_SECTOR; |
| 402 | |
| 403 | nx = 1.0f / sqrtf((float)(xp * 2)); |
| 404 | ny = 1.0f / sqrtf((float)(yp )); |
| 405 | |
| 406 | newData = (float *)malloc (sizeof(float) * (sizeX * sizeY * pp)); |
| 407 | |
| 408 | for(i = 0; i < sizeY; i++) |
| 409 | { |
| 410 | for(j = 0; j < sizeX; j++) |
| 411 | { |
| 412 | pos1 = ((i)*sizeX + j)*p; |
| 413 | pos2 = ((i)*sizeX + j)*pp; |
| 414 | k = 0; |
| 415 | for(jj = 0; jj < xp * 2; jj++) |
| 416 | { |
| 417 | val = 0; |
| 418 | for(ii = 0; ii < yp; ii++) |
| 419 | { |
| 420 | val += map->map[pos1 + yp * xp + ii * xp * 2 + jj]; |
| 421 | }/*for(ii = 0; ii < yp; ii++)*/ |
| 422 | newData[pos2 + k] = val * ny; |
| 423 | k++; |
| 424 | }/*for(jj = 0; jj < xp * 2; jj++)*/ |
| 425 | for(jj = 0; jj < xp; jj++) |
| 426 | { |
| 427 | val = 0; |
| 428 | for(ii = 0; ii < yp; ii++) |
| 429 | { |
| 430 | val += map->map[pos1 + ii * xp + jj]; |
| 431 | }/*for(ii = 0; ii < yp; ii++)*/ |
| 432 | newData[pos2 + k] = val * ny; |
| 433 | k++; |
| 434 | }/*for(jj = 0; jj < xp; jj++)*/ |
| 435 | for(ii = 0; ii < yp; ii++) |
| 436 | { |
| 437 | val = 0; |
| 438 | for(jj = 0; jj < 2 * xp; jj++) |
| 439 | { |
| 440 | val += map->map[pos1 + yp * xp + ii * xp * 2 + jj]; |
| 441 | }/*for(jj = 0; jj < xp; jj++)*/ |
| 442 | newData[pos2 + k] = val * nx; |
| 443 | k++; |
| 444 | } /*for(ii = 0; ii < yp; ii++)*/ |
| 445 | }/*for(j = 0; j < sizeX; j++)*/ |