X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fimagefile.h;h=f300cdba9bc8d43990a88b495edf1652cef4d0b4;hp=3587f1cde01e5cc90b905ea5bafd9874200ca4d5;hb=8a7697ce57b56cdc43698cd1241ad98d49f9b5ac;hpb=9b2bb510160bdb56f04847f5b55ab61dd8a47976 diff --git a/include/imagefile.h b/include/imagefile.h index 3587f1c..f300cdb 100644 --- a/include/imagefile.h +++ b/include/imagefile.h @@ -7,9 +7,9 @@ ** Date Started: June 2000 ** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg +** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: imagefile.h,v 1.27 2001/01/02 05:34:57 kevin Exp $ +** $Id$ ** ** 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 @@ -47,20 +47,20 @@ class F32Image : public Array2dFile { public: F32Image (int nx, int ny, int dataType = Array2dFile::DATA_TYPE_REAL); - F32Image (void); - - kfloat32** getArray (void) - { return (kfloat32**) (m_arrayData); } - - 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); } - + F32Image (void); + + kfloat32** getArray (void) + { return (kfloat32**) (m_arrayData); } + + 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; } @@ -79,18 +79,18 @@ class F64Image : public Array2dFile F64Image (int nx, int ny, int dataType = Array2dFile::DATA_TYPE_REAL); F64Image (void); - kfloat64** getArray (void) - { return (kfloat64**) (m_arrayData); } - - 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); } - + kfloat64** getArray (void) + { return (kfloat64**) (m_arrayData); } + + 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; } @@ -106,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; @@ -114,34 +114,60 @@ 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 -{ -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); +{ +private: + + static const char* s_aszExportFormatName[]; + static const char* s_aszExportFormatTitle[]; + static const int s_iExportFormatCount; + static const char* s_aszImportFormatName[]; + static const char* s_aszImportFormatTitle[]; + static const int s_iImportFormatCount; + + static void skipSpacePPM (FILE* fp); // skip space in a ppm file + +public: + + static const int EXPORT_FORMAT_INVALID; + static const int IMPORT_FORMAT_INVALID; + static const int EXPORT_FORMAT_TEXT; + static const int EXPORT_FORMAT_PGM; + static const int EXPORT_FORMAT_PGMASCII; + static const int IMPORT_FORMAT_PPM; +#if HAVE_PNG + static const int EXPORT_FORMAT_PNG; + static const int EXPORT_FORMAT_PNG16; + static const int IMPORT_FORMAT_PNG; +#endif +#if HAVE_CTN_DICOM + static const int EXPORT_FORMAT_DICOM; + static const int IMPORT_FORMAT_DICOM; +#endif + static const int EXPORT_FORMAT_RAW; + + static const int getExportFormatCount() {return s_iExportFormatCount;} + static const char** getExportFormatNameArray() {return s_aszExportFormatName;} + static const char** getExportFormatTitleArray() {return s_aszExportFormatTitle;} + static int convertExportFormatNameToID (const char* const ExportFormatName); + static const char* convertExportFormatIDToName (const int ExportFormatID); + static const char* convertExportFormatIDToTitle (const int ExportFormatID); + + static const int getImportFormatCount() {return s_iImportFormatCount;} + static const char** getImportFormatNameArray() {return s_aszImportFormatName;} + static const char** getImportFormatTitleArray() {return s_aszImportFormatTitle;} + static int convertImportFormatNameToID (const char* const ImportFormatName); + static const char* convertImportFormatIDToName (const int ImportFormatID); + static const char* convertImportFormatIDToTitle (const int ImportFormatID); + + static const double s_dRedGrayscaleFactor; + static const double s_dGreenGrayscaleFactor; + static const double s_dBlueGrayscaleFactor; ImageFile (int nx, int ny) : ImageFileBase (nx, ny) @@ -150,53 +176,70 @@ public: ImageFile (void) : ImageFileBase () {} - - bool convertRealToComplex (); - bool convertComplexToReal (); + + void getCenterCoordinates (unsigned int& iXCenter, unsigned int& iYCenter); + + 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 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 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); + 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; + bool fftRows (ImageFile& result) const; + bool ifftRows (ImageFile& result) const; + bool fftCols (ImageFile& result) const; + bool ifftCols (ImageFile& result) const; +#endif + bool magnitude (ImageFile& result) const; + bool phase (ImageFile& result) const; + bool real (ImageFile& result) const; + bool imaginary (ImageFile& result) const; -#if HAVE_PNG + bool exportImage (const char* const pszFormat, const char* const pszFilename, int nxcell, int nycell, double densmin, double densmax); + + bool importImage (const char* const pszFormat, const char* const pszFilename); + +#ifdef HAVE_PNG bool writeImagePNG (const char* const outfile, int bitdepth, int nxcell, int nycell, double densmin, double densmax); + bool readImagePNG (const char* const pszFile); #endif -#if HAVE_GD +#ifdef HAVE_GD bool writeImageGIF (const char* const outfile, int nxcell, int nycell, double densmin, double densmax); #endif 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); + bool readImagePPM (const char* const pszFile); + bool writeImageRaw(const char* const outfile, int nxcell, int nycell); + bool writeImageText (const char* const outfile); + + static double redGrayscaleFactor() {return s_dRedGrayscaleFactor;} + static double greenGrayscaleFactor() {return s_dGreenGrayscaleFactor;} + static double blueGrayscaleFactor() {return s_dBlueGrayscaleFactor;} + static double colorToGrayscale (double r, double g, double b) + { return r * s_dRedGrayscaleFactor + g * s_dGreenGrayscaleFactor + b * s_dBlueGrayscaleFactor; } };