X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=itk%2FclitkAddRelativePositionConstraintToLabelImageFilter.txx;h=e25f98b829fa3c65ed497f5fb5ffd73de863a066;hb=c44f6f7ea754689035de9e8f781f71a8d933b44e;hp=f56c4f44bedf4c303fe11f74dfdf808b77e1acc3;hpb=9e5e119f00eb9051aa56e480aba3e86d053cdb80;p=clitk.git diff --git a/itk/clitkAddRelativePositionConstraintToLabelImageFilter.txx b/itk/clitkAddRelativePositionConstraintToLabelImageFilter.txx index f56c4f4..e25f98b 100644 --- a/itk/clitkAddRelativePositionConstraintToLabelImageFilter.txx +++ b/itk/clitkAddRelativePositionConstraintToLabelImageFilter.txx @@ -3,7 +3,7 @@ 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 @@ -14,7 +14,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html - ======================================================================-====*/ + ===========================================================================**/ // clitk #include "clitkCommon.h" @@ -22,6 +22,7 @@ #include "clitkAutoCropFilter.h" #include "clitkResampleImageWithOptionsFilter.h" #include "clitkBooleanOperatorLabelImageFilter.h" +#include "clitkCropLikeImageFilter.h" // itk #include @@ -32,7 +33,11 @@ #include #include #include -#include +#if ITK_VERSION_MAJOR >= 4 + #include +#else + #include +#endif // itk [Bloch et al] #include "RelativePositionPropImageFilter.h" @@ -55,6 +60,9 @@ AddRelativePositionConstraintToLabelImageFilter(): InverseOrientationFlagOff(); RemoveObjectFlagOn(); CombineWithOrFlagOff(); + VerboseStepFlagOff(); + WriteStepFlagOff(); + FuzzyMapOnlyFlagOff(); } //-------------------------------------------------------------------- @@ -115,15 +123,24 @@ clitk::AddRelativePositionConstraintToLabelImageFilter:: AddOrientationTypeString(std::string t) { m_OrientationTypeString.push_back(t); - switch (t[0]) { - case 'L' : AddOrientationType(AtLeftTo); break; - case 'R' : AddOrientationType(AtRightTo);break; - case 'A' : AddOrientationType(AntTo);break; - case 'P' : AddOrientationType(PostTo);break; - case 'S' : AddOrientationType(SupTo);break; - case 'I' : AddOrientationType(InfTo);break; - default: clitkExceptionMacro("Error, you must provide L,R or A,P or S,I"); - } + + if (t == "LeftTo") { AddOrientationType(LeftTo); return; } + if (t == "RightTo") { AddOrientationType(RightTo); return; } + if (t == "AntTo") { AddOrientationType(AntTo); return; } + if (t == "PostTo") { AddOrientationType(PostTo); return; } + if (t == "SupTo") { AddOrientationType(SupTo); return; } + if (t == "InfTo") { AddOrientationType(InfTo); return; } + + if (t == "NotLeftTo") { AddOrientationType(LeftTo); InverseOrientationFlagOn(); return; } + if (t == "NotRightTo") { AddOrientationType(RightTo); InverseOrientationFlagOn(); return; } + if (t == "NotAntTo") { AddOrientationType(AntTo); InverseOrientationFlagOn(); return; } + if (t == "NotPostTo") { AddOrientationType(PostTo); InverseOrientationFlagOn(); return; } + if (t == "NotSupTo") { AddOrientationType(SupTo); InverseOrientationFlagOn(); return; } + if (t == "NotInfTo") { AddOrientationType(InfTo); InverseOrientationFlagOn(); return; } + + if (t == "Angle") return; + + clitkExceptionMacro("Error, you must provide LeftTo,RightTo or AntTo,PostTo or SupTo,InfTo (or NotLeftTo, NotRightTo etc) but you give " << t); } //-------------------------------------------------------------------- @@ -162,15 +179,27 @@ GenerateInputRequestedRegion() template void clitk::AddRelativePositionConstraintToLabelImageFilter:: -AddAngles(double a, double b) +AddAnglesInRad(double a, double b) { - AddOrientationTypeString("Angle"); + m_OrientationTypeString.push_back("Angle"); + m_OrientationType.push_back(Angle); m_Angle1.push_back(a); m_Angle2.push_back(b); } //-------------------------------------------------------------------- +//-------------------------------------------------------------------- +template +void +clitk::AddRelativePositionConstraintToLabelImageFilter:: +AddAnglesInDeg(double a, double b) +{ + AddAnglesInRad(clitk::deg2rad(a), clitk::deg2rad(b)); +} +//-------------------------------------------------------------------- + + //-------------------------------------------------------------------- template void @@ -179,11 +208,11 @@ AddOrientationType(OrientationTypeEnumeration orientation) { m_OrientationType.push_back(orientation); switch (orientation) { - case AtRightTo: + case RightTo: m_Angle1.push_back(clitk::deg2rad(0)); m_Angle2.push_back(clitk::deg2rad(0)); break; - case AtLeftTo: + case LeftTo: m_Angle1.push_back(clitk::deg2rad(180)); m_Angle2.push_back(clitk::deg2rad(0)); break; @@ -217,6 +246,26 @@ AddOrientationType(OrientationTypeEnumeration orientation) //-------------------------------------------------------------------- +//-------------------------------------------------------------------- +template +void +clitk::AddRelativePositionConstraintToLabelImageFilter:: +PrintOptions() +{ + DD((int)this->GetBackgroundValue()); + DD((int)this->GetObjectBackgroundValue()); + DDV(this->GetOrientationTypeString(), (uint)this->GetNumberOfAngles()); + DD(this->GetIntermediateSpacingFlag()); + DD(this->GetIntermediateSpacing()); + DD(this->GetFuzzyThreshold()); + DD(this->GetAutoCropFlag()); + DD(this->GetInverseOrientationFlag()); + DD(this->GetRemoveObjectFlag()); + DD(this->GetCombineWithOrFlag()); +} +//-------------------------------------------------------------------- + + //-------------------------------------------------------------------- template void @@ -227,6 +276,18 @@ GenerateData() clitkExceptionMacro("Add at least one orientation type"); } + if (GetVerboseOptionFlag()) { + for(int i=0; i(itk::ProcessObject::GetInput(0)); object = dynamic_cast(itk::ProcessObject::GetInput(1)); @@ -316,7 +377,6 @@ GenerateData() typedef itk::RelativePositionPropImageFilter RelPosFilterType; typename RelPosFilterType::Pointer relPosFilter; - typename FloatImageType::Pointer m_FuzzyMap; for(int i=0; i= 4 + typedef itk::DivideImageFilter DivideFilter; + typename DivideFilter::Pointer divideFilter = DivideFilter::New(); + divideFilter->SetConstant2(GetNumberOfAngles()); +#else typedef itk::DivideByConstantImageFilter DivideFilter; typename DivideFilter::Pointer divideFilter = DivideFilter::New(); - divideFilter->SetInput(m_FuzzyMap); divideFilter->SetConstant(GetNumberOfAngles()); +#endif + divideFilter->SetInput(m_FuzzyMap); divideFilter->Update(); m_FuzzyMap = divideFilter->GetOutput(); } relPos = m_FuzzyMap; StopCurrentStep(relPos); + if (GetFuzzyMapOnlyFlag()) return; //-------------------------------------------------------------------- //-------------------------------------------------------------------- @@ -425,7 +492,6 @@ GenerateData() typename PasteFilterType::Pointer padFilter2 = PasteFilterType::New(); padFilter2->SetSourceImage(working_image); padFilter2->SetDestinationImage(temp); - // DD(input->GetLargestPossibleRegion().GetIndex()); padFilter2->SetDestinationIndex(input->GetLargestPossibleRegion().GetIndex()); padFilter2->SetSourceRegion(working_image->GetLargestPossibleRegion()); padFilter2->Update();