IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 5, 2005, 11:16:15 AM (22 years ago)
Author:
desonia
Message:

adjusted psKernelGenerate to better match Tonry's code. Also made
mis-match sizes of input vectors an error.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/test/image/tst_psImageConvolve.c

    r2273 r2911  
    55 *  @author Robert DeSonia, MHPCC
    66 *
    7  *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
    8  *  @date $Date: 2004-11-04 01:05:00 $
     7 *  @version $Revision: 1.8 $ $Name: not supported by cvs2svn $
     8 *  @date $Date: 2005-01-05 21:16:15 $
    99 *
    10  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     10 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
    1111 */
    1212
     
    117117static psS32 testKernelGenerate(void)
    118118{
    119     psS32 size = 4;
    120     psS32 t[] = { 1, 2, 8, 10 };
    121     psS32 x[] = { 0, 1, 0, -1 };
    122     psS32 y[] = { 2, 1, -1, -2 };
     119    psS32 size = 5;
     120    psS32 t[] = { 1, 2, 8, 9, 10 };
     121    psS32 x[] = { 0, 1, 0, -1, 0 };
     122    psS32 y[] = { 2, 1, -1, -2, 0 };
    123123    psKernelType sum;
    124124
     
    142142    if (result->xMin != -1 || result->xMax != 1 ||
    143143            result->yMin != -2 || result->yMax != 2) {
    144         psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result had a range of [%d:%d,%d:%d].  Suppose to be [0:1,1:2].",
     144        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result had a range of [%d:%d,%d:%d].  Suppose to be [-2:2,-1:1].",
    145145                result->xMin, result->xMax, result->yMin, result->yMax);
    146146        return 2;
     
    148148
    149149    sum = 0.0;
     150    printf("Resulting kernel:\n");
    150151    for (psS32 y = result->yMin; y <= result->yMax; y++) {
    151152        for (psS32 x = result->xMin; x <= result->xMax; x++) {
     153            printf(" %6.2f ", result->kernel[y][x]);
    152154            sum += result->kernel[y][x];
    153155        }
     156        printf("\n");
    154157    }
    155158    if (fabsf(1.0 - sum) > FLT_EPSILON) {
     
    161164    }
    162165
    163     if (fabsf(result->kernel[2][0] - 1.0/10.0) > FLT_EPSILON ||
    164             fabsf(result->kernel[ 1][ 1] - 6.0/10.0) > FLT_EPSILON ||
    165             fabsf(result->kernel[ 0][ 0] - 1.0/10.0) > FLT_EPSILON ||
    166             fabsf(result->kernel[-1][ 0] - 2.0/10.0) > FLT_EPSILON ||
    167             fabsf(result->kernel[-2][-1] - 0.0/10.0) > FLT_EPSILON) {
    168         psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values, %g,%g;%g,%g, are wrong. Suppose to be 2,6;1,0.",
    169                 result->kernel[-1][0], result->kernel[1][1],
    170                 result->kernel[2][0], result->kernel[-2][-1]);
     166    if (fabsf(result->kernel[-2][0] - 0.1) > FLT_EPSILON ||
     167            fabsf(result->kernel[ -1][ -1] - 0.1) > FLT_EPSILON ||
     168            fabsf(result->kernel[ 1][ 0] - 0.6) > FLT_EPSILON ||
     169            fabsf(result->kernel[2][1] - 0.1) > FLT_EPSILON) {
     170        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values, %g,%g,%g,%g, are wrong. Suppose to be 0.1,0.1,0.6,0.1",
     171                result->kernel[-2][0], result->kernel[-1][-1],
     172                result->kernel[1][0], result->kernel[2][1]);
    171173
    172174        return 4;
     
    203205
    204206    sum = 0.0;
     207    printf("Resulting kernel (relative=true):\n");
    205208    for (psS32 y = result->yMin; y <= result->yMax; y++) {
    206209        for (psS32 x = result->xMin; x <= result->xMax; x++) {
     210            printf(" %6.2f ", result->kernel[y][x]);
    207211            sum += result->kernel[y][x];
    208212        }
     213        printf("\n");
    209214    }
    210215    if (fabsf(1.0 - sum) > FLT_EPSILON) {
     
    216221    }
    217222
    218     if (fabsf(result->kernel[0][0] - 1.0/21.0) > FLT_EPSILON ||
    219             fabsf(result->kernel[2][0] - 2.0/21.0) > FLT_EPSILON ||
    220             fabsf(result->kernel[3][1] - 8.0/21.0) > FLT_EPSILON ||
    221             fabsf(result->kernel[2][1] - 10.0/21.0) > FLT_EPSILON) {
     223    if (fabsf(result->kernel[0][0] - 19.0/30.0) > FLT_EPSILON ||
     224            fabsf(result->kernel[2][0] - 1.0/30.0) > FLT_EPSILON ||
     225            fabsf(result->kernel[2][1] - 8.0/30.0) > FLT_EPSILON ||
     226            fabsf(result->kernel[3][1] - 2.0/30.0) > FLT_EPSILON) {
    222227        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values, %g,%g;%g,%g, are wrong. Suppose to be 2,6;1,0.",
    223                 result->kernel[1][0], result->kernel[1][1],
    224                 result->kernel[2][0], result->kernel[2][1]);
     228                result->kernel[0][0], result->kernel[2][0],
     229                result->kernel[2][1], result->kernel[3][1]);
    225230
    226231        return 8;
     
    243248
    244249    tVec->n--; // decrease size by one to make vectors unequal in length.
    245     psLogMsg(__func__,PS_LOG_INFO, "Following should be a warning - not automatically tested.");
     250    psLogMsg(__func__,PS_LOG_INFO, "Following should be an error.");
    246251    result = psKernelGenerate(tVec, xVec, yVec, false);
    247     if (result == NULL) {
    248         psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned NULL.");
     252    if (result != NULL) {
     253        psError(PS_ERR_UNKNOWN, true,"psKernelGenerate returned non-NULL given differing sized vectors.");
    249254        return 9;
    250     }
    251 
    252     // make sure last sample is not used
    253     if (fabsf(result->kernel[2][0] - 1.0/8.0) > FLT_EPSILON ||
    254             fabsf(result->kernel[ 1][ 1] - 6.0/8.0) > FLT_EPSILON ||
    255             fabsf(result->kernel[ 0][ 0] - 1.0/8.0) > FLT_EPSILON) {
    256         psError(PS_ERR_UNKNOWN, true,"psKernelGenerate result values wrong for truncated time vector.");
    257 
    258         return 10;
    259255    }
    260256
Note: See TracChangeset for help on using the changeset viewer.