clitk::LabelImageOverlapMeasureFilter<ImageType>::
GenerateInputRequestedRegion()
{
- // DD("GenerateInputRequestedRegion");
// Call default
itk::ImageToImageFilter<ImageType, ImageType>::GenerateInputRequestedRegion();
// Get input pointers and set requested region to common region
// Resize like the union
ImagePointer input1 = clitk::ResizeImageLike<ImageType>(m_Input1, bbo, GetBackgroundValue());
ImagePointer input2 = clitk::ResizeImageLike<ImageType>(m_Input2, bbo, GetBackgroundValue());
+ //DD(input1->GetLargestPossibleRegion());
+ //DD(input2->GetLargestPossibleRegion());
// Compute overlap image
ImagePointer image_union = clitk::Clone<ImageType>(input1);
ImagePointer image_intersection = clitk::Clone<ImageType>(input1);
clitk::Or<ImageType>(image_union, input2, GetBackgroundValue());
clitk::And<ImageType>(image_intersection, input2, GetBackgroundValue());
+
+ ImagePointer image_1NotIn2 = clitk::Clone<ImageType>(input1);
+ clitk::AndNot<ImageType>(image_1NotIn2, input2, GetBackgroundValue());
- writeImage<ImageType>(image_union, "union.mha");
- writeImage<ImageType>(image_intersection, "intersection.mha");
+ ImagePointer image_2NotIn1 = clitk::Clone<ImageType>(input2);
+ clitk::AndNot<ImageType>(image_2NotIn1, input1, GetBackgroundValue());
+
+ //writeImage<ImageType>(image_union, "union.mha");
+ //writeImage<ImageType>(image_intersection, "intersection.mha");
+ //writeImage<ImageType>(image_1NotIn2, "image_1NotIn2.mha");
+ //writeImage<ImageType>(image_2NotIn1, "image_2NotIn1.mha");
// Compute size
typedef itk::LabelStatisticsImageFilter<ImageType, ImageType> StatFilterType;
statFilter->Update();
int in2 = statFilter->GetCount(GetLabel1());
- std::cout << in1 << " " << in2 << " " << inter << " " << u << " " << (double)inter/(double)u << std::endl;
+ statFilter->SetInput(image_1NotIn2);
+ statFilter->SetLabelInput(image_1NotIn2);
+ statFilter->Update();
+ int l1notIn2 = statFilter->GetCount(GetLabel1());
+
+ statFilter->SetInput(image_2NotIn1);
+ statFilter->SetLabelInput(image_2NotIn1);
+ statFilter->Update();
+ int l2notIn1 = statFilter->GetCount(GetLabel1());
+
+ double dice = 2.0*(double)inter/(double)(in1+in2);
+ int width = 6;
+ std::cout << std::setw(width) << in1 << " "
+ << std::setw(width) << in2 << " "
+ << std::setw(width) << inter << " "
+ << std::setw(width) << u << " "
+ << std::setw(width) << l1notIn2 << " "
+ << std::setw(width) << l2notIn1 << " "
+ << std::setw(width) << dice << " "; //std::endl;
}
//--------------------------------------------------------------------