Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's 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 
00071     int                         ident() const;
00073     HxString                    name() const;
00075     void                        name(HxString s);
00076 
00078     virtual int                 dimensionality() const = 0;
00080     virtual int                 dimensionSize(int i) const = 0;
00082     virtual HxSizes             sizes() const = 0;
00083 
00085     virtual int                 numberOfPixels() const = 0;
00086 
00088     virtual int                 pixelDimensionality() const = 0;
00090     virtual HxValueType         pixelType() const = 0;
00092     virtual int                 pixelPrecision() const = 0;
00093 
00095     virtual HxImageSignature    signature() const = 0;
00097 
00099 
00102     virtual void                import(
00103                                     HxByte* data,
00104                                     HxTagList& tags = HxMakeTagList(),
00105                                     HxString importOp = "importPix");
00107     virtual void                import(
00108                                     short* data,
00109                                     HxTagList& tags = HxMakeTagList(),
00110                                     HxString importOp = "importPix");
00112     virtual void                import(
00113                                     int* data,
00114                                     HxTagList& tags = HxMakeTagList(),
00115                                     HxString importOp = "importPix");
00117     virtual void                import(
00118                                     float* data,
00119                                     HxTagList& tags = HxMakeTagList(),
00120                                     HxString importOp = "importPix");
00122     virtual void                import(
00123                                     double* data,
00124                                     HxTagList& tags = HxMakeTagList(),
00125                                     HxString importOp = "importPix");
00127     virtual void                exportOp(
00128                                     HxByte* data, HxTagList& tags,
00129                                     HxString exportOp = "exportPix");
00131     virtual void                exportOp(
00132                                     short* data, HxTagList& tags,
00133                                     HxString exportOp = "exportPix");
00135     virtual void                exportOp(
00136                                     int* data, HxTagList& tags,
00137                                     HxString exportOp = "exportPix");
00139     virtual void                exportOp(
00140                                     float* data, HxTagList& tags,
00141                                     HxString exportOp = "exportPix");
00143     virtual void                exportOp(
00144                                     double* data, HxTagList& tags,
00145                                     HxString exportOp = "exportPix");
00147     virtual void                inout(
00148                                     void* data, HxString dataType,
00149                                     HxString inOutOp,
00150                                     HxTagList& tags);
00151 
00153     virtual void                inout(
00154                                     HxString inOutOp, HxTagList& tags);
00155 
00157     virtual void                exportExtra(
00158                                     HxString exportOp,
00159                                     HxImageData* extraIm,
00160                                     HxTagList& tags);
00162 
00164 
00166     virtual void                set(const HxValue val);
00167     virtual void                set(HxImageData* arg);
00168     virtual void                set(int* pixels);
00169     virtual void                set(HxByte* pixels);
00170     virtual void                set(double* pixels) = 0;
00171 
00172     void                        setPartImage(HxImageData* src);
00173 
00175     void                        setPartImage(
00176                                     HxImageData* src,
00177                                     HxTagList& tags);
00178     void                        setPartImage(
00179                                     HxImageData* src,
00180                                     HxPointInt srcBegin, 
00181                                     HxPointInt srcEnd, HxPointInt dstBegin);
00182 
00184     void                        setBorder(HxTagList& tags);
00185 
00186     void                        setBorder(
00187                                     HxSizes borderSize, HxTagList& tags,
00188                                     HxBorderType borderType = HXBORDERMIRROR);
00189     void                        setBorder(
00190                                     HxBorderType borderType,
00191                                     HxSizes borderSize,
00192                                     HxTagList& tags);
00193     void                        setBorder(
00194                                     HxSizes borderSize, HxValue val);
00195     void                        mirrorBorder(HxSizes borderSize);
00196     void                        propagateBorder(HxSizes borderSize);
00197 
00199 
00201 
00203     virtual void                unaryPixOp(
00204                                     HxImageData* src,
00205                                     HxString upoName, HxTagList& tags);
00206 
00208     virtual void                binaryPixOp(
00209                                     HxImageData* arg1,
00210                                     HxImageData* arg2, 
00211                                     HxString bpoName, HxTagList& tags);
00212 
00214     virtual void                multiPixOp(
00215                                     HxImageData** args,
00216                                     int nArgs, 
00217                                     HxString mpoName, HxTagList& tags);
00218 
00220     static void                 MNPixOp(
00221                                     HxImageData** results,
00222                                     int resultCnt, 
00223                                     HxImageData** args,
00224                                     int argCnt, 
00225                                     HxString mpoName, HxTagList& tags);
00226 
00228     virtual void                generalizedConvolution(
00229                                     HxImageData* srcImg, 
00230                                     HxImageData* kerImg, 
00231                                     HxString genMul, HxString genAdd, 
00232                                     HxString kerName, HxTagList& tags);
00233 
00237     virtual void                generalizedConvolutionK1d(
00238                                     HxImageData* srcImg, 
00239                                     int dimension, HxImageData* kerImg,
00240                                     HxString genMul, HxString genAdd, 
00241                                     HxString kerName, HxTagList& tags);
00242 
00246     virtual void                genConvSeparated(
00247                                     HxImageData* srcImg, int dimension,
00248                                     HxImageData* kerImg1, HxImageData* kerImg2,
00249                                     HxString genMul, HxString genAdd, 
00250                                     HxString kerName, HxTagList& tags);
00251 
00255     virtual void                genConv2dSep(
00256                                     HxImageData* srcImg,
00257                                     HxImageData* kerImg1, HxImageData* kerImg2,
00258                                     HxString genMul, HxString genAdd, 
00259                                     HxString kerName, HxTagList& tags);
00260 
00264     virtual void                genConv3dSep(
00265                                     HxImageData* srcImg, HxImageData* kerImg1,
00266                                     HxImageData* kerImg2, HxImageData* kerImg3,
00267                                     HxString genMul, HxString genAdd, 
00268                                     HxString kerName, HxTagList& tags);
00269 
00271     virtual void                recGenConv(
00272                                     HxImageData* srcImg, 
00273                                     HxImageData* kerImg, 
00274                                     HxString genMul, HxString genAdd, 
00275                                     HxTagList& tags);
00276 
00279     virtual void                recGenConv2dSep(
00280                                     HxImageData* srcImg, 
00281                                     HxImageData* kerImg1, 
00282                                     HxImageData* kerImg2, 
00283                                     HxString genMul, HxString genAdd, 
00284                                     HxTagList& tags);
00285 
00287     virtual void                neighbourhoodOp(
00288                                     HxImageData* src, HxString ngbName, 
00289                                     HxTagList& tags);
00290 
00292     virtual void                neighbourhoodOpExtra(
00293                                     HxImageData* src, HxImageData* extraIm,
00294                                     HxString ngbName, HxTagList& tags);
00295 
00297     virtual void                neighbourhoodOpExtra2(
00298                                     HxImageData* src, 
00299                                     HxImageData* extraIm, HxImageData* extraIm2,
00300                                     HxString ngbName, HxTagList& tags);
00301 
00303     virtual void                neighbourhoodOp(
00304                                     HxImageData* src, 
00305                                     HxImageData* kernel,
00306                                     HxString ngbName, HxTagList& tags);
00307 
00309     virtual void                queueBasedOp(
00310                                     HxImageData* srcImg, 
00311                                     HxImageData* kerImg, 
00312                                     HxString genOp, 
00313                                     HxTagList& tags);
00314 
00316     virtual void                diyOp(
00317                                     HxImageData* src, 
00318                                     HxString diyName, HxTagList& tags);
00319 
00321     virtual void                rgbOp(HxString rgbName, HxTagList& tags);
00323 
00325 
00328     virtual void                geometricOp2d(HxImageData* arg,
00329                                     HxMatrix func, HxGeoIntType gi,
00330                                     HxVec3Double translate,
00331                                     HxValue background) = 0;
00332     virtual void                restrict(
00333                                     HxImageData* arg, HxPoint begin);
00334     virtual void                extend(
00335                                     HxImageData* arg, HxPoint begin);
00336     virtual HxImageData*        projectDomain(int dimension, int coordinate) =0;
00337     virtual void                inverseProjectDomain(int dimension,
00338                                     int coordinate,
00339                                     HxImageData* arg) = 0;
00341 
00343 
00345     virtual void                getValues(
00346                                     HxPointListConstIter first,
00347                                     HxPointListConstIter last,
00348                                     HxValueListBackInserter) = 0;
00350 
00352 
00354     virtual void                setAt(int x, int y, int z,
00355                                     const HxValue v) = 0;
00356     virtual HxValue             getAt(int x, int y, int z) const = 0;
00357 
00358     virtual HxRcObject*         clone();
00359 
00360     virtual void                setPpmPixels(const HxByte* pixels);
00361     virtual void                getPpmPixels(HxByte* pixels);
00362 
00363 
00364     virtual void                getRgbPixels2d(int* pixels, HxString dispF,
00365                                     int bufWidth, int bufHeight,
00366                                     int VX, int VY, int VW, int VH,
00367                                     double SX, double SY, double scaleX,
00368                                     double scaleY, HxGeoIntType gi) const {}
00369 
00370     virtual void                getDoublePixels(double* pixels) = 0;
00371 
00372     virtual STD_OSTREAM&        printInfo(STD_OSTREAM &os,
00373                                     int doData = 0) const = 0;
00374 
00375     static void                 setObjectObserver(const HxObjectObserver&);
00376 
00377     static bool                 probeMNpo(
00378                                     const HxImageSignature resultsSig,
00379                                     const HxImageSignature argsSig,
00380                                     HxString mpoName, HxTagList& tags);
00382 
00383 
00385 
00387     virtual HxImageData*        projectRange(int dimension);
00388     virtual void                inverseProjectRange(
00389                                     int dimension, HxImageData* arg);
00391 
00392     // Todo: these functions should be part of the Kernel interface
00393     void                        weight(double w);
00394     HxScalarDouble              weight() const;
00395 
00396 protected:
00397 
00398     int                         checkEqualImageSig(HxString func,
00399                                     HxImageData* arg);
00400     int                         checkEqualImageSizes(HxString func,
00401                                     HxImageData* arg);
00402     int                         checkEqualImageSigAndSizes(HxString func,
00403                                     HxImageData* arg);
00404     int                         checkLargerImageSigAndSizes(HxString func,
00405                                     HxImageData* arg);
00406     int                         checkProperKernelSigAndSizes(HxString func,
00407                                     HxImageData* kernel,
00408                                     int reqDim, int reqScalar,
00409                                     int appliedDim = 0);
00410 
00411     int                         checkEqualImageSizesDim(HxString func,
00412                                     HxImageData* arg, int dimension);
00413     int                         checkImageDimension(HxString func,
00414                                     int dim, int coord);
00415     int                         checkPixelDimension(HxString func, int dim);
00416     bool                        checkBorderSize(
00417                                     HxString funcName,
00418                                     HxSizes borderSize) const;
00419     HxSizes                     getProjectDomainSizes(int dimension) const;
00420 
00421 private:
00422 
00423     static int                      _nr;
00424     int                             _ident;
00425     HxString                        _name;
00426     double                          _weight; // for use by a kernel image
00427 
00428     static const HxObjectObserver*  _objectObserver;
00429 };
00430 
00431 //typedef HxRcPtr<HxImageData> HxImageDataRcPtr;
00432 
00433 #endif

Generated on Tue Feb 3 14:18:35 2004 for C++Reference by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001