IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 22738


Ignore:
Timestamp:
Mar 2, 2009, 11:50:40 AM (17 years ago)
Author:
Paul Price
Message:

Add checking for non-finite covariance elements.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/imageops/psImageCovariance.c

    r21467 r22738  
    4343    } else {
    4444        covar = psImageCovarianceNone();
     45    }
     46
     47    // Check for non-finite elements
     48    for (int y = kernel->yMin; y <= kernel->yMax; y++) {
     49        for (int x = kernel->xMin; x <= kernel->xMax; x++) {
     50            if (!isfinite(kernel->kernel[y][x])) {
     51                psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     52                        "Non-finite covariance matrix element in kernel at %d,%d", x, y);
     53                psFree(covar);
     54                return NULL;
     55            }
     56        }
     57    }
     58    for (int y = covar->yMin; y <= covar->yMax; y++) {
     59        for (int x = covar->xMin; x <= covar->xMax; x++) {
     60            if (!isfinite(covar->kernel[y][x])) {
     61                psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     62                        "Non-finite covariance matrix element in covariance matrix at %d,%d", x, y);
     63                psFree(covar);
     64                return NULL;
     65            }
     66        }
    4567    }
    4668
     
    110132float psImageCovarianceFactor(const psKernel *covariance)
    111133{
    112     return covariance ? covariance->kernel[0][0] : NAN;
     134    return covariance ? covariance->kernel[0][0] : 1.0;
    113135}
    114136
     
    144166        for (int y = covar->yMin; y <= covar->yMax; y++) {
    145167            for (int x = covar->xMin; x <= covar->xMax; x++) {
     168                if (!isfinite(covar->kernel[y][x])) {
     169                    psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     170                            "Non-finite covariance matrix element at %d,%d for input %d",
     171                            x, y, i);
     172                    psFree(sum);
     173                    return NULL;
     174                }
    146175                sum->kernel[y][x] += covar->kernel[y][x];
    147176            }
     
    192221            int radius = PS_MAX(abs(x), abs(y)); // Squarish radius
    193222            psAssert(radius <= maxRadius, "Radius doesn't fit");
     223            if (!isfinite(covar->kernel[y][x])) {
     224                psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Non-finite covariance matrix element at %d,%d",
     225                        x, y);
     226                return NULL;
     227            }
    194228            radiusSum->data.F64[radius] += fabsf(covar->kernel[y][x]);
    195229            sum += fabsf(covar->kernel[y][x]);
Note: See TracChangeset for help on using the changeset viewer.