ITK 原图种子点经过roi、降采样后index的变化

原图像在vtk上交互时物理坐标和index的关系梳理:

1、vtk交互:在vtk切片上得到的world point,用Image->TransformPhysicalPointToIndex(worldpoint)函数就可以得到在真实图像上的index;

2、ITk图像的同一位置的 index 在提取 ROI 区域并 降采样 后变成什么?怎么算?

下面的函数是我提取的ROI区域,然后对ROI区域进行降采样处理的代码:

#include "itkRegionOfInterestImageFilter.h"
#include "itkResampleImageFilter.h"

template <typename ImageType>
void getROIandReshampe(ImageType* inputImage,ImageType* outputImage)
{
    auto size = inputImage->GetLargestPossibleRegion().GetSize();

    typedef itk::RegionOfInterestImageFilter<ImageType,ImageType> FilterType;
    FilterType::Pointer roi = FilterType::New();

   ImageType::IndexType start;
    start[0] = 50;
    start[1] = 50;
    start[2] = 10;
   ImageType::SizeType roiSize;
    roiSize[0] = 200;
    roiSize[1] = 240;
    roiSize[2] = 90;

   ImageType::RegionType desiredRegion;
    desiredRegion.SetSize(roiSize);
    desiredRegion.SetIndex(start);

    roi->SetRegionOfInterest(desiredRegion);
    roi->SetInput(inputImage);
    roi->Update();
 
    auto spacing = inputImage->GetSpacing();

    int a = 5;
    spacing[0] = a;
    spacing[1] = a;
    spacing[2] = a;
    typedef itk::ResampleImageFilter<ImageType,ImageType> ResampleImageFilterType;
    ResampleImageFilterType::Pointer resampleFilter = ResampleImageFilterType::New();
    resampleFilter->SetInput(inputImage);

    typedef itk::NearestNeighborInterpolateImageFunction<ImageType, double> InterpolatorType;
    InterpolatorType::Pointer interpolator = InterpolatorType::New();
    resampleFilter->SetInterpolator(interpolator);
    resampleFilter->SetDefaultPixelValue(0);
    resampleFilter->SetOutputSpacing(spacing);
    resampleFilter->SetSize(inputImage->GetLargestPossibleRegion().GetSize());
    resampleFilter->SetOutputOrigin(inputImage->GetOrigin());
    resampleFilter->SetOutputDirection(inputImage->GetDirection());
    resampleFilter->Update();
  
    outputImage = resampleFilter->GetOutput();

}


重点:

itk的 ROI 函数得到的图像的size与原图的size一样大,因此ROI后同一个位置的index不会变化;

例如: 在原图中一种子点的index为:p : [px,py,pz]

ROI后该点包含在ROI区域中:假设ROI的起点的index为ROIstart,区域大小为ROISize

                                                  种子点的index仍为:[px,py,pz]

降采样后:得到的图像的整个物理空间大小没有发生变化,改变spacing后,同一个像素点位置处的物理位置(世界坐标)与原图一致,但是index不一致,因为新的spacing变大后,像素与像素间的位置变大,
p是原图的index;
spacing、origin是原图的参数;
space是降采样的参数;

那么种子点的index变为:
shampleIndex[0] = ((px - start[0]) * spacing[0] + origin[0]) / space[0];

shampleIndex[1] = ((py - start[1]) * spacing[1] + origin[1]) / space[1];

shampleIndex[2] = ((pz - start[2]) * spacing[2] + origin[2]) / space[2];

至此得到原图的种子点index在降采样后的图像里 的index

 

 

修改总结

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值