Changeset 2860
- Timestamp:
- Jan 3, 2005, 11:58:53 AM (22 years ago)
- Location:
- trunk/psLib
- Files:
-
- 7 edited
-
psLib.kdevelop.pcs (modified) ( previous)
-
psLib.kdevses (modified) (1 diff)
-
src/dataManip/psConstants.h (modified) (2 diffs)
-
src/image/psImageManip.c (modified) (11 diffs)
-
src/image/psImageManip.h (modified) (8 diffs)
-
src/math/psConstants.h (modified) (2 diffs)
-
test/image/tst_psImageManip.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/psLib.kdevses
r2859 r2860 2 2 <!DOCTYPE KDevPrjSession> 3 3 <KDevPrjSession> 4 <DocsAndViews NumberOfDocuments=" 5" >5 <Doc0 NumberOfViews="1" URL="file:/home/desonia/psLib/ src/collections/psHash.c" >6 <View0 line=" 451" Type="Source" />4 <DocsAndViews NumberOfDocuments="3" > 5 <Doc0 NumberOfViews="1" URL="file:/home/desonia/psLib/test/image/tst_psImageManip.c" > 6 <View0 line="1514" Type="Source" /> 7 7 </Doc0> 8 <Doc1 NumberOfViews="1" URL="file:/home/desonia/psLib/src/ collections/psHash.h" >9 <View0 line=" 42" Type="Source" />8 <Doc1 NumberOfViews="1" URL="file:/home/desonia/psLib/src/image/psImageManip.c" > 9 <View0 line="770" Type="Source" /> 10 10 </Doc1> 11 <Doc2 NumberOfViews="1" URL="file:/home/desonia/psLib/src/ collections/psArray.c" >11 <Doc2 NumberOfViews="1" URL="file:/home/desonia/psLib/src/dataManip/psConstants.h" > 12 12 <View0 line="0" Type="Source" /> 13 13 </Doc2> 14 <Doc3 NumberOfViews="1" URL="file:/home/desonia/psLib/test/collections/tst_psHash04.c" >15 <View0 line="0" Type="Source" />16 </Doc3>17 <Doc4 NumberOfViews="1" URL="file:/home/desonia/psLib/test/collections/tst_psHash05.c" >18 <View0 line="31" Type="Source" />19 </Doc4>20 14 </DocsAndViews> 21 15 <pluginList> -
trunk/psLib/src/dataManip/psConstants.h
r2847 r2860 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.5 1$ $Name: not supported by cvs2svn $9 * @date $Date: 200 4-12-29 22:15:51$8 * @version $Revision: 1.52 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-01-03 21:58:52 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 30 30 *****************************************************************************/ 31 31 #define PS_ONE 1.0 32 #define PS_PI 3.1415926535897932384626433832795029 /* pi */ 33 #define PS_PI_2 1.5707963267948966192313216916397514 /* pi/2 */ 34 #define PS_PI_4 0.7853981633974483096156608458198757 /* pi/4 */ 35 #define PS_1_PI 0.3183098861837906715377675267450287 /* 1/pi */ 36 #define PS_2_PI 0.6366197723675813430755350534900574 /* 2/pi */ 32 37 33 38 /***************************************************************************** -
trunk/psLib/src/image/psImageManip.c
r2835 r2860 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1.3 2$ $Name: not supported by cvs2svn $13 * @date $Date: 200 4-12-28 01:42:28$12 * @version $Revision: 1.33 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-01-03 21:58:53 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 #include "psMemory.h" 26 26 #include "psImageExtraction.h" 27 27 #include "psConstants.h" 28 28 #include "psImageErrors.h" 29 29 … … 675 675 return NULL; 676 676 } 677 // put the angle in the range of 0... 360.678 angle = angle - 360.0f * floor(angle / 360.0f);679 680 if (fabsf(angle - 90.0f) < FLT_EPSILON) {677 // put the angle in the range of 0...2PI. 678 angle = angle - (2.0*PS_PI) * floor(angle / (2.0*PS_PI)); 679 680 if (fabsf(angle - PS_PI_2) < FLT_EPSILON) { 681 681 // perform 1/4 rotate counter-clockwise 682 682 psS32 numRows = in->numCols; … … 702 702 PSIMAGE_ROTATE_LEFT_90(U8); 703 703 PSIMAGE_ROTATE_LEFT_90(U16); 704 // PSIMAGE_ROTATE_LEFT_90(U32);Not a requirement705 // PSIMAGE_ROTATE_LEFT_90(U64);Not a requirement704 PSIMAGE_ROTATE_LEFT_90(U32); // Not a requirement 705 PSIMAGE_ROTATE_LEFT_90(U64); // Not a requirement 706 706 PSIMAGE_ROTATE_LEFT_90(S8); 707 707 PSIMAGE_ROTATE_LEFT_90(S16); 708 // PSIMAGE_ROTATE_LEFT_90(S32);Not a requirement709 // PSIMAGE_ROTATE_LEFT_90(S64);Not a requirement708 PSIMAGE_ROTATE_LEFT_90(S32); // Not a requirement 709 PSIMAGE_ROTATE_LEFT_90(S64); // Not a requirement 710 710 PSIMAGE_ROTATE_LEFT_90(F32); 711 711 PSIMAGE_ROTATE_LEFT_90(F64); … … 723 723 } 724 724 } 725 } else if (fabsf(angle - 180.0f) < FLT_EPSILON) {725 } else if (fabsf(angle - PS_PI) < FLT_EPSILON) { 726 726 // perform 1/2 rotate 727 727 psS32 numRows = in->numRows; … … 748 748 PSIMAGE_ROTATE_180_CASE(U8); 749 749 PSIMAGE_ROTATE_180_CASE(U16); 750 // PSIMAGE_ROTATE_180_CASE(U32);Not a requirement751 // PSIMAGE_ROTATE_180_CASE(U64);Not a requirement750 PSIMAGE_ROTATE_180_CASE(U32); // Not a requirement 751 PSIMAGE_ROTATE_180_CASE(U64); // Not a requirement 752 752 PSIMAGE_ROTATE_180_CASE(S8); 753 753 PSIMAGE_ROTATE_180_CASE(S16); 754 // PSIMAGE_ROTATE_180_CASE(S32);Not a requirement755 // PSIMAGE_ROTATE_180_CASE(S64);Not a requirement754 PSIMAGE_ROTATE_180_CASE(S32); // Not a requirement 755 PSIMAGE_ROTATE_180_CASE(S64); // Not a requirement 756 756 PSIMAGE_ROTATE_180_CASE(F32); 757 757 PSIMAGE_ROTATE_180_CASE(F64); … … 769 769 } 770 770 } 771 } else if (fabsf(angle - 270.0f) < FLT_EPSILON) {771 } else if (fabsf(angle - (PS_PI+PS_PI_2)) < FLT_EPSILON) { 772 772 // perform 1/4 rotate clockwise 773 773 psS32 numRows = in->numCols; … … 793 793 PSIMAGE_ROTATE_RIGHT_90(U8); 794 794 PSIMAGE_ROTATE_RIGHT_90(U16); 795 // PSIMAGE_ROTATE_RIGHT_90(U32);Not a requirement796 // PSIMAGE_ROTATE_RIGHT_90(U64);Not a requirement795 PSIMAGE_ROTATE_RIGHT_90(U32); // Not a requirement 796 PSIMAGE_ROTATE_RIGHT_90(U64); // Not a requirement 797 797 PSIMAGE_ROTATE_RIGHT_90(S8); 798 798 PSIMAGE_ROTATE_RIGHT_90(S16); 799 // PSIMAGE_ROTATE_RIGHT_90(S32);Not a requirement800 // PSIMAGE_ROTATE_RIGHT_90(S64);Not a requirement799 PSIMAGE_ROTATE_RIGHT_90(S32); // Not a requirement 800 PSIMAGE_ROTATE_RIGHT_90(S64); // Not a requirement 801 801 PSIMAGE_ROTATE_RIGHT_90(F32); 802 802 PSIMAGE_ROTATE_RIGHT_90(F64); … … 822 822 float centerX = (float)(numCols) / 2.0f; 823 823 float centerY = (float)(numRows) / 2.0f; 824 float t = angle * (3.14159265358f / 180.0f); 825 double cosT = cosf(t); 826 double sinT = sinf(t); 824 double cosT = cosf(angle); 825 double sinT = sinf(angle); 827 826 828 827 // calculate the corners of the rotated image so we know the proper output image size. … … 897 896 PSIMAGE_ROTATE_ARBITRARY_LOOP(U16,MODE); \ 898 897 break; \ 899 /* case PS_TYPE_U32:Not a requirement */ \900 /* PSIMAGE_ROTATE_ARBITRARY_LOOP(U32,MODE); */\901 /* break; */\902 /* case PS_TYPE_U64:Not a requirement */ \903 /* PSIMAGE_ROTATE_ARBITRARY_LOOP(U64,MODE); */\904 /* break; */\898 case PS_TYPE_U32: /* Not a requirement */ \ 899 PSIMAGE_ROTATE_ARBITRARY_LOOP(U32,MODE); \ 900 break; \ 901 case PS_TYPE_U64: /* Not a requirement */ \ 902 PSIMAGE_ROTATE_ARBITRARY_LOOP(U64,MODE); \ 903 break; \ 905 904 case PS_TYPE_S8: \ 906 905 PSIMAGE_ROTATE_ARBITRARY_LOOP(S8,MODE); \ … … 909 908 PSIMAGE_ROTATE_ARBITRARY_LOOP(S16,MODE); \ 910 909 break; \ 911 /* case PS_TYPE_S32:Not a requirement */ \912 /* PSIMAGE_ROTATE_ARBITRARY_LOOP(S32,MODE); */\913 /* break; */\914 /* case PS_TYPE_S64:Not a requirement */ \915 /* PSIMAGE_ROTATE_ARBITRARY_LOOP(S64,MODE); */\916 /* break; */\910 case PS_TYPE_S32: /* Not a requirement */ \ 911 PSIMAGE_ROTATE_ARBITRARY_LOOP(S32,MODE); \ 912 break; \ 913 case PS_TYPE_S64: /* Not a requirement */ \ 914 PSIMAGE_ROTATE_ARBITRARY_LOOP(S64,MODE); \ 915 break; \ 917 916 case PS_TYPE_F32: \ 918 917 PSIMAGE_ROTATE_ARBITRARY_LOOP(F32,MODE); \ -
trunk/psLib/src/image/psImageManip.h
r2375 r2860 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.1 5$ $Name: not supported by cvs2svn $14 * @date $Date: 200 4-11-16 20:00:21$13 * @version $Revision: 1.16 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-01-03 21:58:53 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 44 44 * All pixels outside of the rectangular region in complex space formed by 45 45 * the min and max input parameters are set to the value vmax (if either 46 * the real or imaginary portion exceeds the respective max values), or vmin. 46 * the real or imaginary portion exceeds the respective max values), or vmin. 47 47 * This function is defined for psC32, and psC64 imagery only. 48 48 * … … 93 93 * 1/scale. The scale, always a positive number, is equal in each dimension and 94 94 * specified the number of pixels used to define a new pixel in the output image. 95 * The output image is generated from all input image pixels. This function is 95 * The output image is generated from all input image pixels. This function is 96 96 * defined for psU8, psS8, psS16, psF32, psF64, psC32, and psC64. 97 97 * … … 110 110 /** Resample image to new scale. 111 111 * 112 * A new image is constructed in which the dimensions are increased by a 113 * factor of scale. The scale, always a positive number, is equal in each 114 * dimension. The output image is generated from all input image pixels. 115 * Each pixel in the output image is derived by interpolating between 112 * A new image is constructed in which the dimensions are increased by a 113 * factor of scale. The scale, always a positive number, is equal in each 114 * dimension. The output image is generated from all input image pixels. 115 * Each pixel in the output image is derived by interpolating between 116 116 * neighboring pixels using the specified interpolation method (mode). 117 117 * … … 127 127 /** Rotate the input image by given angle, specified in degrees. 128 128 * 129 * The output image must contain all of the pixels from the input image in 130 * their new frame. Pixels in the output image which do not map to input 131 * pixels should be set to exposed. The center of rotation is always the 132 * center pixel of the image. The rotation is specified in the sense that a 133 * positive angle is an anti-clockwise rotation. This function must be 134 * defined for the following types: psU8, psU16, psS8, psS16, psF32, psF64, 129 * The output image must contain all of the pixels from the input image in 130 * their new frame. Pixels in the output image which do not map to input 131 * pixels should be set to exposed. The center of rotation is always the 132 * center pixel of the image. The rotation is specified in the sense that a 133 * positive angle is an anti-clockwise rotation. This function must be 134 * defined for the following types: psU8, psU16, psS8, psS16, psF32, psF64, 135 135 * psC32, psC64. 136 136 * … … 140 140 psImage* out, ///< an psImage to recycle. If NULL, a new image is created 141 141 const psImage* in, ///< input image 142 float angle, ///< the rotation angle in degrees.142 float angle, ///< the rotation angle in radians. 143 143 psC64 unexposedValue, ///< the output image pixel values for non-imagery areas 144 144 psImageInterpolateMode mode ///< the interpolation mode used … … 147 147 /** Shift image by an arbitrary number of pixels (dx,dy) in either direction. 148 148 * 149 * If the shift values are fractional, the output pixel values should 150 * interpolate between the input pixel values. The output image has the same 151 * dimensions as the input image. Pixels which fall off the edge of the 152 * output image are lost. Newly exposed pixels are set to the value given by 153 * exposed. This function must be defined for the following types: psU8, 149 * If the shift values are fractional, the output pixel values should 150 * interpolate between the input pixel values. The output image has the same 151 * dimensions as the input image. Pixels which fall off the edge of the 152 * output image are lost. Newly exposed pixels are set to the value given by 153 * exposed. This function must be defined for the following types: psU8, 154 154 * psU16, psS8, psS16, psF32, psF64, psC32, psC64. 155 155 * … … 166 166 167 167 /** Roll image by an integer number of pixels in either direction. 168 * 168 * 169 169 * The output image is the same dimensions as the input image. Edge pixels 170 * wrap to the other side (no values are lost). This function is 170 * wrap to the other side (no values are lost). This function is 171 171 * defined for psU8, psS8, psS16, psF32, psF64, psC32, and psC64. 172 172 * -
trunk/psLib/src/math/psConstants.h
r2847 r2860 6 6 * @author GLG, MHPCC 7 7 * 8 * @version $Revision: 1.5 1$ $Name: not supported by cvs2svn $9 * @date $Date: 200 4-12-29 22:15:51$8 * @version $Revision: 1.52 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-01-03 21:58:52 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 30 30 *****************************************************************************/ 31 31 #define PS_ONE 1.0 32 #define PS_PI 3.1415926535897932384626433832795029 /* pi */ 33 #define PS_PI_2 1.5707963267948966192313216916397514 /* pi/2 */ 34 #define PS_PI_4 0.7853981633974483096156608458198757 /* pi/4 */ 35 #define PS_1_PI 0.3183098861837906715377675267450287 /* 1/pi */ 36 #define PS_2_PI 0.6366197723675813430755350534900574 /* 2/pi */ 32 37 33 38 /***************************************************************************** -
trunk/psLib/test/image/tst_psImageManip.c
r2855 r2860 6 6 * @author Robert DeSonia, MHPCC 7 7 * 8 * @version $Revision: 1.3 4$ $Name: not supported by cvs2svn $9 * @date $Date: 200 4-12-30 20:18:37$8 * @version $Revision: 1.35 $ $Name: not supported by cvs2svn $ 9 * @date $Date: 2005-01-03 21:58:53 $ 10 10 * 11 11 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 1279 1279 psImage* fOut = NULL; 1280 1280 psImage* sOut = NULL; 1281 psImage* s32Out = NULL;1282 1281 psImage* fBiOut = NULL; 1283 1282 psImage* sBiOut = NULL; … … 1290 1289 psImage* fImg = psImageAlloc(cols,rows,PS_TYPE_F32); 1291 1290 psImage* sImg = psImageAlloc(cols,rows,PS_TYPE_S16); 1292 psImage* s32Img = psImageAlloc(cols,rows,PS_TYPE_S32);1293 1291 1294 1292 for(psS32 row=0;row<rows;row++) { 1295 1293 psF32* fRow = fImg->data.F32[row]; 1296 1294 psS16* sRow = sImg->data.S16[row]; 1297 psS32* s32Row = s32Img->data.S32[row];1298 1295 for (psS32 col=0;col<cols;col++) { 1299 1296 fRow[col] = (psF32)(row)+(psF32)(col)/100.0f; 1300 1297 sRow[col] = row-2*col; 1301 s32Row[col] = row-2*col;1302 1298 } 1303 1299 } … … 1324 1320 psS32 index = 0; 1325 1321 psBool fail = false; 1322 psF32 radianRot; 1326 1323 for (psS32 rot=-180;rot<=180;rot+=45) { 1327 1324 psImage* oldOut = fOut; 1328 1325 psImage* oldBiOut = fBiOut; 1329 fOut = psImageRotate(fOut,fImg,rot,-1.0,PS_INTERPOLATE_FLAT); 1330 fBiOut = psImageRotate(fBiOut,fImg,rot,-1.0,PS_INTERPOLATE_BILINEAR); 1326 1327 if (rot == 90) { 1328 radianRot = PS_PI_2; 1329 } else if (rot == -90) { 1330 radianRot = PS_PI+PS_PI_2; 1331 } else if (rot == 180 || rot == -180) { 1332 radianRot = PS_PI; 1333 } else { 1334 radianRot = ((float)rot)*PS_PI/180.0; 1335 } 1336 1337 fOut = psImageRotate(fOut,fImg,radianRot,-1.0,PS_INTERPOLATE_FLAT); 1338 fBiOut = psImageRotate(fBiOut,fImg,radianRot,-1.0,PS_INTERPOLATE_BILINEAR); 1331 1339 // Verify the returned psImage structure is equal to the input 1332 1340 // parameter out if provided. … … 1339 1347 return 4; 1340 1348 } 1341 sOut = psImageRotate(sOut,sImg,r ot,-1.0,PS_INTERPOLATE_FLAT);1342 sBiOut = psImageRotate(sBiOut,sImg,r ot,-1.0,PS_INTERPOLATE_BILINEAR);1349 sOut = psImageRotate(sOut,sImg,radianRot,-1.0,PS_INTERPOLATE_FLAT); 1350 sBiOut = psImageRotate(sBiOut,sImg,radianRot,-1.0,PS_INTERPOLATE_BILINEAR); 1343 1351 if (! psImageWriteSection(fOut,0,0,0,NULL,index,"temp/fOut.fits") ) { 1344 1352 psError(PS_ERR_UNKNOWN, true,"Can not write to temp/fOut.fits, so why continue!?"); … … 1466 1474 } 1467 1475 1468 // Verify psImage structure returned is NULL and program execution doesn't stop1469 // if the input image type is not supported. Do not check for 0 degree rotation1470 // since an imgae copy will be used.1471 if (rot != 0 ) {1472 psLogMsg(__func__,PS_LOG_INFO,"Following should be an error invalid type for rotate.");1473 s32Out = psImageRotate(s32Out,s32Img,rot,-1.0,PS_INTERPOLATE_FLAT);1474 if( s32Out != NULL ) {1475 psError(PS_ERR_UNKNOWN, true,"psImage returned is not NULL for invalid image type.");1476 return 5;1477 }1478 }1479 1480 1476 index++; 1481 1477 } … … 1517 1513 psFree(sBiTruth); 1518 1514 psFree(fBiOut); 1519 psFree(s32Img);1520 psFree(s32Out);1521 1515 1522 1516 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.
