Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.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
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
- ======================================================================-====*/
+ ===========================================================================**/
//--------------------------------------------------------------------
template<class ImageType>
p.Fill(1);
SetRadius(p);
SetBoundaryToForegroundFlag(false);
+ VerboseFlagOff();
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
+//--------------------------------------------------------------------
+template<class ImageType>
+void clitk::MorphoMathFilter<ImageType>::
+SetRadius(int r)
+{
+ for(uint i=0; i<ImageType::ImageDimension; i++)
+ m_Radius[i] = r;
+ SetRadius(m_Radius);
+}
+//--------------------------------------------------------------------
+
+
//--------------------------------------------------------------------
template<class ImageType>
void clitk::MorphoMathFilter<ImageType>::
SetOperationType(int type)
{
- switch (type) {
- case 0: m_OperationType = Erode; return;
- case 1: m_OperationType = Dilate; return;
- case 2: m_OperationType = Open; return;
- case 3: m_OperationType = Close; return;
- case 4: m_OperationType = CondErode; return;
- case 5: m_OperationType = CondDilate; return;
- default: clitkExceptionMacro("Operation type must be between 0-5 (0=Erode, 1=Dilate, 2=Close (erode(dilate(x))), 3=Open (dilate(erode(x))), 4=CondErode, 5=CondDilate)");
- }
+ if(type<0 || type>5)
+ clitkExceptionMacro("Operation type must be between 0-5 (0=Erode, 1=Dilate, 2=Close (erode(dilate(x))), 3=Open (dilate(erode(x))), 4=CondErode, 5=CondDilate)");
+ m_OperationType = OperationTypeEnumeration(type);
}
//--------------------------------------------------------------------
// Define the images
//---------------------------------
ImagePointer m_input = dynamic_cast<ImageType*>(itk::ProcessObject::GetInput(0));
+ const unsigned int dim = ImageType::ImageDimension;
//---------------------------------
// Cast into internalimagetype
// Compute the radius in pixel
//---------------------------------
if (m_RadiusInMMIsSet) {
- for(uint i=0; i<ImageType::ImageDimension; i++) {
+ for(uint i=0; i<dim; i++) {
m_Radius[i] = (uint)lrint(m_RadiusInMM[i]/input->GetSpacing()[i]);
}
}
padFilter->SetInput(input);
typename ImageType::SizeType lower;
typename ImageType::SizeType upper;
- for(uint i=0; i<3; i++) {
+ for(uint i=0; i<dim; i++) {
lower[i] = upper[i] = 2*(m_Radius[i]+1);
}
padFilter->SetPadLowerBound(lower);
typename OutputCastImageFilterType::Pointer oCaster = OutputCastImageFilterType::New();
oCaster->SetInput(filter->GetOutput());
oCaster->Update();
+
this->SetNthOutput(0, oCaster->GetOutput());
+ //this->GraftOutput(oCaster->GetOutput()); // NO
}
//--------------------------------------------------------------------