+ ImageConstPointer bones_ant;
+ ImageConstPointer bones_post;
+
+ // Find ant-post coordinate of trachea (assume the first point is a
+ // good estimation of the ant-post position of the trachea)
+ typedef clitk::ExtractAirwayTreeInfoFilter<ImageType> AirwayFilter;
+ typename AirwayFilter::Pointer airwayfilter = AirwayFilter::New();
+ airwayfilter->SetInput(trachea);
+ airwayfilter->Update();
+ DD(airwayfilter->GetFirstTracheaPoint());
+ ImagePointType point_trachea = airwayfilter->GetFirstTracheaPoint();
+ ImageIndexType index_trachea;
+ bones->TransformPhysicalPointToIndex(point_trachea, index_trachea);
+ DD(index_trachea);
+
+ // Split bone image first into two parts (ant and post)
+ typedef itk::RegionOfInterestImageFilter<ImageType, ImageType> CropFilterType;
+ // typedef itk::ExtractImageFilter<ImageType, ImageType> CropFilterType;
+ typename CropFilterType::Pointer cropFilter = CropFilterType::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);
+ cropFilter->SetInput(bones);
+ // cropFilter->SetExtractionRegion(region);
+ cropFilter->SetRegionOfInterest(region);
+ cropFilter->ReleaseDataFlagOff();
+ cropFilter->Update();
+ bones_ant = cropFilter->GetOutput();
+ writeImage<ImageType>(bones_ant, "b_ant.mhd");
+
+ // cropFilter->ResetPipeline();// = CropFilterType::New();
+ cropFilter = CropFilterType::New();
+ ImageIndexType index = region.GetIndex();
+ size[1] = bones->GetLargestPossibleRegion().GetSize()[1] - size[1];
+ index[1] = bones->GetLargestPossibleRegion().GetIndex()[1] + size[1]-1;
+ DD(size);
+ region.SetIndex(index);
+ region.SetSize(size);
+ cropFilter->SetInput(bones);
+ // cropFilter->SetExtractionRegion(region);
+ cropFilter->SetRegionOfInterest(region);
+ cropFilter->ReleaseDataFlagOff();
+ cropFilter->Update();
+ bones_post = cropFilter->GetOutput();
+ writeImage<ImageType>(bones_post, "b_post.mhd");
+
+ // Go !