IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 14478


Ignore:
Timestamp:
Aug 13, 2007, 4:06:32 PM (19 years ago)
Author:
Paul Price
Message:

Adding psKernelAllocFromImage to generate a kernel from some input image.

Location:
trunk/psLib/src/imageops
Files:
2 edited

Legend:

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

    r14332 r14478  
    77/// @author Eugene Magnier, IfA
    88///
    9 /// @version $Revision: 1.53 $ $Name: not supported by cvs2svn $
    10 /// @date $Date: 2007-07-20 20:12:31 $
     9/// @version $Revision: 1.54 $ $Name: not supported by cvs2svn $
     10/// @date $Date: 2007-08-14 02:06:32 $
    1111///
    1212/// Copyright 2004-2007 Institute for Astronomy, University of Hawaii
     
    4242}
    4343
     44// Set up indirections, so we can refer to kernel->kernel[-1][-3] for the (-1,-1) element, instead of
     45// kernel->image[kernel->yMax - kernel->yMin + 1][kernel->yMax - kernel->yMin + 3] (yuk!).
     46static void kernelRedirects(psKernel *kernel, // Kernel for which to set up the redirects
     47                            int numRows // Number of rows
     48    )
     49{
     50    int xMin = kernel->xMin, yMin = kernel->yMin; // Minimum values
     51
     52    kernel->p_kernelRows = psAlloc(sizeof(float*)*numRows);
     53    for (int i = 0; i < numRows; i++) {
     54        kernel->p_kernelRows[i] = kernel->image->data.PS_TYPE_KERNEL_DATA[i] - xMin;
     55    }
     56    kernel->kernel = kernel->p_kernelRows - yMin;
     57    return;
     58}
     59
    4460psKernel *psKernelAlloc(int xMin, int xMax, int yMin, int yMax)
    4561{
     
    7995    psImageInit(kernel->image, 0.0);
    8096
    81     // Set up indirections, so we can refer to kernel->kernel[-1][-3] for the (-1,-1) element, instead of
    82     // kernel->image[kernel->yMax - kernel->yMin + 1][kernel->yMax - kernel->yMin + 3] (yuk!).
    83     kernel->p_kernelRows = psAlloc(sizeof(float*)*numRows);
    84     for (int i = 0; i < numRows; i++) {
    85         kernel->p_kernelRows[i] = kernel->image->data.PS_TYPE_KERNEL_DATA[i] - xMin;
    86     }
    87     kernel->kernel = kernel->p_kernelRows - yMin;
     97    kernelRedirects(kernel, numRows);
    8898
    8999    return kernel;
    90100}
    91101
    92 
     102psKernel *psKernelAllocFromImage(psImage *image, int x0, int y0)
     103{
     104    psKernel *kernel = psAlloc(sizeof(psKernel)); // The kernel, to be returned
     105    psMemSetDeallocator(kernel,(psFreeFunc)kernelFree);
     106
     107    int numCols = image->numCols, numRows = image->numRows; // Size of image
     108
     109    kernel->xMin = - x0;
     110    kernel->xMax = numCols - x0;
     111    kernel->yMin = - y0;
     112    kernel->yMax = numRows - y0;
     113    kernel->image = psMemIncrRefCounter(image);
     114
     115    kernelRedirects(kernel, numRows);
     116
     117    return kernel;
     118}
    93119
    94120bool psMemCheckKernel(psPtr ptr)
     
    200226}
    201227
    202 psImage *psImageConvolveDirect(psImage *out, 
    203                                const psImage *in,
     228psImage *psImageConvolveDirect(psImage *out,
     229                               const psImage *in,
    204230                               const psKernel *kernel)
    205231{
    206232    PS_ASSERT_IMAGE_NON_NULL(in, NULL);
    207233    if (in->type.type != PS_TYPE_S32 && in->type.type != PS_TYPE_F32 && in->type.type != PS_TYPE_F64) {
    208         psError(PS_ERR_BAD_PARAMETER_TYPE, true,
    209                 "Unallowable operation: psImage %s is not of type S32 or F{32,64}.", "in");
    210         return(NULL);
     234        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
     235                "Unallowable operation: psImage %s is not of type S32 or F{32,64}.", "in");
     236        return(NULL);
    211237    }
    212238    PS_ASSERT_PTR_NON_NULL(kernel, NULL);
  • trunk/psLib/src/imageops/psImageConvolve.h

    r14452 r14478  
    55 * @author Robert DeSonia, MHPCC
    66 *
    7  * @version $Revision: 1.22 $ $Name: not supported by cvs2svn $
    8  * @date $Date: 2007-08-09 01:40:07 $
     7 * @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
     8 * @date $Date: 2007-08-14 02:06:32 $
    99 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
    1010 */
     
    6969    int yMax                           ///< Most positive y index
    7070) PS_ATTR_MALLOC;
     71
     72/// Allocate a convolution kernel from a provided image
     73psKernel *psKernelAllocFromImage(psImage *image, ///< Image from which to define kernel
     74                                 int x0, int y0 ///< Coordinates of kernel centre
     75    );
    7176
    7277/// Checks the type of a particular pointer.
Note: See TracChangeset for help on using the changeset viewer.