Changeset 1260
- Timestamp:
- Jul 22, 2004, 10:02:57 AM (22 years ago)
- Location:
- trunk/psLib/src
- Files:
-
- 7 edited
-
astronomy/psTime.d (modified) (1 diff)
-
image/psImageManip.c (modified) (8 diffs)
-
image/psImageManip.h (modified) (2 diffs)
-
image/psImageStats.c (modified) (5 diffs)
-
image/psImageStats.h (modified) (3 diffs)
-
imageops/psImageStats.c (modified) (5 diffs)
-
imageops/psImageStats.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astronomy/psTime.d
r1231 r1260 1 psTime.o psTime.d : psTime.c psTime.h ../collections/psType.h ../sysUtils/psError.h 1 psTime.o psTime.d : psTime.c psTime.h ../collections/psType.h ../sysUtils/psError.h \ 2 ../sysUtils/psMemory.h -
trunk/psLib/src/image/psImageManip.c
r1250 r1260 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-07-2 1 23:39:10$12 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-07-22 20:02:56 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 404 404 if (in == NULL) { 405 405 psError(__func__,"Input image is NULL."); 406 psFree(out); 406 407 return NULL; 407 408 } … … 409 410 if (scale < 1) { 410 411 psError(__func__,"The scale must be positive."); 412 psFree(out); 411 413 return NULL; 412 414 } … … 414 416 if (stats == NULL) { 415 417 psError(__func__,"The stats input can not be NULL."); 418 psFree(out); 416 419 return NULL; 417 420 } … … 419 422 if (getSpecifiedStatValue(stats,&statVal) == false) { 420 423 psError(__func__,"The stat options didn't specify a single supported statistic type."); 424 psFree(out); 421 425 return NULL; 422 426 } … … 484 488 return out; 485 489 } 490 psImage* psImageResample(psImage* out, const psImage* in, int scale, psImageInterpolateMode mode) 491 { 492 int outRows; 493 int outCols; 494 float invScale; 495 496 if (in == NULL) { 497 psError(__func__,"Input image can not be NULL."); 498 psFree(out); 499 return NULL; 500 } 501 502 // create an output image of the same size and type 503 outRows = in->numRows*scale; 504 outCols = in->numCols*scale; 505 invScale = 1.0f / (float)scale; 506 507 508 #define PSIMAGE_RESAMPLE_CASE(TYPE) \ 509 case PS_TYPE_##TYPE: { \ 510 out = psImageRecycle(out,outCols, outRows, PS_TYPE_##TYPE); \ 511 for (int row=0;row<outRows;row++) { \ 512 ps##TYPE* rowData = out->data.TYPE[row]; \ 513 float inRow = (float)row * invScale; \ 514 for (int col=0;col<outCols;col++) { \ 515 rowData[col] = psImagePixelInterpolate(in,inRow,(float)col*invScale,0,mode); \ 516 } \ 517 } \ 518 break; \ 519 } 520 521 switch(in->type.type) { 522 PSIMAGE_RESAMPLE_CASE(U8) 523 PSIMAGE_RESAMPLE_CASE(U16) 524 PSIMAGE_RESAMPLE_CASE(U32) 525 PSIMAGE_RESAMPLE_CASE(U64) 526 PSIMAGE_RESAMPLE_CASE(S8) 527 PSIMAGE_RESAMPLE_CASE(S16) 528 PSIMAGE_RESAMPLE_CASE(S32) 529 PSIMAGE_RESAMPLE_CASE(S64) 530 PSIMAGE_RESAMPLE_CASE(F32) 531 PSIMAGE_RESAMPLE_CASE(F64) 532 PSIMAGE_RESAMPLE_CASE(C32) 533 PSIMAGE_RESAMPLE_CASE(C64) 534 default: 535 psError(__func__,"Unsupported type (%d)",in->type.type); 536 psFree(out); 537 return NULL; 538 } 539 540 return out; 541 } 486 542 487 543 psImage* psImageRoll(psImage* out, const psImage* in, int dx, int dy) … … 493 549 if (in == NULL) { 494 550 psError(__func__,"Input image can not be NULL."); 551 psFree(out); 495 552 return NULL; 496 553 } … … 793 850 PSIMAGE_ROTATE_ARBITRARY_LOOP(F64,MODE); \ 794 851 break; \ 852 case PS_TYPE_C32: \ 853 PSIMAGE_ROTATE_ARBITRARY_LOOP(C32,MODE); \ 854 break; \ 855 case PS_TYPE_C64: \ 856 PSIMAGE_ROTATE_ARBITRARY_LOOP(C64,MODE); \ 857 break; \ 795 858 default: \ 796 859 psError(__func__,"Image type (%d) not supported",type); \ -
trunk/psLib/src/image/psImageManip.h
r1250 r1260 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-07-2 1 23:39:10$12 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-07-22 20:02:56 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 105 105 ); 106 106 107 psImage* psImageResample( 108 psImage* out, ///< an psImage to recycle. If NULL, a new image is created 109 const psImage* in, ///< input image 110 int scale, 111 psImageInterpolateMode mode 112 ); 113 107 114 psImage* psImageRotate( 108 115 psImage* out, ///< an psImage to recycle. If NULL, a new image is created -
trunk/psLib/src/image/psImageStats.c
r1251 r1260 400 400 default: \ 401 401 psError(__func__,"Unsupported interpolation mode (#%d)",mode); \ 402 return unexposedValue; \403 402 } \ 404 403 break 405 404 406 405 switch (input->type.type) { 406 PSIMAGE_PIXEL_INTERPOLATE_CASE(U8); 407 PSIMAGE_PIXEL_INTERPOLATE_CASE(U16); 408 PSIMAGE_PIXEL_INTERPOLATE_CASE(U32); 409 PSIMAGE_PIXEL_INTERPOLATE_CASE(U64); 410 PSIMAGE_PIXEL_INTERPOLATE_CASE(S8); 411 PSIMAGE_PIXEL_INTERPOLATE_CASE(S16); 412 PSIMAGE_PIXEL_INTERPOLATE_CASE(S32); 413 PSIMAGE_PIXEL_INTERPOLATE_CASE(S64); 407 414 PSIMAGE_PIXEL_INTERPOLATE_CASE(F32); 415 PSIMAGE_PIXEL_INTERPOLATE_CASE(F64); 416 PSIMAGE_PIXEL_INTERPOLATE_CASE(C32); 417 PSIMAGE_PIXEL_INTERPOLATE_CASE(C64); 408 418 default: 409 419 psError(__func__,"Unsupported image datatype (%d)",input->type.type); … … 434 444 } 435 445 446 #define PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(TYPE) \ 447 inline psC64 p_psImagePixelInterpolateFLAT_##TYPE(const psImage *input, \ 448 float x, \ 449 float y, \ 450 psC64 unexposedValue) \ 451 { \ 452 int intX = (int) round((psF64)(x) - 0.5); \ 453 int intY = (int) round((psF64)(y) - 0.5); \ 454 int lastX = input->numCols - 1; \ 455 int lastY = input->numRows - 1; \ 456 \ 457 if ((intX < 0) || \ 458 (intX > lastX) || \ 459 (intY < 0) || \ 460 (intY > lastY)) { \ 461 return unexposedValue; \ 462 } \ 463 \ 464 return input->data.TYPE[intY][intX]; \ 465 } 466 436 467 PSIMAGE_PIXEL_INTERPOLATE_FLAT(U8) 437 468 PSIMAGE_PIXEL_INTERPOLATE_FLAT(U16) … … 444 475 PSIMAGE_PIXEL_INTERPOLATE_FLAT(F32) 445 476 PSIMAGE_PIXEL_INTERPOLATE_FLAT(F64) 477 PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(C32) 478 PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(C64) 446 479 447 480 #define PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(TYPE) \ … … 501 534 } 502 535 536 #define PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(TYPE) \ 537 inline psC64 p_psImagePixelInterpolateBILINEAR_##TYPE(const psImage *input, \ 538 float x, \ 539 float y, \ 540 psC64 unexposedValue) \ 541 { \ 542 double floorX = floor((psF64)(x) - 0.5); \ 543 double floorY = floor((psF64)(y) - 0.5); \ 544 double fracX = x - 0.5 - floorX; \ 545 double fracY = y - 0.5 - floorY; \ 546 int intFloorX = (int) floorX; \ 547 int intFloorY = (int) floorY; \ 548 int lastX = input->numCols - 1; \ 549 int lastY = input->numRows - 1; \ 550 double rx = 0.0; \ 551 psC64 pixel = 0.0; \ 552 ps##TYPE* currentRow; \ 553 ps##TYPE* nextRow; \ 554 \ 555 if ((intFloorX < 0) || \ 556 (intFloorX > lastX) || \ 557 (intFloorY < 0) || \ 558 (intFloorY > lastY)) { \ 559 return unexposedValue; \ 560 } \ 561 \ 562 currentRow = input->data.TYPE[intFloorY]; \ 563 if (intFloorY == lastY) { \ 564 pixel = currentRow[intFloorX]; \ 565 if (intFloorX < lastX) { \ 566 pixel+= fracY * (currentRow[intFloorX+1] - \ 567 currentRow[intFloorX]); \ 568 } \ 569 return(pixel); \ 570 } \ 571 nextRow = input->data.TYPE[intFloorY+1]; \ 572 if (intFloorX == lastX) { \ 573 pixel = currentRow[intFloorX]; \ 574 if (intFloorY < lastY) { \ 575 pixel+= fracX * (nextRow[intFloorX] - \ 576 currentRow[intFloorX]); \ 577 } \ 578 return(pixel); \ 579 } \ 580 \ 581 rx = currentRow[intFloorX] + \ 582 fracX * (currentRow[intFloorX+1] - \ 583 currentRow[intFloorX]); \ 584 \ 585 pixel = rx + fracY * ((psF64)nextRow[intFloorX] + \ 586 fracX * (nextRow[intFloorX+1] - \ 587 nextRow[intFloorX]) - rx); \ 588 \ 589 return(pixel); \ 590 } 591 503 592 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(U8) 504 593 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(U16) … … 511 600 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(F32) 512 601 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(F64) 513 602 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(C32) 603 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(C64) 604 -
trunk/psLib/src/image/psImageStats.h
r1251 r1260 10 10 * @author George Gusciora, MHPCC 11 11 * 12 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-07-2 1 23:39:48$12 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-07-22 20:02:57 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 76 76 float y, \ 77 77 psF64 unexposedValue \ 78 ); \ 78 ); 79 80 #define p_psImagePixelInterpolateComplexFcns(TYPE) \ 81 inline psC64 p_psImagePixelInterpolateFLAT_##TYPE( \ 82 const psImage *input, \ 83 float x, \ 84 float y, \ 85 psC64 unexposedValue \ 86 ); \ 87 inline psC64 p_psImagePixelInterpolateBILINEAR_##TYPE( \ 88 const psImage *input, \ 89 float x, \ 90 float y, \ 91 psC64 unexposedValue \ 92 ); 79 93 80 94 p_psImagePixelInterpolateFcns(U8) … … 88 102 p_psImagePixelInterpolateFcns(F32) 89 103 p_psImagePixelInterpolateFcns(F64) 104 p_psImagePixelInterpolateComplexFcns(C32) 105 p_psImagePixelInterpolateComplexFcns(C64) 90 106 91 107 #endif -
trunk/psLib/src/imageops/psImageStats.c
r1251 r1260 400 400 default: \ 401 401 psError(__func__,"Unsupported interpolation mode (#%d)",mode); \ 402 return unexposedValue; \403 402 } \ 404 403 break 405 404 406 405 switch (input->type.type) { 406 PSIMAGE_PIXEL_INTERPOLATE_CASE(U8); 407 PSIMAGE_PIXEL_INTERPOLATE_CASE(U16); 408 PSIMAGE_PIXEL_INTERPOLATE_CASE(U32); 409 PSIMAGE_PIXEL_INTERPOLATE_CASE(U64); 410 PSIMAGE_PIXEL_INTERPOLATE_CASE(S8); 411 PSIMAGE_PIXEL_INTERPOLATE_CASE(S16); 412 PSIMAGE_PIXEL_INTERPOLATE_CASE(S32); 413 PSIMAGE_PIXEL_INTERPOLATE_CASE(S64); 407 414 PSIMAGE_PIXEL_INTERPOLATE_CASE(F32); 415 PSIMAGE_PIXEL_INTERPOLATE_CASE(F64); 416 PSIMAGE_PIXEL_INTERPOLATE_CASE(C32); 417 PSIMAGE_PIXEL_INTERPOLATE_CASE(C64); 408 418 default: 409 419 psError(__func__,"Unsupported image datatype (%d)",input->type.type); … … 434 444 } 435 445 446 #define PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(TYPE) \ 447 inline psC64 p_psImagePixelInterpolateFLAT_##TYPE(const psImage *input, \ 448 float x, \ 449 float y, \ 450 psC64 unexposedValue) \ 451 { \ 452 int intX = (int) round((psF64)(x) - 0.5); \ 453 int intY = (int) round((psF64)(y) - 0.5); \ 454 int lastX = input->numCols - 1; \ 455 int lastY = input->numRows - 1; \ 456 \ 457 if ((intX < 0) || \ 458 (intX > lastX) || \ 459 (intY < 0) || \ 460 (intY > lastY)) { \ 461 return unexposedValue; \ 462 } \ 463 \ 464 return input->data.TYPE[intY][intX]; \ 465 } 466 436 467 PSIMAGE_PIXEL_INTERPOLATE_FLAT(U8) 437 468 PSIMAGE_PIXEL_INTERPOLATE_FLAT(U16) … … 444 475 PSIMAGE_PIXEL_INTERPOLATE_FLAT(F32) 445 476 PSIMAGE_PIXEL_INTERPOLATE_FLAT(F64) 477 PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(C32) 478 PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(C64) 446 479 447 480 #define PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(TYPE) \ … … 501 534 } 502 535 536 #define PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(TYPE) \ 537 inline psC64 p_psImagePixelInterpolateBILINEAR_##TYPE(const psImage *input, \ 538 float x, \ 539 float y, \ 540 psC64 unexposedValue) \ 541 { \ 542 double floorX = floor((psF64)(x) - 0.5); \ 543 double floorY = floor((psF64)(y) - 0.5); \ 544 double fracX = x - 0.5 - floorX; \ 545 double fracY = y - 0.5 - floorY; \ 546 int intFloorX = (int) floorX; \ 547 int intFloorY = (int) floorY; \ 548 int lastX = input->numCols - 1; \ 549 int lastY = input->numRows - 1; \ 550 double rx = 0.0; \ 551 psC64 pixel = 0.0; \ 552 ps##TYPE* currentRow; \ 553 ps##TYPE* nextRow; \ 554 \ 555 if ((intFloorX < 0) || \ 556 (intFloorX > lastX) || \ 557 (intFloorY < 0) || \ 558 (intFloorY > lastY)) { \ 559 return unexposedValue; \ 560 } \ 561 \ 562 currentRow = input->data.TYPE[intFloorY]; \ 563 if (intFloorY == lastY) { \ 564 pixel = currentRow[intFloorX]; \ 565 if (intFloorX < lastX) { \ 566 pixel+= fracY * (currentRow[intFloorX+1] - \ 567 currentRow[intFloorX]); \ 568 } \ 569 return(pixel); \ 570 } \ 571 nextRow = input->data.TYPE[intFloorY+1]; \ 572 if (intFloorX == lastX) { \ 573 pixel = currentRow[intFloorX]; \ 574 if (intFloorY < lastY) { \ 575 pixel+= fracX * (nextRow[intFloorX] - \ 576 currentRow[intFloorX]); \ 577 } \ 578 return(pixel); \ 579 } \ 580 \ 581 rx = currentRow[intFloorX] + \ 582 fracX * (currentRow[intFloorX+1] - \ 583 currentRow[intFloorX]); \ 584 \ 585 pixel = rx + fracY * ((psF64)nextRow[intFloorX] + \ 586 fracX * (nextRow[intFloorX+1] - \ 587 nextRow[intFloorX]) - rx); \ 588 \ 589 return(pixel); \ 590 } 591 503 592 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(U8) 504 593 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(U16) … … 511 600 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(F32) 512 601 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(F64) 513 602 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(C32) 603 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(C64) 604 -
trunk/psLib/src/imageops/psImageStats.h
r1251 r1260 10 10 * @author George Gusciora, MHPCC 11 11 * 12 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-07-2 1 23:39:48$12 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-07-22 20:02:57 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 76 76 float y, \ 77 77 psF64 unexposedValue \ 78 ); \ 78 ); 79 80 #define p_psImagePixelInterpolateComplexFcns(TYPE) \ 81 inline psC64 p_psImagePixelInterpolateFLAT_##TYPE( \ 82 const psImage *input, \ 83 float x, \ 84 float y, \ 85 psC64 unexposedValue \ 86 ); \ 87 inline psC64 p_psImagePixelInterpolateBILINEAR_##TYPE( \ 88 const psImage *input, \ 89 float x, \ 90 float y, \ 91 psC64 unexposedValue \ 92 ); 79 93 80 94 p_psImagePixelInterpolateFcns(U8) … … 88 102 p_psImagePixelInterpolateFcns(F32) 89 103 p_psImagePixelInterpolateFcns(F64) 104 p_psImagePixelInterpolateComplexFcns(C32) 105 p_psImagePixelInterpolateComplexFcns(C64) 90 106 91 107 #endif
Note:
See TracChangeset
for help on using the changeset viewer.
