X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkImageStatisticsGenericFilter.txx;h=cf05bb65d642eb61680a3b49039c8619f4c0b5db;hb=b96634936966a5da8c3d6ebb72b8954fb53b800a;hp=0f52d866973a739af9dbf0cce69da6044168f89d;hpb=01efc03d2d7e88c82197f8f500239573c8b67c39;p=clitk.git diff --git a/tools/clitkImageStatisticsGenericFilter.txx b/tools/clitkImageStatisticsGenericFilter.txx index 0f52d86..cf05bb6 100644 --- a/tools/clitkImageStatisticsGenericFilter.txx +++ b/tools/clitkImageStatisticsGenericFilter.txx @@ -18,6 +18,8 @@ #ifndef clitkImageStatisticsGenericFilter_txx #define clitkImageStatisticsGenericFilter_txx +#include "itkNthElementImageAdaptor.h" + /* ================================================= * @file clitkImageStatisticsGenericFilter.txx * @author @@ -34,15 +36,15 @@ namespace clitk //------------------------------------------------------------------- // Update with the number of dimensions //------------------------------------------------------------------- - template + template void ImageStatisticsGenericFilter::UpdateWithDim(std::string PixelType) { - if (m_Verbose) std::cout << "Image was detected to be "<(); + UpdateWithDimAndPixelType(); } // else if(PixelType == "unsigned_short"){ // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; @@ -51,7 +53,7 @@ namespace clitk else if (PixelType == "unsigned_char"){ if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; - UpdateWithDimAndPixelType(); + UpdateWithDimAndPixelType(); } // else if (PixelType == "char"){ @@ -60,7 +62,7 @@ namespace clitk // } else { if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; - UpdateWithDimAndPixelType(); + UpdateWithDimAndPixelType(); } } @@ -68,15 +70,14 @@ namespace clitk //------------------------------------------------------------------- // Update with the number of dimensions and the pixeltype //------------------------------------------------------------------- - template + template void ImageStatisticsGenericFilter::UpdateWithDimAndPixelType() { // ImageTypes - typedef itk::Image InputImageType; + typedef itk::Image, Dimension> InputImageType; typedef itk::Image LabelImageType; - typedef itk::Image OutputImageType; // Read the input typedef itk::ImageFileReader InputReaderType; @@ -84,31 +85,35 @@ namespace clitk reader->SetFileName( m_InputFileName); reader->Update(); typename InputImageType::Pointer input= reader->GetOutput(); + + typedef itk::NthElementImageAdaptor InputImageAdaptorType; + typedef itk::Image OutputImageType; + typename InputImageAdaptorType::Pointer input_adaptor = InputImageAdaptorType::New(); + input_adaptor->SetImage(input); + // Filter - typedef itk::LabelStatisticsImageFilter StatisticsImageFilterType; + typedef itk::LabelStatisticsImageFilter StatisticsImageFilterType; typename StatisticsImageFilterType::Pointer statisticsFilter=StatisticsImageFilterType::New(); - statisticsFilter->SetInput(input); + statisticsFilter->SetInput(input_adaptor); // Label image typename LabelImageType::Pointer labelImage; - if (m_ArgsInfo.mask_given) - { - typedef itk::ImageFileReader LabelImageReaderType; - typename LabelImageReaderType::Pointer labelImageReader=LabelImageReaderType::New(); - labelImageReader->SetFileName(m_ArgsInfo.mask_arg); - labelImageReader->Update(); - labelImage= labelImageReader->GetOutput(); - } - else - { - labelImage=LabelImageType::New(); - labelImage->SetRegions(input->GetLargestPossibleRegion()); - labelImage->SetOrigin(input->GetOrigin()); - labelImage->SetSpacing(input->GetSpacing()); - labelImage->Allocate(); - labelImage->FillBuffer(m_ArgsInfo.label_arg[0]); - } + if (m_ArgsInfo.mask_given) { + typedef itk::ImageFileReader LabelImageReaderType; + typename LabelImageReaderType::Pointer labelImageReader=LabelImageReaderType::New(); + labelImageReader->SetFileName(m_ArgsInfo.mask_arg); + labelImageReader->Update(); + labelImage= labelImageReader->GetOutput(); + } + else { + labelImage=LabelImageType::New(); + labelImage->SetRegions(input->GetLargestPossibleRegion()); + labelImage->SetOrigin(input->GetOrigin()); + labelImage->SetSpacing(input->GetSpacing()); + labelImage->Allocate(); + labelImage->FillBuffer(m_ArgsInfo.label_arg[0]); + } statisticsFilter->SetLabelInput(labelImage); // For each Label @@ -119,77 +124,91 @@ namespace clitk else numberOfLabels=1; - for (unsigned int k=0; k< numberOfLabels; k++) - { - label=m_ArgsInfo.label_arg[k]; - - std::cout<SetUseHistograms(true); - statisticsFilter->SetHistogramParameters(m_ArgsInfo.bins_arg, m_ArgsInfo.lower_arg, m_ArgsInfo.upper_arg); - } - statisticsFilter->Update(); - - - // Output - if (m_Verbose) std::cout<<"N° of pixels: "; - std::cout<GetCount(label)<GetMean(label)<GetSigma(label)<GetVariance(label)<GetMinimum(label)<GetMaximum(label)<GetSum(label)<GetBoundingBox(label).size(); i++) - std::cout<GetBoundingBox(label)[i]<<" "; - std::cout<GetMedian(label)<GetHistogram(label); - - // Screen - if (m_Verbose) std::cout<<"Histogram: "<GetBinMin(0,i)<<"\t"<GetMeasurement(i,0)<<"\t"<GetBinMax(0,i)<<"\t"<GetFrequency(i)<GetBinMin(0,i)<<"\t"<GetMeasurement(i,0)<<"\t"<GetBinMax(0,i)<<"\t"<GetFrequency(i)<SelectNthElement(c); + input_adaptor->Update(); + + for (unsigned int k=0; k< numberOfLabels; k++) { + label=m_ArgsInfo.label_arg[k]; + + std::cout<SetUseHistograms(true); + statisticsFilter->SetHistogramParameters(m_ArgsInfo.bins_arg, m_ArgsInfo.lower_arg, m_ArgsInfo.upper_arg); + } + statisticsFilter->Update(); + + // Output + if (m_Verbose) std::cout<<"N° of pixels: "; + std::cout<GetCount(label)<GetMean(label)<GetSigma(label)<GetVariance(label)<GetMinimum(label)<GetMaximum(label)<GetSum(label)<GetBoundingBox(label).size(); i++) + std::cout<GetBoundingBox(label)[i]<<" "; + std::cout<GetMedian(label)<GetHistogram(label); + + // Screen + if (m_Verbose) std::cout<<"Histogram: "<GetBinMin(0,i)<<"\t"<GetMeasurement(i,0)<<"\t"<GetBinMax(0,i)<<"\t"<GetFrequency(i)<GetBinMin(0,i)<<"\t"<GetMeasurement(i,0)<<"\t"<GetBinMax(0,i)<<"\t"<GetFrequency(i)<