Horus Doc || C++ Reference || Class Overview   Pixels   Images   Detector   Geometry   Registry || Doxygen's quick Index  

HxDot.h File Reference

More...

#include "HxImageRep.h"

Go to the source code of this file.

Functions

HxImageRep L_HXIMAGEREP HxDot (HxImageRep im1, HxImageRep im2)
 Dot product . More...


Detailed Description


Function Documentation

HxImageRep L_HXIMAGEREP HxDot HxImageRep    im1,
HxImageRep    im2
 

Dot product .

The function performs dot product (see Pixels) on all pixels in the input images via a binary pixel operation (see Images).

Implementation specifics : The pixel functor : HxBpoDot. The image functor instantiator : HxInstantiatorDot.

00013 {
00014     HxString fname("HxDot");
00015 
00016     if (im1.isNull())
00017     {
00018         HxGlobalError::instance()->reportError(fname, im1.name(), "null image", HxGlobalError::HX_GE_INVALID);
00019         return HxImageRep();
00020     }
00021     if (im2.isNull())
00022     {
00023         HxGlobalError::instance()->reportError(fname, im2.name(), "null image", HxGlobalError::HX_GE_INVALID);
00024         return HxImageRep();
00025     }
00026 
00027     if (im1.signature().imageDimensionality() != im2.signature().imageDimensionality())
00028     {
00029         HxGlobalError::instance()->reportError(fname, "unequal image dimensionalities", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00030         return HxImageRep();
00031     }
00032     if (im1.signature().pixelDimensionality() != im2.signature().pixelDimensionality())
00033     {
00034         HxGlobalError::instance()->reportError(fname, "unequal pixel dimensionalities", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00035         return HxImageRep();
00036     }
00037 
00038     if (im1.sizes().x() != im2.sizes().x())
00039     {
00040         HxGlobalError::instance()->reportError(fname, "unequal image widths", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00041         return HxImageRep();
00042     }
00043     if (im1.sizes().y() != im2.sizes().y())
00044     {
00045         HxGlobalError::instance()->reportError(fname, "unequal image heights", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00046         return HxImageRep();
00047     }
00048     if (im1.signature().imageDimensionality() > 2)
00049     {
00050         if (im1.sizes().z() != im2.sizes().z())
00051         {
00052             HxGlobalError::instance()->reportError(fname, "unequal image depths", HxGlobalError::HX_GE_UNEQUAL_IMAGES);
00053             return HxImageRep();
00054         }
00055     }
00056 
00057     // in case of byte, unsigned: generate warnings in case of potentially dangerous
00058     // situations.
00059     // Check if image is byte.
00060     if (((im1.signature().pixelType() == INT_VALUE) && 
00061          (im1.signature().pixelPrecision() == 8)) ||
00062         ((im2.signature().pixelType() == INT_VALUE) && 
00063          (im2.signature().pixelPrecision() == 8)))
00064     {
00065         if ((im1.pixelDimensionality() == 1) && (im1.pixelDimensionality() == 1))
00066         {
00067             if ((HxPixMax(im1).HxScalarIntValue() + 
00068                  HxPixMax(im2).HxScalarIntValue()) > HxScalarInt(255))
00069             {
00070                 HxGlobalError::instance()->reportWarning(fname, 
00071                     im1.name()+HxString(" ")+im2.name(), 
00072                     "possible overflow due to byte precision", 
00073                     HxGlobalError::HX_GW_OVERFLOW);
00074             }
00075         }
00076         else if ((HxPixMax(HxUnaryMax(im1)).HxScalarIntValue() + 
00077                   HxPixMax(HxUnaryMax(im2)).HxScalarIntValue()) > HxScalarInt(255))
00078         {
00079                 HxGlobalError::instance()->reportWarning(fname, 
00080                     im1.name()+HxString(" ")+im2.name(), 
00081                     "possible overflow due to byte precision", 
00082                     HxGlobalError::HX_GW_OVERFLOW);
00083         }
00084     } 
00085 
00086     return im1.binaryPixOp(im2, "dot");
00087 }


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