IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 35717 for trunk/psModules


Ignore:
Timestamp:
Jun 28, 2013, 11:14:26 AM (13 years ago)
Author:
watersc1
Message:

Fixed separable convolution.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/imcombine/pmSubtractionSimple.c

    r35716 r35717  
    118118  //
    119119  // Do convolutions
     120  psImage *temp = psImageAlloc(numCols,numRows,PS_TYPE_F32);
    120121  for (int y = 0; y < image1->numRows; y++) {
    121122    for (int x = 0; x < image1->numCols; x++) {
     123
     124      temp->data.F32[y][x] = 0.0;
     125     
    122126      if (convolution_direction == 1) {
    123127        imageC1->data.F32[y][x] = 0.0;
     
    139143      }
    140144      for (int v = -size; v <= size; v++) {
     145        if ((y-v >= 0)&&(y-v < numRows)) {
     146          if (convolution_direction == 1) {
     147            temp->data.F32[y][x] += kernelVec->data.F32[v + size] * image1->data.F32[y - v][x];
     148          }
     149          else if (convolution_direction == 2) {
     150            temp->data.F32[y][x] += kernelVec->data.F32[v + size] * image2->data.F32[y - v][x];
     151          }
     152        }
     153      }
     154    }
     155  }
     156  for (int y = 0; y < image1->numRows; y++) {
     157    for (int x = 0; x < image1->numCols; x++) {
    141158        for (int u = -size; u <= size; u++) {
    142           if ((y-v >= 0)&&(x-u >= 0)&&
    143               (y-v < numRows)&&(x-u < numCols)) {
     159          if ((x-u >= 0)&&(x-u < numCols)) {
    144160            if (convolution_direction == 1) {
    145               imageC1->data.F32[y][x] += kernelVec->data.F32[v + size] * kernelVec->data.F32[u + size] *
    146                 image1->data.F32[y - v][x - u];
     161              imageC1->data.F32[y][x] += kernelVec->data.F32[u + size] * temp->data.F32[y][x - u];
    147162            }
    148163            else if (convolution_direction == 2) {
    149               imageC2->data.F32[y][x] += kernelVec->data.F32[v + size] * kernelVec->data.F32[u + size] *
    150                 image2->data.F32[y - v][x - u];
     164              imageC2->data.F32[y][x] += kernelVec->data.F32[u + size] * temp->data.F32[y][x - u];
    151165            }
    152166          }
    153167        }
    154       }
    155     }
    156   }
     168    }
     169  }
     170  psFree(temp);
    157171  psFree(kernelVec);
    158172
Note: See TracChangeset for help on using the changeset viewer.