本文整理汇总了C++中Histogram1D::getBucket方法的典型用法代码示例。如果您正苦于以下问题:C++ Histogram1D::getBucket方法的具体用法?C++ Histogram1D::getBucket怎么用?C++ Histogram1D::getBucket使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Histogram1D
的用法示例。
在下文中一共展示了Histogram1D::getBucket方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: computeInformation
void VolumeInformation::computeInformation() {
if (!volume_.hasData()) {
numVoxels_.set(0);
numSignificant_.set(0);
minValue_.set(0.f);
maxValue_.set(0.f);
meanValue_.set(0.f);
standardDeviation_.set(0.f);
entropy_.set(0.f);
return;
}
const VolumeRAM* volume = volume_.getData()->getRepresentation<VolumeRAM>();
tgtAssert(volume, "No input volume");
size_t numVoxels = volume->getNumVoxels();
tgt::vec2 intensityRange = volume->elementRange();
numVoxels_.setMaxValue(static_cast<int>(numVoxels));
numVoxels_.set(static_cast<int>(numVoxels));
numSignificant_.setMaxValue(static_cast<int>(numVoxels));
numSignificant_.set(static_cast<int>(VolumeOperatorNumSignificant::APPLY_OP(volume_.getData())));
// compute the entropy of the volume
// E(H) = -\sum_{i=0}^{K-1}{H_p(i) \log_2(H_p(i)}
// with H_p(i): normalized histrogram with intensity value i
int histMax = tgt::iround(intensityRange.y);
// handle float data as if it was 16 bit to prevent overflow
histMax = tgt::clamp(histMax, 0, 1<<16);//TODO
Histogram1D histogram = createHistogram1DFromVolume(volume_.getData(), histMax);
double entropy = 0.0;
for (size_t i = 0; i < static_cast<size_t>(histMax); ++i) {
uint64_t value = histogram.getBucket(static_cast<int>(i));
if (value == 0)
continue;
double hi = static_cast<double>(value) / static_cast<double>(numVoxels);
double loghi = log(hi);
entropy += hi * loghi;
}
entropy *= -1;
entropy_.setMaxValue(intensityRange.y);
entropy_.set(static_cast<float>(entropy));
// min value
minValue_.setMinValue(intensityRange.x);
minValue_.setMaxValue(intensityRange.y);
//minValue_.set(static_cast<float>(histogram.getSignificantRange().x));
float min = volume_.getData()->getDerivedData<VolumeMinMax>()->getMinNormalized();
minValue_.set(min);
//max value
maxValue_.setMinValue(intensityRange.x);
maxValue_.setMaxValue(intensityRange.y);
//maxValue_.set(static_cast<float>(histogram.getSignificantRange().y));
float max = volume_.getData()->getDerivedData<VolumeMinMax>()->getMaxNormalized();
maxValue_.set(max);
// mean value
double mean = 0.0;
for (size_t i = 0; i < numVoxels; ++i) {
float value = volume->getVoxelNormalized(i);
mean += value;
}
mean /= numVoxels;
meanValue_.setMinValue(intensityRange.x);
meanValue_.setMaxValue(intensityRange.y);
meanValue_.set(static_cast<float>(mean));
// variance
double variance = 0.0;
for (size_t i = 0; i < numVoxels; ++i) {
float value = volume->getVoxelNormalized(i);
variance += pow(static_cast<double>(value) - mean, 2.0);
}
variance /= numVoxels;
standardDeviation_.setMaxValue(intensityRange.y);
standardDeviation_.set(static_cast<float>(sqrt(variance)));
}