Changeset 9863
- Timestamp:
- Nov 5, 2006, 3:58:10 PM (20 years ago)
- Location:
- trunk/psLib
- Files:
-
- 1 added
- 4 edited
-
src/imageops/psImageGeomManip.c (modified) (3 diffs)
-
src/mathtypes/psImage.c (modified) (6 diffs)
-
src/mathtypes/psImage.h (modified) (3 diffs)
-
test/mathtypes/Makefile.am (modified) (3 diffs)
-
test/mathtypes/tap_psImageInterpolate.c (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageGeomManip.c
r9730 r9863 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 29$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-1 0-24 22:52:55$12 * @version $Revision: 1.30 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-11-06 01:58:09 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 636 636 break; \ 637 637 } \ 638 /* XXX output(i,j) = input(i+0.5-dx,j+0.5-dy) */ \ 638 639 for (psS32 row=0;row<outRows;row++) { \ 639 640 ps##TYPE* outRow = out->data.TYPE[row]; \ 640 float y = dy+(float)row; \641 float y = row + 0.5 - dy; \ 641 642 for (psS32 col=0;col<outCols;col++) { \ 643 float x = col + 0.5 - dx; \ 642 644 outRow[col] = p_psImagePixelInterpolate##MODE##_##TYPE( \ 643 input, dx+(float)col,y,NULL,0,exposed); \645 input,x,y,NULL,0,exposed); \ 644 646 } \ 645 647 } \ … … 678 680 PSIMAGE_SHIFT_ARBITRARY_CASE(BILINEAR); 679 681 PSIMAGE_SHIFT_ARBITRARY_CASE(BILINEAR_VARIANCE); 682 PSIMAGE_SHIFT_ARBITRARY_CASE(BICUBE); 680 683 default: 681 684 psError(PS_ERR_BAD_PARAMETER_VALUE, true, -
trunk/psLib/src/mathtypes/psImage.c
r9538 r9863 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.11 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2006-1 0-13 21:13:48$11 * @version $Revision: 1.116 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2006-11-06 01:58:10 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 630 630 unexposedValue); \ 631 631 break; \ 632 case PS_INTERPOLATE_BICUBE: \ 633 return p_psImagePixelInterpolateBICUBE_##TYPE( \ 634 input, \ 635 x, \ 636 y, \ 637 mask, \ 638 maskVal, \ 639 unexposedValue); \ 640 break; \ 632 641 default: \ 633 642 psError(PS_ERR_BAD_PARAMETER_VALUE,true, \ … … 759 768 RETURNTYPE unexposedValue) \ 760 769 { \ 761 double floorX = floor((psF64)(x) - 0.5); \762 double floorY = floor((psF64)(y) - 0.5); \770 int floorX = floor((x) - 0.5); \ 771 int floorY = floor((y) - 0.5); \ 763 772 psF64 fracX = x - 0.5 - floorX; \ 764 773 psF64 fracY = y - 0.5 - floorY; \ 765 psS32 intFloorX = (psS32) floorX; \766 psS32 intFloorY = (psS32) floorY; \767 774 psS32 lastX = input->numCols - 1; \ 768 775 psS32 lastY = input->numRows - 1; \ … … 776 783 psBool valid11 = false; \ 777 784 \ 778 if ( intFloorY >= 0 && intFloorY <= lastY) { \779 if ( intFloorX >= 0 && intFloorX <= lastX) { \780 V00 = input->data.TYPE[ intFloorY][intFloorX]; \785 if (floorY >= 0 && floorY <= lastY) { \ 786 if (floorX >= 0 && floorX <= lastX) { \ 787 V00 = input->data.TYPE[floorY][floorX]; \ 781 788 valid00 = (mask == NULL) || \ 782 ((mask->data.PS_TYPE_MASK_DATA[ intFloorY][intFloorX] & maskVal) == 0); \789 ((mask->data.PS_TYPE_MASK_DATA[floorY][floorX] & maskVal) == 0); \ 783 790 } \ 784 if ( intFloorX >= -1 && intFloorX < lastX) { \785 V10 = input->data.TYPE[ intFloorY][intFloorX+1]; \791 if (floorX >= -1 && floorX < lastX) { \ 792 V10 = input->data.TYPE[floorY][floorX+1]; \ 786 793 valid10 = (mask == NULL) || \ 787 ((mask->data.PS_TYPE_MASK_DATA[ intFloorY][intFloorX+1] & maskVal) == 0); \794 ((mask->data.PS_TYPE_MASK_DATA[floorY][floorX+1] & maskVal) == 0); \ 788 795 } \ 789 796 } \ 790 if ( intFloorY >= -1 && intFloorY < lastY) { \791 if ( intFloorX >= 0 && intFloorX <= lastX) { \792 V01 = input->data.TYPE[ intFloorY+1][intFloorX]; \797 if (floorY >= -1 && floorY < lastY) { \ 798 if (floorX >= 0 && floorX <= lastX) { \ 799 V01 = input->data.TYPE[floorY+1][floorX]; \ 793 800 valid01 = (mask == NULL) || \ 794 ((mask->data.PS_TYPE_MASK_DATA[ intFloorY+1][intFloorX] & maskVal) == 0); \801 ((mask->data.PS_TYPE_MASK_DATA[floorY+1][floorX] & maskVal) == 0); \ 795 802 } \ 796 if ( intFloorX >= -1 && intFloorX < lastX) { \797 V11 = input->data.TYPE[ intFloorY+1][intFloorX+1]; \803 if (floorX >= -1 && floorX < lastX) { \ 804 V11 = input->data.TYPE[floorY+1][floorX+1]; \ 798 805 valid11 = (mask == NULL) || \ 799 ((mask->data.PS_TYPE_MASK_DATA[ intFloorY+1][intFloorX+1] & maskVal) == 0); \806 ((mask->data.PS_TYPE_MASK_DATA[floorY+1][floorX+1] & maskVal) == 0); \ 800 807 } \ 801 808 } \ … … 844 851 return unexposedValue; \ 845 852 } 853 854 #define PSIMAGE_PIXEL_INTERPOLATE_BICUBE(TYPE, RETURNTYPE, SUFFIX, FRACFUNC) \ 855 inline RETURNTYPE p_psImagePixelInterpolateBICUBE_##SUFFIX( \ 856 const psImage* input, \ 857 float x, \ 858 float y, \ 859 const psImage* mask, \ 860 psU32 maskVal, \ 861 RETURNTYPE unexposedValue) \ 862 { \ 863 int floorX = floor(x); \ 864 int floorY = floor(y); \ 865 psF64 fracX = x - floorX - 0.5; \ 866 psF64 fracY = y - floorY - 0.5; \ 867 psS32 lastX = input->numCols - 1; \ 868 psS32 lastY = input->numRows - 1; \ 869 if (floorX < 1) return unexposedValue; \ 870 if (floorY < 1) return unexposedValue; \ 871 if (floorX >= lastX) return unexposedValue; \ 872 if (floorY >= lastY) return unexposedValue; \ 873 \ 874 /* XXX use care for masked and boundary pixels */ \ 875 psF64 Vmm = input->data.TYPE[floorY-1][floorX-1]; \ 876 psF64 Vom = input->data.TYPE[floorY-1][floorX+0]; \ 877 psF64 Vpm = input->data.TYPE[floorY-1][floorX+1]; \ 878 psF64 Vmo = input->data.TYPE[floorY+0][floorX-1]; \ 879 psF64 Voo = input->data.TYPE[floorY+0][floorX+0]; \ 880 psF64 Vpo = input->data.TYPE[floorY+0][floorX+1]; \ 881 psF64 Vmp = input->data.TYPE[floorY+1][floorX-1]; \ 882 psF64 Vop = input->data.TYPE[floorY+1][floorX+0]; \ 883 psF64 Vpp = input->data.TYPE[floorY+1][floorX+1]; \ 884 \ 885 psF64 Vxm = Vmm + Vmo + Vmp; \ 886 psF64 Vxp = Vpm + Vpo + Vpp; \ 887 psF64 Vym = Vmm + Vom + Vpm; \ 888 psF64 Vyp = Vmp + Vop + Vpp; \ 889 psF64 Vo = Vym + Vyp + Vmo + Voo + Vpo; \ 890 \ 891 psF64 Z_00 = Vo*(5.0/9.0) - (Vxp + Vxm)/3.0 - (Vyp + Vym)/3.0; \ 892 \ 893 psF64 Z_10 = (Vxp - Vxm)/6.0; \ 894 psF64 Z_01 = (Vyp - Vym)/6.0; \ 895 psF64 Z_20 = (Vxp + Vxm)/2.0 - Vo/3.0; \ 896 psF64 Z_02 = (Vyp + Vym)/2.0 - Vo/3.0; \ 897 psF64 Z_11 = (Vpp + Vmm - Vpm - Vmp)/4.0; \ 898 \ 899 psF64 value = Z_00 + Z_10*fracX + Z_01*fracY + Z_20*fracX*fracX + Z_11*fracX*fracY + Z_02*fracY*fracY; \ 900 return value; \ 901 } 902 903 /* 904 fprintf (stderr, "fX: %f, fY: %f\n", fracX,fracY); \ 905 fprintf (stderr, "iX: %d, iY: %d\n", floorX,floorY); \ 906 fprintf (stderr, "Vmm: %f, Vom: %f, Vpm: %f\n", Vmm, Vom, Vpm); \ 907 fprintf (stderr, "Vmo: %f, Voo: %f, Vpo: %f\n", Vmo, Voo, Vpo); \ 908 fprintf (stderr, "Vmp: %f, Vop: %f, Vpp: %f\n", Vmp, Vop, Vpp); \ 909 fprintf (stderr, "Vxm: %f, Vxp: %f\n", Vxm, Vxp); \ 910 fprintf (stderr, "Vym: %f, Vyp: %f\n", Vym, Vyp); \ 911 fprintf (stderr, "Vo: %f\n", Vo); \ 912 fprintf (stderr, "Z_00: %f, Z_10: %f, Z_01: %f\n", Z_00, Z_10, Z_01); \ 913 fprintf (stderr, "Z_20: %f, Z_11: %f, Z_02: %f\n", Z_20, Z_11, Z_02); \ 914 */ 846 915 847 916 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(U8,psF64,U8,) … … 857 926 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(C32,psC64,C32,) 858 927 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(C64,psC64,C64,) 928 929 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(U8,psF64,U8,) 930 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(U16,psF64,U16,) 931 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(U32,psF64,U32,) 932 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(U64,psF64,U64,) 933 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(S8,psF64,S8,) 934 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(S16,psF64,S16,) 935 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(S32,psF64,S32,) 936 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(S64,psF64,S64,) 937 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(F32,psF64,F32,) 938 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(F64,psF64,F64,) 939 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(C32,psC64,C32,) 940 PSIMAGE_PIXEL_INTERPOLATE_BICUBE(C64,psC64,C64,) 859 941 860 942 // Variance Version -
trunk/psLib/src/mathtypes/psImage.h
r7766 r9863 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.8 0$ $Name: not supported by cvs2svn $14 * @date $Date: 2006- 06-30 02:20:06$13 * @version $Revision: 1.81 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2006-11-06 01:58:10 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 34 34 PS_INTERPOLATE_FLAT, ///< 'flat' interpolation (nearest pixel) 35 35 PS_INTERPOLATE_BILINEAR, ///< bi-linear interpolation 36 PS_INTERPOLATE_BICUBE, ///< bi-cubic interpolation with 3x3 region 36 37 PS_INTERPOLATE_LANCZOS2, ///< Sinc interpolation with 4x4 pixel kernel 37 38 PS_INTERPOLATE_LANCZOS3, ///< Sinc interpolation with 6x6 pixel kernel … … 237 238 PIXEL_INTERPOLATE_FCNS(BILINEAR) 238 239 PIXEL_INTERPOLATE_FCNS(BILINEAR_VARIANCE) 240 PIXEL_INTERPOLATE_FCNS(BICUBE) 239 241 #endif // ! SWIG 240 242 -
trunk/psLib/test/mathtypes/Makefile.am
r8958 r9863 1 1 2 AM_CPPFLAGS = \ 2 3 $(SRCINC) \ … … 4 5 -I$(top_srcdir)/test/pstap/src \ 5 6 $(PSLIB_CFLAGS) 7 6 8 AM_LDFLAGS = \ 7 9 $(top_builddir)/src/libpslib.la \ … … 11 13 12 14 TEST_PROGS = \ 13 tap_psVector 15 tap_psVector \ 16 tap_psImageInterpolate 14 17 15 18 if BUILD_TESTS
Note:
See TracChangeset
for help on using the changeset viewer.
