X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fimagefile.h;h=eaa69afa89e97556e7bea844ba5e0f669c784c35;hp=7c7daba56eae43d69172b47763cbb2dd69fa7a28;hb=c00c639073653fac7463a88f2b000f263236550d;hpb=5c6b29ab4885308cc3381af6e0a68f4804956d2e diff --git a/include/imagefile.h b/include/imagefile.h index 7c7daba..eaa69af 100644 --- a/include/imagefile.h +++ b/include/imagefile.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: imagefile.h,v 1.24 2000/12/29 15:45:06 kevin Exp $ +** $Id: imagefile.h,v 1.28 2001/01/02 16:02:12 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -28,9 +28,9 @@ #ifndef IMAGEFILE_H #define IMAGEFILE_H -#ifndef MSVC -#include -#endif +#ifndef MSVC +#include +#endif #include #include #include @@ -46,8 +46,8 @@ class F32Image : public Array2dFile { public: - F32Image (int nx, int ny); - F32Image (void); + F32Image (int nx, int ny, int dataType = Array2dFile::DATA_TYPE_REAL); + F32Image (void); kfloat32** getArray (void) { return (kfloat32**) (m_arrayData); } @@ -55,6 +55,12 @@ public: kfloat32** const getArray (void) const { return (kfloat32** const) (m_arrayData); } + kfloat32** getImaginaryArray (void) + { return (kfloat32**) (m_imaginaryArrayData); } + + kfloat32** const getImaginaryArray (void) const + { return (kfloat32** const) (m_imaginaryArrayData); } + #ifdef HAVE_MPI MPI::Datatype getMPIDataType (void) const { return MPI::FLOAT; } @@ -70,7 +76,7 @@ class F64Image : public Array2dFile { public: - F64Image (int nx, int ny); + F64Image (int nx, int ny, int dataType = Array2dFile::DATA_TYPE_REAL); F64Image (void); kfloat64** getArray (void) @@ -79,6 +85,12 @@ class F64Image : public Array2dFile kfloat64** const getArray (void) const { return (kfloat64** const) (m_arrayData); } + kfloat64** getImaginaryArray (void) + { return (kfloat64**) (m_imaginaryArrayData); } + + kfloat64** const getImaginaryArray (void) const + { return (kfloat64** const) (m_imaginaryArrayData); } + #ifdef HAVE_MPI MPI::Datatype getMPIDataType (void) const { return MPI::DOUBLE; } @@ -94,7 +106,7 @@ typedef F64Image ImageFileBase; typedef kfloat64 ImageFileValue; typedef kfloat64* ImageFileColumn; typedef kfloat64** ImageFileArray; -typedef kfloat64** const ImageFileArrayConst; +typedef kfloat64** const ImageFileArrayConst; typedef const kfloat64* ImageFileColumnConst; #else typedef F32Image ImageFileBase; @@ -102,13 +114,35 @@ typedef kfloat32 ImageFileValue; typedef kfloat32* ImageFileColumn; typedef kfloat32** ImageFileArray; typedef kfloat32** const ImageFileArrayConst; -typedef const kfloat32* ImageFileColumnConst; +typedef const kfloat32* ImageFileColumnConst; #endif class ImageFile : public ImageFileBase { - public: +private: + + static const char* s_aszFormatName[]; + static const char* s_aszFormatTitle[]; + static const int s_iFormatCount; + +public: + + static const int FORMAT_INVALID; + static const int FORMAT_PGM; + static const int FORMAT_PGMASCII; +#if HAVE_PNG + static const int FORMAT_PNG; + static const int FORMAT_PNG16; +#endif + + static const int getFormatCount() {return s_iFormatCount;} + static const char** getFormatNameArray() {return s_aszFormatName;} + static const char** getFormatTitleArray() {return s_aszFormatTitle;} + static int convertFormatNameToID (const char* const formatName); + static const char* convertFormatIDToName (const int formatID); + static const char* convertFormatIDToTitle (const int formatID); + ImageFile (int nx, int ny) : ImageFileBase (nx, ny) {} @@ -117,38 +151,52 @@ class ImageFile : public ImageFileBase : ImageFileBase () {} - void filterResponse (const char* const domainName, double bw, const char* const filterName, double filt_param); + bool convertRealToComplex (); + bool convertComplexToReal (); + + void filterResponse (const char* const domainName, double bw, const char* const filterName, double filt_param, double dInputScale = 1., double dOutputScale = 1.); void statistics (double& min, double& max, double& mean, double& mode, double& median, double& stddev) const; + void statistics (ImageFileArrayConst v, double& min, double& max, double& mean, double& mode, double& median, double& stddev) const; void getMinMax (double& min, double& max) const; void printStatistics (std::ostream& os) const; bool comparativeStatistics (const ImageFile& imComp, double& d, double& r, double& e) const; bool printComparativeStatistics (const ImageFile& imComp, std::ostream& os) const; - + bool subtractImages (const ImageFile& rRHS, ImageFile& result) const; - bool addImages (const ImageFile& rRHS, ImageFile& result) const; - bool multiplyImages (const ImageFile& rRHS, ImageFile& result) const; - bool divideImages (const ImageFile& rRHS, ImageFile& result) const; - - bool invertPixelValues (ImageFile& result) const; - bool sqrt (ImageFile& result) const; - bool square (ImageFile& result) const; - bool log (ImageFile& result) const; - bool exp (ImageFile& result) const; - bool FFTMagnitude (ImageFile& result) const; - bool FFTPhase (ImageFile& result) const; - + bool addImages (const ImageFile& rRHS, ImageFile& result) const; + bool multiplyImages (const ImageFile& rRHS, ImageFile& result) const; + bool divideImages (const ImageFile& rRHS, ImageFile& result) const; + + bool scaleImage (ImageFile& result) const; + + bool invertPixelValues (ImageFile& result) const; + bool sqrt (ImageFile& result) const; + bool square (ImageFile& result) const; + bool log (ImageFile& result) const; + bool exp (ImageFile& result) const; + bool fourier (ImageFile& result) const; + bool inverseFourier (ImageFile& result) const; +#ifdef HAVE_FFTW + bool fft (ImageFile& result) const; + bool ifft (ImageFile& result) const; +#endif + bool magnitude (ImageFile& result) const; + bool phase (ImageFile& result) const; + int display (void) const; int displayScaling (const int scaleFactor, ImageFileValue pmin, ImageFileValue pmax) const; + bool exportImage (const char* const pszFormat, const char* const pszFilename, int nxcell, int nycell, double densmin, double densmax); + #if HAVE_PNG - void writeImagePNG (const char *outfile, int bitdepth, int nxcell, int nycell, double densmin, double densmax); + bool writeImagePNG (const char* const outfile, int bitdepth, int nxcell, int nycell, double densmin, double densmax); #endif #if HAVE_GD - void writeImageGIF (const char *outfile, int nxcell, int nycell, double densmin, double densmax); + bool writeImageGIF (const char* const outfile, int nxcell, int nycell, double densmin, double densmax); #endif - void writeImagePGM (const char *outfile, int nxcell, int nycell, double densmin, double densmax); - void writeImagePGMASCII (const char *outfile, int nxcell, int nycell, double densmin, double densmax); + bool writeImagePGM (const char* const outfile, int nxcell, int nycell, double densmin, double densmax); + bool writeImagePGMASCII (const char* const outfile, int nxcell, int nycell, double densmin, double densmax); };