/*========================================================================= Program: vv http://www.creatis.insa-lyon.fr/rio/vv Authors belong to: - University of LYON http://www.universite-lyon.fr/ - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the copyright notices for more information. It is distributed under dual licence - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ===========================================================================**/ // clitk #include "clitkCommon.h" // itk #include //-------------------------------------------------------------------- template clitk::ExtractSliceFilter:: ExtractSliceFilter(): clitk::FilterBase(), Superclass() { this->SetNumberOfRequiredInputs(1); SetDirection(2); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template void clitk::ExtractSliceFilter:: SetInput(const ImageType * image) { // Process object is not const-correct so the const casting is required. this->SetNthInput(0, const_cast(image)); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template void clitk::ExtractSliceFilter:: GetOutputSlices(std::vector & o) { o.clear(); for(unsigned int i=0; iGetNumberOfOutputs(); i++) { o.push_back(this->GetOutput(i)); } } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template void clitk::ExtractSliceFilter:: GenerateOutputInformation() { ImagePointer input = dynamic_cast(itk::ProcessObject::GetInput(0)); // Create region to extract m_region = input->GetLargestPossibleRegion(); m_size = m_region.GetSize(); m_index = m_region.GetIndex(); m_NumberOfSlices = m_region.GetSize()[GetDirection()]; } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template void clitk::ExtractSliceFilter:: GenerateInputRequestedRegion() { // Call default Superclass::GenerateInputRequestedRegion(); // Get input pointers and set requested region to common region ImagePointer input = dynamic_cast(itk::ProcessObject::GetInput(0)); input->SetRequestedRegion(input->GetLargestPossibleRegion()); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template void clitk::ExtractSliceFilter:: GenerateData() { //-------------------------------------------------------------------- // Get input pointer input = dynamic_cast(itk::ProcessObject::GetInput(0)); //-------------------------------------------------------------------- // Create region to extract in 3D (and 2D = not used) m_size[GetDirection()] = 0; m_region.SetSize(m_size); int start = m_index[GetDirection()]; #if ITK_VERSION_MAJOR >= 4 this->SetNumberOfIndexedInputs(m_NumberOfSlices); #else this->SetNumberOfOutputs(m_NumberOfSlices); #endif //-------------------------------------------------------------------- // loop ExtractImageFilter with region updated, push_back typedef itk::ExtractImageFilter ExtractImageFilterType; typename ExtractImageFilterType::Pointer extract = ExtractImageFilterType::New(); extract->SetInput(input); for(int i=0; iSetInput(input); m_index[GetDirection()] = start + i; m_region.SetIndex(m_index); extract->SetExtractionRegion(m_region); #if ITK_VERSION_MAJOR == 4 extract->SetDirectionCollapseToSubmatrix(); #endif extract->Update(); this->SetNthOutput(i, extract->GetOutput()); } return; } //--------------------------------------------------------------------