typename PatchExtractor<PValue>::MaskType::Pointer PatchExtractor<PValue>::ExtractMask() { ContIndexType startIndex; for(unsigned int i = 0; i < 2; i++) { startIndex[i] = m_Center[i] - (m_Size[i] / 2.0); } startIndex[2] = 0; typename ImageType::IndexType properIndex; for(unsigned int i = 0; i < 3; i++) { properIndex[i] = round(startIndex[i]); } for(unsigned int i = 0; i < 2; i++) { if(properIndex[i] < 0) properIndex[i] = 0; if((m_Size[i] + properIndex[i]) > (m_Image->GetLargestPossibleRegion().GetSize()[i]-1)) { m_Size[i] = m_Image->GetLargestPossibleRegion().GetSize()[i]-1-properIndex[i]; } } MaskType::RegionType region; region.SetIndex(properIndex); m_Size[2] = 1; region.SetSize(m_Size); MaskType::Pointer mask = MaskType::New(); mask->SetDirection(m_Image->GetDirection()); mask->SetSpacing(m_Image->GetSpacing()); mask->SetOrigin(m_Image->GetOrigin()); mask->SetRegions(m_Image->GetLargestPossibleRegion()); mask->Allocate(); mask->FillBuffer(0); itk::ImageRegionIterator<MaskType> imageIt(mask, region); while(!imageIt.IsAtEnd()) { imageIt.Set(m_MaskValue); ++imageIt; } return mask; }