Main Page   Class Overview   Pixels   Images   Geometry   Quick Index  

HxImageData.h

00001 /*
00002  *  Copyright (c) 1996, University of Amsterdam, The Netherlands.
00003  *  All rights reserved.
00004  *
00005  *
00006  *  Author(s):
00007  *  Dennis Koelma (koelma@wins.uva.nl)
00008  *  Edo Poll (poll@wins.uva.nl)
00009  */
00010 
00011 #include "HxImageSignature.h"
00012 
00013 #ifndef HxImageData_h
00014 #define HxImageData_h
00015 
00016 #include "HxValueType.h"
00017 #include "HxValue.h"
00018 #include "HxValueList.h"
00019 #include "HxPoint.h"
00020 #include "HxPointInt.h"
00021 #include "HxPointList.h"
00022 #include "HxSizes.h"
00023 #include "HxIncludedSigs.h" // remove this later!!!!!
00024 #include "HxByte.h"
00025 #include "HxString.h"
00026 #include "HxBorderType.h"
00027 
00028 //#include "HxObjectObserver.h"
00029 #include "HxMatrix.h"
00030 #include "HxGeoIntType.h"
00031 #include "HxTagList.h"
00032 
00033 #include "HxRcObject.h"
00034 
00035 #undef min
00036 #undef max
00037 
00038 //template<class ImageSigT> class HxImageTem;
00039 //template<class ImageSigT> class HxImageTem2d;
00040 //template<class ImageSigT> class HxImageTem3d;
00041 
00042 class HxObjectObserver;
00043 
00053 class HxImageData : public HxRcObject {
00054 public:
00055 
00057 
00059                                 HxImageData();
00060 
00062                                 HxImageData(const HxImageData&);
00063 
00065     virtual                     ~HxImageData();
00067 
00069 
00070     int                         ident() const;
00071     HxString                    name() const;
00072     void                        name(HxString s);
00073 
00074     virtual int                 dimensionality() const = 0;
00075     virtual int                 dimensionSize(int i) const = 0;
00076     virtual HxSizes             sizes() const = 0;
00077 
00078     virtual int                 numberOfPixels() const = 0;
00079 
00080     virtual int                 pixelDimensionality() const = 0;
00081     virtual HxValueType         pixelType() const = 0;
00082     virtual int                 pixelPrecision() const = 0;
00083 
00084     virtual HxImageSignature    signature() const = 0;
00086 
00088 
00090     virtual void                import(
00091                                     HxByte* data,
00092                                     HxTagList& tags = HxMakeTagList(),
00093                                     HxString importOp = "importPix") const;
00094     virtual void                import(
00095                                     short* data,
00096                                     HxTagList& tags = HxMakeTagList(),
00097                                     HxString importOp = "importPix") const;
00098     virtual void                import(
00099                                     int* data,
00100                                     HxTagList& tags = HxMakeTagList(),
00101                                     HxString importOp = "importPix") const;
00102     virtual void                import(
00103                                     float* data,
00104                                     HxTagList& tags = HxMakeTagList(),
00105                                     HxString importOp = "importPix") const;
00106     virtual void                import(
00107                                     double* data,
00108                                     HxTagList& tags = HxMakeTagList(),
00109                                     HxString importOp = "importPix") const;
00110     virtual void                exportOp(
00111                                     HxByte* data, HxTagList& tags,
00112                                     HxString exportOp = "exportPix") const;
00113     virtual void                exportOp(
00114                                     short* data, HxTagList& tags,
00115                                     HxString exportOp = "exportPix") const;
00116     virtual void                exportOp(
00117                                     int* data, HxTagList& tags,
00118                                     HxString exportOp = "exportPix") const;
00119     virtual void                exportOp(
00120                                     float* data, HxTagList& tags,
00121                                     HxString exportOp = "exportPix") const;
00122     virtual void                exportOp(
00123                                     double* data, HxTagList& tags,
00124                                     HxString exportOp = "exportPix") const;
00125     virtual void                inout(
00126                                     HxString inOutOp, HxTagList& tags) const;
00127     virtual void                inout(
00128                                     void* data, HxString dataType,
00129                                     HxString inOutOp,
00130                                     HxTagList& tags) const;
00132 
00134 
00136     virtual void                set(const HxValue val);
00137     virtual void                set(const HxImageData* arg);
00138     virtual void                set(int* pixels);
00139     virtual void                set(HxByte* pixels);
00140     virtual void                set(double* pixels) = 0;
00141 
00142     void                        setPartImage(const HxImageData* src);
00143     void                        setPartImage(
00144                                     const HxImageData* src,
00145                                     HxTagList& tags);
00146     void                        setPartImage(
00147                                     const HxImageData* src,
00148                                     HxPointInt srcBegin, 
00149                                     HxPointInt srcEnd, HxPointInt dstBegin);
00150     void                        setBorder(HxTagList& tags);
00151     void                        setBorder(
00152                                     HxSizes borderSize, HxTagList& tags,
00153                                     HxBorderType borderType = HXBORDERMIRROR);
00154     void                        setBorder(
00155                                     HxBorderType borderType,
00156                                     HxSizes borderSize,
00157                                     HxTagList& tags);
00158     void                        setBorder(
00159                                     HxSizes borderSize, HxValue val);
00160     void                        mirrorBorder(HxSizes borderSize);
00161     void                        propagateBorder(HxSizes borderSize);
00162 
00164 
00166 
00168     virtual void                unaryPixOp(
00169                                     HxImageData* src,
00170                                     HxString upoName, HxTagList& tags);
00171 
00173     virtual void                binaryPixOp(
00174                                     const HxImageData* arg1,
00175                                     const HxImageData* arg2, 
00176                                     HxString bpoName, HxTagList& tags);
00177 
00179     virtual void                multiPixOp(
00180                                     HxImageData** args,
00181                                     const int nArgs, 
00182                                     HxString mpoName, HxTagList& tags);
00183 
00185     static void                 MNPixOp(
00186                                     HxImageData** results,
00187                                     const int resultCnt, 
00188                                     HxImageData** args,
00189                                     const int argCnt, 
00190                                     HxString mpoName, HxTagList& tags);
00191 
00193     virtual void                generalizedConvolution(
00194                                     const HxImageData* srcImg, 
00195                                     const HxImageData* kerImg, 
00196                                     HxString genMul, HxString genAdd, 
00197                                     HxString kerName, HxTagList& tags);
00198 
00202     virtual void                generalizedConvolutionK1d(
00203                                     const HxImageData* srcImg, 
00204                                     int dimension, const HxImageData* kerImg,
00205                                     HxString genMul, HxString genAdd, 
00206                                     HxString kerName, HxTagList& tags);
00207 
00209     virtual void                neighbourhoodOp(
00210                                     const HxImageData* src, HxString ngbName, 
00211                                     HxTagList& tags) = 0;
00212 
00214     virtual void                neighbourhoodOp(
00215                                     const HxImageData* src, 
00216                                     const HxImageData* kernel,
00217                                     HxString ngbName, HxTagList& tags) = 0;
00218 
00220     virtual void                recursiveNeighOp(
00221                                     const HxImageData* srcImg, 
00222                                     const HxImageData* kerData, 
00223                                     HxString genMul, HxString genAdd, 
00224                                     HxTagList& tags);
00225 
00234     virtual void                rgbOp(HxString rgbName, HxTagList& tags);
00236 
00238 
00240     virtual void                geometricOp2d(const HxImageData* arg,
00241                                     HxMatrix func, HxGeoIntType gi,
00242                                     HxVec3Double translate,
00243                                     HxValue background) = 0;
00244     virtual void                restrict(
00245                                     const HxImageData* arg, HxPoint begin);
00246     virtual void                extend(
00247                                     const HxImageData* arg, HxPoint begin);
00248     virtual HxImageData*        projectDomain(int dimension, int coordinate) =0;
00249     virtual void                inverseProjectDomain(int dimension,
00250                                     int coordinate,
00251                                     const HxImageData* arg) = 0;
00253 
00255 
00257     virtual void                getValues(
00258                                     HxPointListConstIter first,
00259                                     HxPointListConstIter last,
00260                                     HxValueListBackInserter) = 0;
00261     virtual HxValue             sampleIdentMask(const HxImageData* mask,
00262                                     HxPoint p, HxSizes size, int label,
00263                                     HxString sFunc) = 0;
00264     virtual void                sampleIdentMask(const HxImageData* mask,
00265                                     HxPoint p, HxSizes size, int label,
00266                                     HxString sFunc,
00267                                     HxValueListBackInserter res) = 0;
00268     virtual HxValue             sampleWeightMask(const HxImageData* mask,
00269                                     HxPoint p, HxString sFunc) = 0;
00271 
00273 
00275     virtual void                setAt(int x, int y, int z,
00276                                     const HxValue v) = 0;
00277     virtual HxValue             getAt(int x, int y, int z) const = 0;
00278 
00279     virtual HxRcObject*         clone() const;
00280 
00281     virtual void                setPpmPixels(const HxByte* pixels);
00282     virtual void                getPpmPixels(HxByte* pixels);
00283 
00284 
00285     virtual void                getRgbPixels2d(int* pixels, HxString dispF,
00286                                     int bufWidth, int bufHeight,
00287                                     int VX, int VY, int VW, int VH,
00288                                     double SX, double SY, double scaleX,
00289                                     double scaleY, HxGeoIntType gi) const {}
00290 
00291     virtual void                getDoublePixels(double* pixels) = 0;
00292 
00293     virtual STD_OSTREAM&        printInfo(STD_OSTREAM &os,
00294                                     int doData = 0) const = 0;
00295 
00296     static void                 setObjectObserver(const HxObjectObserver&);
00297 
00298     static bool                 probeMNpo(
00299                                     const HxImageSignature resultsSig,
00300                                     const HxImageSignature argsSig,
00301                                     HxString mpoName, HxTagList& tags);
00303 
00304 
00306 
00307     virtual void                convertColor(
00308                                     HxVec3Double scale1,
00309                                     HxVec3Double gamma1,
00310                                     HxUpoVec3Double step1,
00311                                     HxUpoVec3Double step2,
00312                                     HxUpoVec3Double step3,
00313                                     HxVec3Double gamma2,
00314                                     HxVec3Double scale2) = 0;
00315 
00316 
00317     virtual HxImageData*        projectRange(int dimension);
00318     virtual void                inverseProjectRange(
00319                                     int dimension, const HxImageData* arg);
00320                                     
00321     virtual void                transpose(const HxImageData* src) = 0;
00323 
00324     // Todo: these functions should be part of the Kernel interface
00325     void                        weight(double w);
00326     HxScalarDouble              weight() const;
00327 
00328 protected:
00329 
00330     int                         checkEqualImageSig(HxString func,
00331                                     const HxImageData* arg);
00332     int                         checkEqualImageSizes(HxString func,
00333                                     const HxImageData* arg);
00334     int                         checkEqualImageSigAndSizes(HxString func,
00335                                     const HxImageData* arg);
00336     int                         checkLargerImageSigAndSizes(HxString func,
00337                                     const HxImageData* arg);
00338     int                         checkProperKernelSigAndSizes(HxString func,
00339                                     const HxImageData* kernel,
00340                                     int reqDim, int reqScalar,
00341                                     int appliedDim = 0);
00342 
00343     int                         checkEqualImageSizesDim(HxString func,
00344                                     const HxImageData* arg, int dimension);
00345     int                         checkImageDimension(HxString func,
00346                                     int dim, int coord);
00347     int                         checkPixelDimension(HxString func, int dim);
00348     bool                        checkBorderSize(
00349                                     HxString funcName,
00350                                     HxSizes borderSize) const;
00351     HxSizes                     getProjectDomainSizes(int dimension) const;
00352 
00353 private:
00354 
00355     static int                      _nr;
00356     int                             _ident;
00357     HxString                        _name;
00358     double                          _weight; // for use by a kernel image
00359 
00360     static const HxObjectObserver*  _objectObserver;
00361 };
00362 
00363 //typedef HxRcPtr<HxImageData> HxImageDataRcPtr;
00364 
00365 #endif

Generated on Tue Jan 8 13:59:12 2002 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001