ITK直方图无法正确设置下限值

问题描述 投票:0回答:1

我有一个类型为

using ITKImage = itk::Image<short, 3>;
的 ITK 图像,我知道它里面只有一定数量的值,即只有值
0,1,..., n
。为了便于论证,我们假设 n=2,因此图像值只有 0、1 或 2。我想计算每个值(除 0 之外)出现在图像中的次数,我尝试使用直方图过滤器。我执行以下操作:

//////////////////////////////////
// Code to produce variable image of type ITKImage...
//////////////////////////////////
using HistogramFilterType = itk::Statistics::ImageToHistogramFilter<ITKImage>;
auto histogramFilter = HistogramFilterType::New();
using SizeType = HistogramFilterType::HistogramSizeType;
SizeType size(1);
size[0] = 2;

HistogramFilterType::HistogramMeasurementVectorType lowerBound(1);
lowerBound[0] = 1;
HistogramFilterType::HistogramMeasurementVectorType upperBound(1);
upperBound[0] = 2;

histogramFilter->SetHistogramBinMinimum(lowerBound);
histogramFilter->SetHistogramBinMaximum(upperBound);

histogramFilter->SetHistogramSize(size);
histogramFilter->SetInput(objectFilter->GetOutput());
histogramFilter->Update();
const unsigned int histogramSize = histogramFilter->GetOutput()->Size();
for (unsigned int bin = 0; bin < histogramSize; ++bin) {
    std::cout << histogramFilter->GetOutput()->GetFrequency(bin) << "\n";
}

不幸的是,这会产生奇怪的结果。值

GetFrequency(1)
正确返回
2
在图像中出现的次数,但
GetFrequency(0)
返回
1
0
在图像中出现的次数,这不是我想要的。我配置过滤器哪里出了问题?

c++ histogram itk
1个回答
0
投票

您可能想更改

ClipBinsAtEnds
默认值,请参阅 itk::Histogram 文档。可能像
histogramFilter->GetOutput()-> SetClipBinsAtEnds(true); // or maybe false?

© www.soinside.com 2019 - 2024. All rights reserved.