X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=common%2FclitkImageToImageGenericFilter.txx;h=a13dca9f9d25eea604c2da79fc66306cc1e878d1;hb=f05cc2cf37d7ec960b73fa9d2393d5a888e1f87a;hp=6343c8b600863bd578fa408d8eb55fc68224240b;hpb=8186ce7844751ffa0bd43e8a6ed53d1cc050b843;p=clitk.git diff --git a/common/clitkImageToImageGenericFilter.txx b/common/clitkImageToImageGenericFilter.txx index 6343c8b..a13dca9 100644 --- a/common/clitkImageToImageGenericFilter.txx +++ b/common/clitkImageToImageGenericFilter.txx @@ -1,85 +1,93 @@ /*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Program: vv - Module: $RCSfile: clitkImageToImageGenericFilter.txx,v $ - Language: C++ - Date: $Date: 2010/01/29 08:48:42 $ - Version: $Revision: 1.1 $ - Author : Joel Schaerer - David Sarrut + 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 - Copyright (C) 2008 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr - CREATIS-LRMN 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. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 3 of the License. + It is distributed under dual licence - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ +template +clitk::ImageToImageGenericFilter::ImageToImageGenericFilter(std::string filterName) : + ImageToImageGenericFilterBase(filterName), + mImageTypesManager(static_cast(this)) +{ +} +//-------------------------------------------------------------------- - =========================================================================*/ //-------------------------------------------------------------------- -template -void clitk::ImageToImageGenericFilterBase::SetNextOutput(typename ImageType::Pointer output) { - if (mOutputFilenames.size()) - { - clitk::writeImage(output, mOutputFilenames.front(), mIOVerbose); - mOutputFilenames.pop_front(); - } - if (mInputVVImages.size()) //We assume that if a vv image is set as input, we want one as the output - mOutputVVImages.push_back(vvImageFromITK(output)); +template +bool clitk::ImageToImageGenericFilter::Update() +{ + GetInputImageDimensionAndPixelType(m_Dim,m_PixelTypeName,m_NbOfComponents); + + // Check ImageType + if (!CheckImageType()) { + if (m_FailOnImageTypeError) ImageTypeError(); + else SetImageTypeError(); + return false; + } + + // Go ! Call the right templatized function + mImageTypesManager.DoIt(m_Dim, m_NbOfComponents, m_PixelTypeName); + return true; } //-------------------------------------------------------------------- - //-------------------------------------------------------------------- -template -typename ImageType::Pointer clitk::ImageToImageGenericFilterBase::GetInput(unsigned int n) { - if (mInputFilenames.size() > n) { - return clitk::readImage(mInputFilenames[n], mIOVerbose); - } - else if (mInputVVImages.size() > n) - return typename ImageType::Pointer(const_cast(vvImageToITK(mInputVVImages[n]).GetPointer())); - else - assert(false); //No input, this shouldn't happen +template +bool clitk::ImageToImageGenericFilter::CheckImageType(unsigned int dim, unsigned int ncomp, std::string pixeltype) +{ + //SR: commented line creates an element in mMapOfImageTypeToFunction which, even if 0, is confusing, e.g. for GetAvailableImageTypes + //return static_cast(mImageTypesManager.mMapOfImageTypeToFunction[dim][ncomp][pixeltype]); + typename ImageTypesManager::MapOfImageDimensionToFunctionType &m = mImageTypesManager.mMapOfImageTypeToFunction; + return (m .find(dim) != m.end() && + m[dim] .find(ncomp) != m[dim].end() && + m[dim][ncomp].find(pixeltype) != m[dim][ncomp].end()); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template -clitk::ImageToImageGenericFilter::ImageToImageGenericFilter(std::string filterName) - :ImageToImageGenericFilterBase(filterName){ - // Create main function manager - this->mImageTypesManager = new - ImageTypesManager(static_cast(this)); +bool clitk::ImageToImageGenericFilter::CheckImageType() +{ + return CheckImageType(m_Dim, m_NbOfComponents, m_PixelTypeName); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- template -bool clitk::ImageToImageGenericFilter::Update() { - GetInputImageDimensionAndPixelType(mDim,mPixelTypeName,mNbOfComponents); - - // Check ImageType - if (!CheckImageType()) { - if (mFailOnImageTypeError) ImageTypeError(); - else SetImageTypeError(); - return false; - } +std::string clitk::ImageToImageGenericFilter::GetAvailableImageTypes() +{ + std::ostringstream oss; + oss << "The filter <" << m_FilterName << "> manages:" << std::endl; - // Go ! Call the right templatized function - mImageTypesManager->DoIt(mDim, mPixelTypeName); - return true; + typedef typename ImageTypesManager::MapOfImageComponentsToFunctionType::const_iterator MCompItType; + typedef typename ImageTypesManager::MapOfImageDimensionToFunctionType::const_iterator MDimItType; + typedef typename ImageTypesManager::MapOfPixelTypeToFunctionType::const_iterator MPixelItType; + for (MDimItType i=mImageTypesManager.mMapOfImageTypeToFunction.begin(); + i!=mImageTypesManager.mMapOfImageTypeToFunction.end(); + i++) { + for (MCompItType j=(*i).second.begin(); j!= (*i).second.end(); j++) { + for (MPixelItType k=(*j).second.begin(); k!= (*j).second.end(); k++) { + oss << "Dim: " << (*i).first; + if ((*j).first != 1) oss << ", Components: " << (*j).first; + oss << ", Type: " << (*k).first << std::endl; + } + } + } + return oss.str(); } //--------------------------------------------------------------------