X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkConnectedComponentLabelingGenericFilter.txx;h=3c5784195c0fb6d79c048bfda6aec24eb9b38f96;hb=aec94df9bf0c625df38d54ba51117cca98503768;hp=caf5cdf4534e4a9ef37470162ff9cfeafd230e9f;hpb=e008d74b0ecdc4ca2eaae8c429901a78f9ef5c31;p=clitk.git diff --git a/segmentation/clitkConnectedComponentLabelingGenericFilter.txx b/segmentation/clitkConnectedComponentLabelingGenericFilter.txx index caf5cdf..3c57841 100644 --- a/segmentation/clitkConnectedComponentLabelingGenericFilter.txx +++ b/segmentation/clitkConnectedComponentLabelingGenericFilter.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,13 +14,14 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html - ======================================================================-====*/ + ===========================================================================**/ #ifndef CLITKCONNECTEDCOMPONENTLABELINGSGENERICFILTER_TXX #define CLITKCONNECTEDCOMPONENTLABELINGSGENERICFILTER_TXX // clitk #include "clitkImageCommon.h" +#include "clitkSegmentationUtils.h" // itk #include "itkConnectedComponentImageFilter.h" @@ -78,42 +79,57 @@ void clitk::ConnectedComponentLabelingGenericFilter::UpdateWithInp // Output image type typedef itk::Image OutputImageType; - - // Create CCL filter - DD("CCL"); - typedef itk::ConnectedComponentImageFilter ConnectFilterType; - typename ConnectFilterType::Pointer connectFilter = ConnectFilterType::New(); - connectFilter->SetInput(input); - connectFilter->SetBackgroundValue(mArgsInfo.inputBG_arg); - connectFilter->SetFullyConnected(mArgsInfo.full_flag); - - // TODO SetBackgroud to zero forr relabel ? - - - // Sort by size and remove too small area. - typedef itk::RelabelComponentImageFilter RelabelFilterType; - typename RelabelFilterType::Pointer relabelFilter = RelabelFilterType::New(); - // relabelFilter->InPlaceOn(); - relabelFilter->SetInput(connectFilter->GetOutput()); - relabelFilter->SetMinimumObjectSize(mArgsInfo.minSize_arg); - relabelFilter->Update(); - - DD(mArgsInfo.inputBG_arg); - DD(mArgsInfo.full_flag); - DD(mArgsInfo.minSize_arg); - - // Set information - const std::vector & a = relabelFilter->GetSizeOfObjectsInPixels(); - m_SizeOfObjectsInPixels.resize(a.size()); - for(unsigned int i=0; iGetSizeOfObjectsInPhysicalUnits(); - m_OriginalNumberOfObjects = relabelFilter->GetOriginalNumberOfObjects(); - DD(m_OriginalNumberOfObjects); - DD(m_SizeOfObjectsInPhysicalUnits.size()); + PrintMemory(true, "initial"); + + typename OutputImageType::Pointer output; + { + typename OutputImageType::Pointer temp; + { + // Create CCL filter + typedef itk::ConnectedComponentImageFilter ConnectFilterType; + typename ConnectFilterType::Pointer connectFilter = ConnectFilterType::New(); + // connectFilter->ReleaseDataFlagOn(); // release earlier + connectFilter->SetInput(input); + connectFilter->SetBackgroundValue(mArgsInfo.inputBG_arg); + connectFilter->SetFullyConnected(mArgsInfo.full_flag); + // connectFilter->SetNumberOfThreads(8); + connectFilter->Update(); + temp = connectFilter->GetOutput(); + PrintMemory(true, "after udpate"); + } + PrintMemory(true, "after CCL block"); + DD(input->GetReferenceCount()); + DD(temp->GetReferenceCount()); + + // Sort by size and remove too small area. + typedef itk::RelabelComponentImageFilter RelabelFilterType; + typename RelabelFilterType::Pointer relabelFilter = RelabelFilterType::New(); + // relabelFilter->SetInput(connectFilter->GetOutput()); + relabelFilter->SetInput(temp); + relabelFilter->SetMinimumObjectSize(mArgsInfo.minSize_arg); + relabelFilter->Update(); + + DD(mArgsInfo.inputBG_arg); + DD(mArgsInfo.full_flag); + DD(mArgsInfo.minSize_arg); + + // Set information + const std::vector & a + = relabelFilter->GetSizeOfObjectsInPixels(); + m_SizeOfObjectsInPixels.resize(a.size()); + for(unsigned int i=0; iGetSizeOfObjectsInPhysicalUnits(); + m_OriginalNumberOfObjects = relabelFilter->GetOriginalNumberOfObjects(); + DD(m_OriginalNumberOfObjects); + DD(m_SizeOfObjectsInPhysicalUnits.size()); + + output = relabelFilter->GetOutput(); + } + PrintMemory(true, "after block"); // Write/Save results - typename OutputImageType::Pointer output = relabelFilter->GetOutput(); this->template SetNextOutput(output); + PrintMemory(true, "end filter "); } //--------------------------------------------------------------------