itk中做mask的方法如下:
using MaskFilterType = itk::MaskImageFilter< InputImageType, MaskImageType, OutputImageType >;
MaskFilterType::Pointer maskFilter = MaskFilterType::New();
maskFilter->SetInput(reader->GetOutput());
maskFilter->SetMaskImage(mask);
maskFilter->update();
对于3D图像切片再还原,有两种思路:
- 用
SliceBySliceImageFilter
- 先用
ExtractImageFilter
切片,然后做Mask,再用JoinImageFilter
合并
第一种方法可以参考:itk :: SliceBySliceImageFilter
我在用这个filter的时候,出来的结果一直不对。估计是没有处理好多输入的问题。
第二种方法成功:
for (int i = 0; i < size; i++)
{
...
using MaskFilterType = itk::MaskImageFilter< ImageTypeSlice, ImageTypeSlice, ImageTypeSlice >;
MaskFilterType::Pointer maskFilter = MaskFilterType::New();
maskFilter->SetInput(imageSlice);
maskFilter->SetMaskImage(maskSlice);
maskFilter->Update();
joinFilter->SetInput(i, maskFilter->GetOutput());
joinFilter->Update();
}
// 最后set一下spacing 和 origin
joinFilter->SetSpacing(0.625);
joinFilter->Update();