#include "HxImageRep.h"
Go to the source code of this file.
Functions | |
HxImageRep L_HXIMAGEREP | HxDot (HxImageRep im1, HxImageRep im2) |
Dot product . More... |
|
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 } |