ITK对图像进行归一化预处理

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值