----------------------------------------------------------------------* * Normalize/Invert * *----------------------------------------------------------------------*/ ! * \brief kernelNormalize() * * \param[in] kels source kel, to be normalized * \param[in] normsum desired sum of elements in keld * \return keld normalized version
| 407 | * </pre> |
| 408 | */ |
| 409 | L_KERNEL * |
| 410 | kernelNormalize(L_KERNEL *kels, |
| 411 | l_float32 normsum) |
| 412 | { |
| 413 | l_int32 i, j, sx, sy, cx, cy; |
| 414 | l_float32 sum, factor; |
| 415 | L_KERNEL *keld; |
| 416 | |
| 417 | PROCNAME("kernelNormalize"); |
| 418 | |
| 419 | if (!kels) |
| 420 | return (L_KERNEL *)ERROR_PTR("kels not defined", procName, NULL); |
| 421 | |
| 422 | kernelGetSum(kels, &sum); |
| 423 | if (L_ABS(sum) < 0.00001) { |
| 424 | L_WARNING("null sum; not normalizing; returning a copy\n", procName); |
| 425 | return kernelCopy(kels); |
| 426 | } |
| 427 | |
| 428 | kernelGetParameters(kels, &sy, &sx, &cy, &cx); |
| 429 | if ((keld = kernelCreate(sy, sx)) == NULL) |
| 430 | return (L_KERNEL *)ERROR_PTR("keld not made", procName, NULL); |
| 431 | keld->cy = cy; |
| 432 | keld->cx = cx; |
| 433 | |
| 434 | factor = normsum / sum; |
| 435 | for (i = 0; i < sy; i++) |
| 436 | for (j = 0; j < sx; j++) |
| 437 | keld->data[i][j] = factor * kels->data[i][j]; |
| 438 | |
| 439 | return keld; |
| 440 | } |
| 441 | |
| 442 | |
| 443 | /*! |
no test coverage detected