spacing设为1
#include "itkResampleImageFilter.h"
#include "itkAffineTransform.h"
#include "itkNearestNeighborInterpolateImageFunction.h"
ImageType::Pointer
spacingToStandard(ImageType::Pointer image)
{
typedef itk::ResampleImageFilter<ImageType,ImageType> FliterType;
FliterType::Pointer fliter = FliterType::New();
fliter->SetInput(image);
typedef itk::AffineTransform<double,2> TransformType;
TransformType::Pointer transform = TransformType::New();
transform->SetIdentity();
fliter->SetTransform(transform);
typedef itk::NearestNeighborInterpolateImageFunction<ImageType,double> InterpolatorType;
InterpolatorType::Pointer interpolator = InterpolatorType::New();
fliter->SetInterpolator(interpolator);
fliter->SetDefaultPixelValue(0);
double spacing[2];
spacing[0] = 1.0;
spacing[1] = 1.0;
fliter->SetOutputSpacing(spacing);
fliter->SetOutputDirection(image->GetDirection());
fliter->SetOutputOrigin(image->GetOrigin());
fliter->SetSize(image->GetLargestPossibleRegion().GetSize());
fliter->Update();
return fliter->GetOutput();
}
--------------------------------------------------------------------------------
void ReSpacing(ImageType::Pointer input,ImageType::Pointer* dst)
{
ImageType2D::RegionType inputRegion = input->GetLargestPossibleRegion();
ImageType2D::SizeType size = inputRegion.GetSize();
ImageType2D::IndexType start = inputRegion.GetIndex();
itk::ImageRegion<2> region(start, size);
ImageType2D::Pointer image_back = ImageType2D::New();
image_back->SetRegions(region);
image_back->Allocate();
image_back->FillBuffer(0);
for (int i=0;i< size[0];i++)
{
for (int j=0;j< size[1];j++)
{
ImageType::IndexType tmp_point;
tmp_point[0] = i;
tmp_point[1] = j;
char gray_value = input->GetPixel(tmp_point);
if (gray_value!=0)
{
itk::Index<2> path;
path[0] = tmp_point[0];
path[1] = tmp_point[1];
image_back->SetPixel(path, gray_value);
}
}
}
*dst = image_back;