#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 }
|
1.2.12 written by Dimitri van Heesch,
© 1997-2001