+ ImageConstPointer bones_ant;
+ ImageConstPointer bones_post;
+
+ // Find ant-post coordinate of trachea (assume the carena position is a
+ // good estimation of the ant-post position of the trachea)
+ ImagePointType carina;
+ LoadAFDB();
+ GetAFDB()->GetPoint3D("Carina", carina);
+ DD(carina);
+ ImageIndexType index_trachea;
+ bones->TransformPhysicalPointToIndex(carina, index_trachea);
+ DD(index_trachea);
+
+ // Split bone image first into two parts (ant and post)
+ typedef itk::RegionOfInterestImageFilter<ImageType, ImageType> ROIFilterType;
+ // typedef itk::ExtractImageFilter<ImageType, ImageType> ROIFilterType;
+ typename ROIFilterType::Pointer roiFilter = ROIFilterType::New();
+ ImageRegionType region = bones->GetLargestPossibleRegion();
+ ImageSizeType size = region.GetSize();
+ DD(size);
+ size[1] = index_trachea[1]; //size[1]/2.0;
+ DD(size);
+ region.SetSize(size);
+ roiFilter->SetInput(bones);
+ // roiFilter->SetExtractionRegion(region);
+ roiFilter->SetRegionOfInterest(region);
+ roiFilter->ReleaseDataFlagOff();
+ roiFilter->Update();
+ bones_ant = roiFilter->GetOutput();
+ writeImage<ImageType>(bones_ant, "b_ant.mhd");
+
+ // roiFilter->ResetPipeline();// = ROIFilterType::New();
+ roiFilter = ROIFilterType::New();
+ ImageIndexType index = region.GetIndex();
+ index[1] = bones->GetLargestPossibleRegion().GetIndex()[1] + size[1]-1;
+ size[1] = bones->GetLargestPossibleRegion().GetSize()[1] - size[1];
+ DD(size);
+ region.SetIndex(index);
+ region.SetSize(size);
+ roiFilter->SetInput(bones);
+ // roiFilter->SetExtractionRegion(region);
+ roiFilter->SetRegionOfInterest(region);
+ roiFilter->ReleaseDataFlagOff();
+ roiFilter->Update();
+ bones_post = roiFilter->GetOutput();
+ writeImage<ImageType>(bones_post, "b_post.mhd");
+
+ // Go !