我有一个类型为
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
在图像中出现的次数,这不是我想要的。我配置过滤器哪里出了问题?
您可能想更改
ClipBinsAtEnds
默认值,请参阅 itk::Histogram 文档。可能像histogramFilter->GetOutput()-> SetClipBinsAtEnds(true); // or maybe false?