Changeset 7077
- Timestamp:
- May 5, 2006, 1:55:56 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/imageops/psImageConvolve.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageConvolve.c
r7076 r7077 5 5 * @author Robert DeSonia, MHPCC 6 6 * 7 * @version $Revision: 1.3 3$ $Name: not supported by cvs2svn $8 * @date $Date: 2006-05-05 2 2:32:35$7 * @version $Revision: 1.34 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2006-05-05 23:55:56 $ 9 9 * 10 10 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 588 588 589 589 // relevant terms 590 int Nrange = sigma*Nsigma + 0.5; 591 int Npixel = 2*Nrange + 1; 592 double factor = -0.5/(sigma*sigma); 593 594 int Nx = image->numCols; 595 int Ny = image->numRows; 590 int Nrange = sigma*Nsigma + 0.5; // Number of pixels either side 591 int Npixel = 2*Nrange + 1; // Total number of pixels in convolution kernel 592 int Nx = image->numCols; // Number of columns 593 int Ny = image->numRows; // Number of rows 596 594 597 595 #define IMAGESMOOTH_CASE(TYPE) \ … … 601 599 gaussnorm->n = gaussnorm->nalloc; \ 602 600 double sum = 0.0; \ 601 double factor = -0.5/(sigma*sigma); \ 603 602 for (int i = -Nrange; i < Nrange + 1; i++) { \ 604 603 gaussnorm->data.TYPE[i+Nrange] = exp (factor*i*i); \ … … 617 616 ps##TYPE *vo = temp->data.TYPE; \ 618 617 /* smooth first Nrange pixels, with renorm */ \ 619 /* XXX need to check that this does not run over end for narrow images */\620 for (int i = 0; i < Nrange; i++, vi++, vo++) { \618 int xMax = PS_MIN(Nrange, Nx); \ 619 for (int i = 0; i < xMax; i++, vi++, vo++) { \ 621 620 ps##TYPE *vr = vi - i; \ 622 621 ps##TYPE *vg = gauss - i; \ … … 641 640 /* smooth last Nrange pixels, with renorm */ \ 642 641 /* XXX does this miss the last column? */ \ 643 for (int i = Nx - Nrange; i < Nx; i++, vi++, vo++) { \642 for (int i = PS_MAX(Nx - Nrange, 0); i < Nx; i++, vi++, vo++) { \ 644 643 ps##TYPE *vr = vi - Nrange; \ 645 644 ps##TYPE *vg = gauss - Nrange; \ … … 659 658 psArray *temprows = psArrayAlloc (Nrange); \ 660 659 temprows->n = Nrange; \ 661 for (int j = 0; j < Nrange; j++) { \ 660 int yMax = PS_MIN(Nrange, Ny); \ 661 for (int j = 0; j < yMax; j++) { \ 662 662 temp = psVectorAlloc (Nx, PS_TYPE_##TYPE); \ 663 663 temp->n = temp->nalloc; \ … … 691 691 } \ 692 692 } \ 693 for (int j = Ny - Nrange; j < Ny; j++) { \693 for (int j = PS_MAX(Ny - Nrange, 0); j < Ny; j++) { \ 694 694 /* save the Nrange-offset output row, then zero */ \ 695 695 int Nr = j % Nrange; \
Note:
See TracChangeset
for help on using the changeset viewer.
