SetObjectCCLSelectionDimension(0);
SetObjectCCLSelectionDirection(1);
ObjectCCLSelectionIgnoreSingleCCLFlagOff();
+ VerboseSlicesFlagOff();
+ this->SetK1(std::acos(-1.0)/2);
}
//--------------------------------------------------------------------
PrintOptions(std::ostream & os)
{
os << "Slice direction = " << this->GetDirection() << std::endl
- << "BG value = " << this->GetBackgroundValue() << std::endl;
+ << "BG value = " << (int)this->GetBackgroundValue() << std::endl;
for(int i=0; i<this->GetNumberOfAngles(); i++) {
os << "Orientation = " << this->GetOrientationTypeString()[i] << std::endl;
os << "Angles = " << clitk::rad2deg(this->GetAngle1InRad(i))
<< "ObjectCCLSelectionIgnoreSingleCCLFlag = " << this->GetObjectCCLSelectionIgnoreSingleCCLFlag() << std::endl
<< "IgnoreEmptySliceObjectFlag = " << this->GetIgnoreEmptySliceObjectFlag() << std::endl
<< "(RP) FastFlag = " << this->GetFastFlag() << std::endl
- << "(RP) Radius = " << this->GetRadius() << std::endl;
+ << "(RP) Radius = " << this->GetRadius() << std::endl
+ << "(RP) K1 = " << this->GetK1() << std::endl;
}
//--------------------------------------------------------------------
m_working_object = clitk::ResizeImageLike<ImageType>(m_working_object,
m_working_input,
this->GetObjectBackgroundValue());
+
+ // Index can be negative in some cases, and lead to problem with
+ // some filter. So we correct it.
+ m_working_input = clitk::RemoveNegativeIndexFromRegion<ImageType>(m_working_input);
+ m_working_object = clitk::RemoveNegativeIndexFromRegion<ImageType>(m_working_object);
+
+ // End
this->template StopCurrentStep<ImageType>(m_working_input);
}
//--------------------------------------------------------------------
// Perform slice by slice relative position
- this->StartNewStep("Perform slice by slice relative position");
+ this->StartNewStep("Perform slice by slice relative position ("+toString(mInputSlices.size())+")");
for(unsigned int i=0; i<mInputSlices.size(); i++) {
// Count the number of CCL (allow to ignore empty slice)
int nb=0;
mObjectSlices[i] = LabelizeAndCountNumberOfObjects<SliceType>(mObjectSlices[i], 0, true, 1, nb);
+ if (GetVerboseSlicesFlag()) {
+ std::cout << "slice " << i << " nb = " << nb << std::endl;
+ }
+
// If no object and empty slices and if we need the full fuzzy map, create a dummy one.
if ((nb==0) && (this->GetFuzzyMapOnlyFlag())) {
typename FloatSliceType::Pointer one = FloatSliceType::New();
// Relative position
typedef clitk::AddRelativePositionConstraintToLabelImageFilter<SliceType> RelPosFilterType;
typename RelPosFilterType::Pointer relPosFilter = RelPosFilterType::New();
-
relPosFilter->VerboseStepFlagOff();
+ if (GetVerboseSlicesFlag()) {
+ std::cout << "Slice " << i << std::endl;
+ relPosFilter->VerboseStepFlagOn();
+ //relPosFilter->WriteStepFlagOn();
+ }
relPosFilter->WriteStepFlagOff();
// relPosFilter->VerboseMemoryFlagOn();
- relPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()+"-"+toString(i));
-
+ relPosFilter->SetCurrentStepBaseId(this->GetCurrentStepId()+"-"+toString(i));
relPosFilter->SetBackgroundValue(this->GetBackgroundValue());
relPosFilter->SetInput(mInputSlices[i]);
relPosFilter->SetInputObject(mObjectSlices[i]);
- relPosFilter->SetRemoveObjectFlag(this->GetRemoveObjectFlag());
-
+ relPosFilter->SetRemoveObjectFlag(this->GetRemoveObjectFlag());
// This flag (InverseOrientation) *must* be set before
// AddOrientation because AddOrientation can change it.
relPosFilter->SetInverseOrientationFlag(this->GetInverseOrientationFlag());
relPosFilter->SetFuzzyThreshold(this->GetFuzzyThreshold());
relPosFilter->AutoCropFlagOff(); // important ! because we join the slices after this loop
relPosFilter->SetCombineWithOrFlag(this->GetCombineWithOrFlag());
-
// should we stop after fuzzy map ?
relPosFilter->SetFuzzyMapOnlyFlag(this->GetFuzzyMapOnlyFlag());
- // relPosFilter->SetComputeFuzzyMapFlag(this->GetComputeFuzzyMapFlag());
-
+ // relPosFilter->SetComputeFuzzyMapFlag(this->GetComputeFuzzyMapFlag());
+ relPosFilter->SetFastFlag(this->GetFastFlag());
+ relPosFilter->SetRadius(this->GetRadius());
+ relPosFilter->SetK1(this->GetK1());
+
// Go !
relPosFilter->Update();