原图像在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
修改总结