Newer
Older
/* histogram.h
Mark Woolrich, FMRIB Image Analysis Group
Copyright (C) 1999-2000 University of Oxford */
/* CCOPYRIGHT */
#if !defined(__histogram_h)
#define __histogram_h
#include <iostream>
#include <fstream>
#include "newmatap.h"
#include "newmatio.h"
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "miscmaths.h"
using namespace NEWMAT;
namespace MISCMATHS {
class Histogram
{
public:
Histogram(const ColumnVector& psourceData, int numBins)
: sourceData(psourceData), calcRange(true), bins(numBins){}
Histogram(const ColumnVector& psourceData, float phistMin, float phistMax, int numBins)
: sourceData(psourceData), calcRange(false), histMin(phistMin), histMax(phistMax), bins(numBins){}
void generate();
float getHistMin() const {return histMin;}
float getHistMax() const {return histMax;}
void setHistMax(float phistMax) {histMax = phistMax;}
void setHistMin(float phistMin) {histMin = phistMin;}
int integrateAll() {return sourceData.Nrows();}
const ColumnVector& getData() {return histogram;}
int integrateToInf(float value) const { return integrate(value, histMax); }
int integrateFromInf(float value) const { return integrate(histMin, value); }
int integrate(float value1, float value2) const;
float mode() const;
int getBin(float value) const;
float getValue(int bin) const;
protected:
private:
Histogram();
const Histogram& operator=(Histogram&);
Histogram(Histogram&);
const ColumnVector& sourceData;
ColumnVector histogram;
bool calcRange;
float histMin;
float histMax;
int bins; // number of bins in histogram
};
inline int Histogram::getBin(float value) const
{
return Max(1, Min((int)((((float)bins)*((float)(value-histMin)))/((float)(histMax-histMin))),bins));
}
inline float Histogram::getValue(int bin) const
{
return (bin*(histMax-histMin))/(float)bins + histMin;
}
}
#endif