Changeset 7076 for trunk/psLib/src/imageops/psImageConvolve.c
- Timestamp:
- May 5, 2006, 12:32:35 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/imageops/psImageConvolve.c (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageConvolve.c
r7071 r7076 5 5 * @author Robert DeSonia, MHPCC 6 6 * 7 * @version $Revision: 1.3 2$ $Name: not supported by cvs2svn $8 * @date $Date: 2006-05-05 02:48:34$7 * @version $Revision: 1.33 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2006-05-05 22:32:35 $ 9 9 * 10 10 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 587 587 PS_ASSERT_IMAGE_NON_NULL(image, NULL); 588 588 589 int Nx, Ny, Npixel, Nrange, Nr;590 double factor, g, s, sum;591 psVector *temp;592 593 589 // relevant terms 594 Nrange = sigma*Nsigma + 0.5;595 Npixel = 2*Nrange + 1;596 factor = -0.5/(sigma*sigma);597 598 Nx = image->numCols;599 Ny = image->numRows;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; 600 596 601 597 #define IMAGESMOOTH_CASE(TYPE) \ … … 604 600 psVector *gaussnorm = psVectorAlloc (Npixel, PS_TYPE_##TYPE); \ 605 601 gaussnorm->n = gaussnorm->nalloc; \ 606 sum = 0.0; \602 double sum = 0.0; \ 607 603 for (int i = -Nrange; i < Nrange + 1; i++) { \ 608 604 gaussnorm->data.TYPE[i+Nrange] = exp (factor*i*i); \ … … 615 611 \ 616 612 /* smooth in X direction */ \ 617 temp = psVectorAlloc (Nx, PS_TYPE_##TYPE); \613 psVector *temp = psVectorAlloc (Nx, PS_TYPE_##TYPE); \ 618 614 temp->n = temp->nalloc; \ 619 615 for (int j = 0; j < Ny; j++) { \ … … 625 621 ps##TYPE *vr = vi - i; \ 626 622 ps##TYPE *vg = gauss - i; \ 627 g = s = 0; \ 623 double g = 0; \ 624 double s = 0; \ 628 625 for (int n = -i; n < Nrange + 1; n++, vr++, vg++) { \ 629 626 s += *vg * *vr; \ … … 636 633 ps##TYPE *vr = vi - Nrange; \ 637 634 ps##TYPE *vg = gauss - Nrange; \ 638 s = 0; \635 double s = 0; \ 639 636 for (int n = -Nrange; n < Nrange + 1; n++, vr++, vg++) { \ 640 637 s += *vg * *vr; \ … … 647 644 ps##TYPE *vr = vi - Nrange; \ 648 645 ps##TYPE *vg = gauss - Nrange; \ 649 g = s = 0; \ 646 double g = 0; \ 647 double s = 0; \ 650 648 for (int n = -Nrange; n < Nx - i - 1; n++, vr++, vg++) { \ 651 649 s += *vg * *vr; \ … … 670 668 ps##TYPE *vi = image->data.TYPE[j+n]; \ 671 669 ps##TYPE *vo = temp->data.TYPE; \ 672 g = gauss[n]; \670 double g = gauss[n]; \ 673 671 for (int i = 0; i < Nx; i++, vi++, vo++) { \ 674 672 *vo += *vi * g; \ … … 680 678 for (int j = Nrange; j < Ny - Nrange; j++) { \ 681 679 /* save the Nrange-offset output row, then zero */ \ 682 Nr = j % Nrange; \680 int Nr = j % Nrange; \ 683 681 temp = temprows->data[Nr]; \ 684 682 memcpy (image->data.TYPE[j-Nrange], temp->data.TYPE, Nx*sizeof(ps##TYPE)); \ … … 687 685 ps##TYPE *vi = image->data.TYPE[j+n]; \ 688 686 ps##TYPE *vo = temp->data.TYPE; \ 689 g = gauss[n]; \687 double g = gauss[n]; \ 690 688 for (int i = 0; i < Nx; i++, vi++, vo++) { \ 691 689 *vo += *vi * g; \ … … 695 693 for (int j = Ny - Nrange; j < Ny; j++) { \ 696 694 /* save the Nrange-offset output row, then zero */ \ 697 Nr = j % Nrange; \695 int Nr = j % Nrange; \ 698 696 temp = temprows->data[Nr]; \ 699 697 memcpy (image->data.TYPE[j-Nrange], temp->data.TYPE, Nx*sizeof(ps##TYPE)); \ … … 703 701 ps##TYPE *vi = image->data.TYPE[j+n]; \ 704 702 ps##TYPE *vo = temp->data.TYPE; \ 705 g = gauss[n]; \703 double g = gauss[n]; \ 706 704 for (int i = 0; i < Nx; i++, vi++, vo++) { \ 707 705 *vo += *vi * g; \ … … 711 709 for (int j = Ny; j < Ny + Nrange; j++) { \ 712 710 /* save the Nrange-offset output row, then zero */ \ 713 Nr = j % Nrange; \711 int Nr = j % Nrange; \ 714 712 temp = temprows->data[Nr]; \ 715 713 memcpy (image->data.TYPE[j-Nrange], temp->data.TYPE, Nx*sizeof(ps##TYPE)); \
Note:
See TracChangeset
for help on using the changeset viewer.
