z-score
三种方案:
1.可遍历图像统计均值与方差。
2.使用StatisticsImageFilter统计均值方差。
3.直接使用NormalizeImageFilter进行归一化。
以下给出2、 3两种方案代码
// 使用StatisticsImageFilter统计均值方差。
using StatisticsFilterType = itk::StatisticsImageFilter<ImageType>;
StatisticsFilterType::Pointer statisticsFilter = StatisticsFilterType::New();
statisticsFilter->SetInput(processedImage);
statisticsFilter->Update();
double mean = statisticsFilter->GetMean();
double standardDeviation = statisticsFilter->GetSigma();
using ShiftScaleFilterType = itk::ShiftScaleImageFilter<ImageType, OutputImageType>;
ShiftScaleFilterType::Pointer shiftScaleFilter = ShiftScaleFilterType::New();
shiftScaleFilter->SetInput(processedImage);
shiftScaleFilter->SetShift(-mean);
shiftScaleFilter->SetScale(1.0 / standardDeviation);
shiftScaleFilter->Update();
img->Graft(shiftScaleFilter->GetOutput());
// 3
using NormalizeFilterType = itk::NormalizeImageFilter<ImageType, OutputImageType>;
NormalizeFilterType::Pointer normalizeFilter = NormalizeFilterType::New();
normalizeFilter->SetInput(processedImage);
normalizeFilter->Update();
img->Graft(normalizeFilter->GetOutput());
对非0区域进行z-score
手动遍历图像非0区域得到均值方差后赋值
typedef itk::ImageRegionIterator<ImageType> IteratorType;
int count = 0;
double sum = 0.0;
double sumSquaredDiff = 0.0;
IteratorType it(processedImage, processedImage->GetLargestPossibleRegion());
for (it.GoToBegin(); !it.IsAtEnd(); ++it)
{
const PixelType pixelValue = it.Get();
if (pixelValue != 0)
{
sum += pixelValue;
++count;
}
}
double mean = sum / count;
for (it.GoToBegin(); !it.IsAtEnd(); ++it)
{
const PixelType pixelValue = it.Get();
if (pixelValue != 0)
{
double diff = pixelValue - mean;
sumSquaredDiff += diff * diff;
}
}
double stdDev = std::sqrt(sumSquaredDiff / count);
DeepCopy<ImageType, OutputImageType>(processedImage, img);
typedef itk::ImageRegionIterator<OutputImageType> OutputIteratorType;
OutputIteratorType imgIt(img, img->GetLargestPossibleRegion());
for (it.GoToBegin(); !it.IsAtEnd(); ++it)
{
const PixelType pixelValue = it.Get();
if (pixelValue != 0)
{
imgIt.Set((pixelValue - mean) / stdDev);
}
++imgIt;
}