-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathIntensityCompounding.cpp
More file actions
74 lines (49 loc) · 2.08 KB
/
IntensityCompounding.cpp
File metadata and controls
74 lines (49 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
#include "IntensityCompounding.h"
#include <stdio.h>
#include <iostream>
GaussianWeightedCompounding::GaussianWeightedCompounding(float sigma)
{
m_sigma = sigma;
m_sigmaSQR = pow(sigma, 2.0f);
}
float GaussianWeightedCompounding::evaluate(std::vector<float> *intensityVector, std::vector<float> *distanceVector)
{
int _size = intensityVector->size();
float _intensityDenominator = 0.0f;
float _intensityNominator = 0.0;
std::vector<float>::iterator _distance = distanceVector->begin();
for(std::vector<float>::iterator _intensity = intensityVector->begin(); _intensity !=intensityVector->end();_intensity++, _distance++ )
{
float _euclideanDistanceSQR = pow((*_distance),2.0f);
const float _tempRatio = exp(-(_euclideanDistanceSQR)/(m_sigmaSQR));
// add the intensity contribution by weighting distance to the nominator and denominator
// which after considering all relevant pixels will by division supply the gaussian interpolated intensity
_intensityDenominator += _tempRatio;
_intensityNominator += (*_intensity) * _tempRatio;
}
if ( _intensityDenominator > 0.0 )
return _intensityNominator / _intensityDenominator;
else
return 0.0;
}
MeanCompounding::MeanCompounding()
{
std::cout << "Mean Compounding ... " << std::endl;
}
float MeanCompounding::evaluate(std::vector<float> *intensityVector, std::vector<float> *distanceVector)
{
int _size = intensityVector->size();
float _intensityDenominator = 0.0f;
float _intensityNominator = 0.0;
std::vector<float>::iterator _distance = distanceVector->begin();
for(std::vector<float>::iterator _intensity = intensityVector->begin(); _intensity !=intensityVector->end();_intensity++, _distance++ )
{
// add the intensity contribution by weighting distance to the nominator and denominator
// which after considering all relevant pixels will by division supply the gaussian interpolated intensity
_intensityNominator += (*_intensity);
}
if ( _size > 0 )
return _intensityNominator / static_cast<float>(_size);
else
return 0.0;
}