#include "clitkFilterBase.h"
// itk
-#include "itkPasteImageFilter.h"
+#include <itkPasteImageFilter.h>
// itk ENST
#include "RelativePositionPropImageFilter.h"
// Options
void SetOrientationType(OrientationTypeEnumeration orientation);
itkGetConstMacro(OrientationType, OrientationTypeEnumeration);
+ void SetOrientationTypeString(std::string s);
+ itkGetConstMacro(OrientationTypeString, std::string);
void SetAngle1(double a);
void SetAngle2(double a);
itkGetConstMacro(ObjectBackgroundValue, PixelType);
itkSetMacro(ObjectBackgroundValue, PixelType);
- itkGetConstMacro(AutoCrop, bool);
- itkSetMacro(AutoCrop, bool);
- itkBooleanMacro(AutoCrop);
+ itkGetConstMacro(AutoCropFlag, bool);
+ itkSetMacro(AutoCropFlag, bool);
+ itkBooleanMacro(AutoCropFlag);
+
+ itkGetConstMacro(NotFlag, bool);
+ itkSetMacro(NotFlag, bool);
+ itkBooleanMacro(NotFlag);
protected:
AddRelativePositionConstraintToLabelImageFilter();
virtual ~AddRelativePositionConstraintToLabelImageFilter() {}
OrientationTypeEnumeration m_OrientationType;
+ std::string m_OrientationTypeString;
double m_IntermediateSpacing;
double m_FuzzyThreshold;
PixelType m_BackgroundValue;
double m_Angle1;
double m_Angle2;
bool m_ResampleBeforeRelativePositionFilter;
- bool m_AutoCrop;
+ bool m_AutoCropFlag;
+ bool m_NotFlag;
virtual void GenerateOutputInformation();
virtual void GenerateInputRequestedRegion();
SetOrientationType(LeftTo);
ResampleBeforeRelativePositionFilterOn();
SetIntermediateSpacing(10);
- AutoCropOn();
+ AutoCropFlagOn();
+ NotFlagOff();
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
+//--------------------------------------------------------------------
+template <class ImageType>
+void
+clitk::AddRelativePositionConstraintToLabelImageFilter<ImageType>::
+SetOrientationTypeString(std::string t)
+{
+ SetOrientationType(Angle);
+ if (t[0] == 'L') SetOrientationType(LeftTo);
+ if (t[0] == 'R') SetOrientationType(RightTo);
+ if (t[0] == 'A') SetOrientationType(AntTo);
+ if (t[0] == 'P') SetOrientationType(PostTo);
+ if (t[0] == 'S') SetOrientationType(SupTo);
+ if (t[0] == 'I') SetOrientationType(InfTo);
+}
+//--------------------------------------------------------------------
+
+
//--------------------------------------------------------------------
template <class ImageType>
void
clitk::AddRelativePositionConstraintToLabelImageFilter<ImageType>::
GenerateData()
{
+ // Print Option
+ /*
+ DD(GetFuzzyThreshold());
+ DD((int)GetBackgroundValue());
+ DD((int)GetObjectBackgroundValue());
+ DD(GetOrientationType());
+ DD(GetResampleBeforeRelativePositionFilter());
+ DD(GetIntermediateSpacing());
+ DD(GetAutoCropFlag());
+ DD(GetNotFlag());
+ */
+
// Get input pointer
input = dynamic_cast<ImageType*>(itk::ProcessObject::GetInput(0));
object = dynamic_cast<ImageType*>(itk::ProcessObject::GetInput(1));
// resampleFilter->SetVerboseOptions(true);
resampleFilter->Update();
working_image = resampleFilter->GetOutput();
- StopCurrentStep<ImageType>(working_image);
+ StopCurrentStep<ImageType>(working_image);
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Pre Step 6: pad if not the same size : it can occur when downsample and upsample
+ // DD(working_image->GetLargestPossibleRegion());
+ // DD(input->GetLargestPossibleRegion());
+ //if (!HaveSameSizeAndSpacing(working_image, input)) {
if (working_image->GetLargestPossibleRegion() != input->GetLargestPossibleRegion()) {
StartNewStep("Pad to get the same size than input");
typename ImageType::Pointer temp = ImageType::New();
typename PadFilterType::Pointer padFilter2 = PadFilterType::New();
padFilter2->SetSourceImage(working_image);
padFilter2->SetDestinationImage(temp);
+ // DD(input->GetLargestPossibleRegion().GetIndex());
padFilter2->SetDestinationIndex(input->GetLargestPossibleRegion().GetIndex());
padFilter2->SetSourceRegion(working_image->GetLargestPossibleRegion());
padFilter2->Update();
combineFilter->SetForegroundValue(m_BackgroundValue+1);
combineFilter->SetInput1(input);
combineFilter->SetInput2(working_image);
- combineFilter->SetOperationType(BoolFilterType::And);
+ if (GetNotFlag())
+ combineFilter->SetOperationType(BoolFilterType::AndNot);
+ else
+ combineFilter->SetOperationType(BoolFilterType::And);
combineFilter->InPlaceOn();
combineFilter->Update();
working_image = combineFilter->GetOutput();
-
+
combineFilter = BoolFilterType::New();
combineFilter->SetInput1(working_image);
combineFilter->SetInput2(object);
//--------------------------------------------------------------------
//--------------------------------------------------------------------
// Step 7: autocrop
- if (GetAutoCrop()) {
+ if (GetAutoCropFlag()) {
StartNewStep("Final AutoCrop");
typedef clitk::AutoCropFilter<ImageType> CropFilterType;
typename CropFilterType::Pointer cropFilter = CropFilterType::New();
// Final Step -> set output
this->SetNthOutput(0, working_image);
+ // this->GraftOutput(working_image);
return;
}
//--------------------------------------------------------------------