/*
* Copyright (c) 2000, University of Amsterdam, The Netherlands.
* All rights reserved.
*
* Author(s):
* Dennis Koelma (koelma@wins.uva.nl)
*
*/
#include "HxImageToHistogram.h"
#include "HxImgFtorInOut.h"
#include "HxIncludedSigs.h"
template<class ValT>
class HxInOutHistogram
{
public:
typedef HxTagPixOpOut DirectionCategory;
typedef HxTagTransInVar TransVarianceCategory;
typedef HxTag1Phase PhaseCategory;
HxInOutHistogram(HxTagList&);
void doIt(const ValT& pixV);
static HxString className();
private:
HxHistogram* _hist;
int _getDim;
};
template<class ValT>
HxInOutHistogram<ValT>::HxInOutHistogram(HxTagList& tags)
{
_hist = HxGetTag(tags, "histogram", (HxHistogram*)0);
_getDim = HxGetTag<int>(tags, "getDim");
}
template<class ValT>
inline void
HxInOutHistogram<ValT>::doIt(const ValT& pixV)
{
if (_getDim <= 0)
_hist->insertVal(pixV);
else
_hist->insertVal(((ValT) pixV).getValue(_getDim));
}
template<class ValT>
HxString
HxInOutHistogram<ValT>::className()
{
return HxString("histogram");
}
template<class ImgSigT>
struct HxInstantiatorHistogram
{
HxImgFtorInOut<ImgSigT, HxInOutHistogram<typename ImgSigT::ArithType> > f;
};
HxAlwaysInstantiateHistogram::HxAlwaysInstantiateHistogram()
{
}
namespace HxImageToHistogram_c {
static HxInstantiatorHistogram<HxImageSig2dByte> f001;
static HxInstantiatorHistogram<HxImageSig2dShort> f002;
static HxInstantiatorHistogram<HxImageSig2dInt> f003;
static HxInstantiatorHistogram<HxImageSig2dFloat> f004;
static HxInstantiatorHistogram<HxImageSig2dDouble> f005;
static HxInstantiatorHistogram<HxImageSig2dVec2Byte> f006;
static HxInstantiatorHistogram<HxImageSig2dVec2Short> f007;
static HxInstantiatorHistogram<HxImageSig2dVec2Int> f008;
static HxInstantiatorHistogram<HxImageSig2dVec2Float> f009;
static HxInstantiatorHistogram<HxImageSig2dVec2Double> f010;
static HxInstantiatorHistogram<HxImageSig2dVec3Byte> f011;
static HxInstantiatorHistogram<HxImageSig2dVec3Short> f012;
static HxInstantiatorHistogram<HxImageSig2dVec3Int> f013;
static HxInstantiatorHistogram<HxImageSig2dVec3Float> f014;
static HxInstantiatorHistogram<HxImageSig2dVec3Double> f015;
static HxInstantiatorHistogram<HxImageSig3dByte> f016;
static HxInstantiatorHistogram<HxImageSig3dShort> f017;
static HxInstantiatorHistogram<HxImageSig3dInt> f018;
static HxInstantiatorHistogram<HxImageSig3dFloat> f019;
static HxInstantiatorHistogram<HxImageSig3dDouble> f020;
};
HxHistogram
HxImageToHistogram(HxImageRep im, int getDim, double lowBin,
double highBin, int nBin)
{
int nDim = (getDim <= 0) ? im.pixelDimensionality() : 1;
HxHistogram hist = HxHistogram(REAL_VALUE, nDim, lowBin, highBin, nBin,
lowBin, highBin, nBin,
lowBin, highBin, nBin);
HxTagList tags;
HxAddTag(tags, "histogram", &hist);
HxAddTag(tags, "getDim", getDim);
im.exportOp("histogram", tags);
return hist;
}