Commit 9897ea64 authored by Antoine Regimbeau's avatar Antoine Regimbeau
Browse files

TEST: add test for contrast filter

No related merge requests found
Showing with 106 additions and 49 deletions
+106 -49
...@@ -206,14 +206,15 @@ private: ...@@ -206,14 +206,15 @@ private:
AddParameter(ParameterType_Choice , "spatial" , "Spatial parameters " AddParameter(ParameterType_Choice , "spatial" , "Spatial parameters "
"for the histogram computation"); "for the histogram computation");
AddChoice( "spatial.global" , "Global" );
SetParameterDescription("spatial.global" , "The histogram will be "
"computed on the whole image. The equalization will be done on "
"this single histogram.");
AddChoice( "spatial.local" , "Local" ); AddChoice( "spatial.local" , "Local" );
SetParameterDescription("spatial.local" , "The histograms will be " SetParameterDescription("spatial.local" , "The histograms will be "
"computed on the each thumbnail. Each of the histogram will be " "computed on the each thumbnail. Each of the histogram will be "
"equalized and the corresponding gain will be interpolated."); "equalized and the corresponding gain will be interpolated.");
AddChoice( "spatial.global" , "Global" );
SetParameterDescription("spatial.global" , "The histogram will be "
"computed on the whole image. The equalization will be done on "
"this single histogram.");
AddParameter(ParameterType_Int,"spatial.local.h" , AddParameter(ParameterType_Int,"spatial.local.h" ,
"Thumbnail height in pixel"); "Thumbnail height in pixel");
...@@ -309,7 +310,8 @@ private: ...@@ -309,7 +310,8 @@ private:
!HasUserValue("mode.lum.blu.ch") ) !HasUserValue("mode.lum.blu.ch") )
SetDefaultValue( inImage , "RGB" ); SetDefaultValue( inImage , "RGB" );
// if ( HasUserValue("minmax.manuel.min") && HasUserValue("minmax.manuel.max") ) // if ( HasUserValue("minmax.manuel.min") &&
// HasUserValue("minmax.manuel.max") )
// { // {
// if ( GetParameterFloat( "minmax.manuel.min" ) > // if ( GetParameterFloat( "minmax.manuel.min" ) >
// GetParameterFloat( "minmax.manuel.max" ) ) // GetParameterFloat( "minmax.manuel.max" ) )
...@@ -327,7 +329,6 @@ private: ...@@ -327,7 +329,6 @@ private:
// otbAppLogINFO( << oss.str() ); // otbAppLogINFO( << oss.str() );
// } // }
// } // }
} }
if ( GetParameterString("minmax") == "manuel" ) if ( GetParameterString("minmax") == "manuel" )
...@@ -381,8 +382,6 @@ private: ...@@ -381,8 +382,6 @@ private:
m_ImageListToVectorFilterOut = ImageListToVectorFilterType::New() ; m_ImageListToVectorFilterOut = ImageListToVectorFilterType::New() ;
m_ImageListToVectorFilterOut->SetInput(outputImageList); m_ImageListToVectorFilterOut->SetInput(outputImageList);
// m_ImageListToVectorFilterOut->Update();
// std::cout<<"not you imagelistetovecor"<<std::endl;
SetParameterOutputImage( "out" , SetParameterOutputImage( "out" ,
m_ImageListToVectorFilterOut->GetOutput() ); m_ImageListToVectorFilterOut->GetOutput() );
} }
...@@ -510,7 +509,8 @@ private: ...@@ -510,7 +509,8 @@ private:
{ {
std::ostringstream oss; std::ostringstream oss;
oss<<"The minimum (" << GetParameterFloat( "minmax.manuel.min" ) << oss<<"The minimum (" << GetParameterFloat( "minmax.manuel.min" ) <<
") is superior to the maximum (" << GetParameterFloat( "minmax.manuel.max" ) ") is superior to the maximum ("
<< GetParameterFloat( "minmax.manuel.max" )
<< ") please correct this error or allow the application to compute " << ") please correct this error or allow the application to compute "
"those parameters"; "those parameters";
otbAppLogFATAL( << oss.str() ) otbAppLogFATAL( << oss.str() )
...@@ -601,7 +601,8 @@ private: ...@@ -601,7 +601,8 @@ private:
m_BufferFilter[channel] = BufferFilterType::New(); m_BufferFilter[channel] = BufferFilterType::New();
m_BufferFilter[channel]->SetInput( input ); m_BufferFilter[channel]->SetInput( input );
m_GainLutFilter[channel]->SetInput ( m_Histogram[channel] ); m_GainLutFilter[channel]->SetInput ( m_Histogram[channel] );
m_StreamingFilter[channel]->SetInput( m_GainLutFilter[channel]->GetOutput() ); m_StreamingFilter[channel]->SetInput(
m_GainLutFilter[channel]->GetOutput() );
m_ApplyFilter[channel]->SetInputImage ( m_ApplyFilter[channel]->SetInputImage (
m_BufferFilter[channel]->GetOutput() ); m_BufferFilter[channel]->GetOutput() );
m_ApplyFilter[channel]->SetInputLut( m_ApplyFilter[channel]->SetInputLut(
...@@ -693,7 +694,6 @@ private: ...@@ -693,7 +694,6 @@ private:
m_LuminanceFunctor->GetFunctor().SetLumCoef( lumCoef ); m_LuminanceFunctor->GetFunctor().SetLumCoef( lumCoef );
m_LuminanceFunctor->SetInput( inImage ); m_LuminanceFunctor->SetInput( inImage );
m_LuminanceFunctor->UpdateOutputInformation(); m_LuminanceFunctor->UpdateOutputInformation();
// std::cout<<m_LuminanceFunctor->GetOutput()->GetNumberOfComponentsPerPixel()<<std::endl;
} }
// Equalize the luminance and apply the corresponding gain on each channel // Equalize the luminance and apply the corresponding gain on each channel
...@@ -815,7 +815,7 @@ private: ...@@ -815,7 +815,7 @@ private:
HistogramType::IndexType zero; HistogramType::IndexType zero;
HistogramType::Pointer & histoToThresh = m_Histogram[j]; HistogramType::Pointer & histoToThresh = m_Histogram[j];
zero.Fill(0); zero.Fill(0);
for( unsigned int i = 0 ; i < nbBin ; i++ ) for ( unsigned int i = 0 ; i < nbBin ; i++ )
{ {
if ( histoToThresh->GetPixel(zero)[i] > height ) if ( histoToThresh->GetPixel(zero)[i] > height )
{ {
...@@ -825,7 +825,7 @@ private: ...@@ -825,7 +825,7 @@ private:
} }
height = rest / nbBin; height = rest / nbBin;
rest = rest % nbBin; rest = rest % nbBin;
for( unsigned int i = 0 ; i < nbBin ; i++ ) for ( unsigned int i = 0 ; i < nbBin ; i++ )
{ {
histoToThresh->GetPixel(zero)[i] += height ; histoToThresh->GetPixel(zero)[i] += height ;
if ( i > (nbBin - rest)/2 && i <= (nbBin - rest)/2 + rest ) if ( i > (nbBin - rest)/2 && i <= (nbBin - rest)/2 + rest )
...@@ -843,15 +843,19 @@ private: ...@@ -843,15 +843,19 @@ private:
unsigned int nbBin( GetParameterInt( "bins" ) ); unsigned int nbBin( GetParameterInt( "bins" ) );
HistoPersistentFilterType::HistogramType::Pointer histo; HistoPersistentFilterType::HistogramType::Pointer histo;
FloatImageType::SpacingType inputSpacing ( GetParameterImage("in")->GetSpacing() ); FloatImageType::SpacingType inputSpacing (
FloatImageType::PointType inputOrigin ( GetParameterImage("in")->GetOrigin() ); GetParameterImage("in")->GetSpacing() );
FloatImageType::PointType inputOrigin (
GetParameterImage("in")->GetOrigin() );
HistogramType::SpacingType histoSpacing ; HistogramType::SpacingType histoSpacing ;
histoSpacing[0] = inputSpacing[0] * m_ThumbSize[0] ; histoSpacing[0] = inputSpacing[0] * m_ThumbSize[0] ;
histoSpacing[1] = inputSpacing[1] * m_ThumbSize[1] ; histoSpacing[1] = inputSpacing[1] * m_ThumbSize[1] ;
HistogramType::PointType histoOrigin ; HistogramType::PointType histoOrigin ;
histoOrigin[0] = histoSpacing[0] / 2 + inputOrigin[0] - inputSpacing[0] / 2 ; histoOrigin[0] = histoSpacing[0] / 2 +
histoOrigin[1] = histoSpacing[1] / 2 + inputOrigin[1] - inputSpacing[1] / 2 ; inputOrigin[0] - inputSpacing[0] / 2 ;
histoOrigin[1] = histoSpacing[1] / 2 +
inputOrigin[1] - inputSpacing[1] / 2 ;
for ( unsigned int i = 0 ; i < histoList->Size() ; i++ ) for ( unsigned int i = 0 ; i < histoList->Size() ; i++ )
{ {
......
...@@ -48,6 +48,11 @@ otb_test_application(NAME apTvUtSmoothingTest_OutXML ...@@ -48,6 +48,11 @@ otb_test_application(NAME apTvUtSmoothingTest_OutXML
VALID --compare-image ${NOTOL} VALID --compare-image ${NOTOL}
${BASELINE}/apTvUtSmoothingTest.tif ${BASELINE}/apTvUtSmoothingTest.tif
${TEMP}/apTvUtSmoothingTest_OutXML.tif) ${TEMP}/apTvUtSmoothingTest_OutXML.tif)
#----------- Contrast TESTS ----------------
...@@ -38,4 +38,51 @@ target_link_libraries(otbContrastTestDriver ${OTBContrast-Test_LIBRARIES}) ...@@ -38,4 +38,51 @@ target_link_libraries(otbContrastTestDriver ${OTBContrast-Test_LIBRARIES})
otb_module_target_label(otbContrastTestDriver) otb_module_target_label(otbContrastTestDriver)
otb_add_test(NAME bfTuCLHistogramEqualizationFilterNew COMMAND otbContrastTestDriver otb_add_test(NAME bfTuCLHistogramEqualizationFilterNew COMMAND otbContrastTestDriver
otbCLHistogramEqualizationFilterNew) otbCLHistogramEqualizationFilterNew)
\ No newline at end of file
otb_add_test(NAME bfTuApplyGainFilterNew COMMAND otbContrastTestDriver
otbApplyGainFilterNew)
otb_add_test(NAME bfTuComputeGainLutFilterNew COMMAND otbContrastTestDriver
otbComputeGainLutFilterNew)
otb_add_test(NAME bfTuComputeHistoFilterNew COMMAND otbContrastTestDriver
otbComputeHistoFilterNew)
otb_add_test(NAME bfTvComputeHistoFilter COMMAND otbContrastTestDriver
--compare-image ${EPSILON_7}
${BASELINE}/bfTvComputeHistoFilter.tif
${TEMP}/bfTvComputeHistoFilter.tif
otbComputeHistoFilter
${INPUTDATA}/QB_Suburb.png
${TEMP}/inputHisto_QB_Suburb.tif
)
otb_add_test(NAME bfTvComputeGainLutFilter COMMAND otbContrastTestDriver
--compare-image ${EPSILON_7}
${BASELINE}/bfTvComputeGainLutFilter.tif
${TEMP}/bfTvComputeGainLutFilter.tif
otbComputeGainLutFilter
${INPUTDATA}/QB_Suburb.png
${INPUTDATA}/inputHisto_QB_Suburb.tif
${TEMP}/inputLut_QB_Suburb.tif
)
otb_add_test(NAME bfTvApplyGainFilter COMMAND otbContrastTestDriver
--compare-image ${EPSILON_7}
${BASELINE}/bfTvApplyGainFilter.tif
${TEMP}/bfTvApplyGainFilter.tif
otbApplyGainFilter
${INPUTDATA}/QB_Suburb.png
${INPUTDATA}/inputLut_QB_Suburb.tif
${TEMP}/bfTvApplyGainFilter.tif
)
otb_add_test(NAME bfTvCLHistoEqFilter COMMAND otbContrastTestDriver
--compare-image ${EPSILON_7}
${BASELINE}/bfTvApplyGainFilter.tif
${TEMP}/bfTvCLHistoEqFilter.tif
otbCLHistogramEqualizationFilter
${INPUTDATA}/QB_Suburb.png
${TEMP}/bfTvCLHistoEqFilter.tif
)
\ No newline at end of file
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "otbVectorImage.h" #include "otbVectorImage.h"
#include "otbApplyGainFilter.h" #include "otbApplyGainFilter.h"
int otbApplyGainFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) int otbApplyGainFilter(int itkNotUsed(argc), char * argv [])
{ {
typedef int InputPixelType; typedef int InputPixelType;
typedef double LutPixelType; typedef double LutPixelType;
...@@ -42,9 +42,9 @@ int otbApplyGainFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) ...@@ -42,9 +42,9 @@ int otbApplyGainFilter(int itkNotUsed(argc), char * itkNotUsed(argv) [])
ReaderType::Pointer reader ( ReaderType::New() ); ReaderType::Pointer reader ( ReaderType::New() );
ReaderLutType::Pointer readerLut ( ReaderLutType::New() ); ReaderLutType::Pointer readerLut ( ReaderLutType::New() );
WriterType::Pointer writer ( WriterType::New() ); WriterType::Pointer writer ( WriterType::New() );
reader->SetFileName( "/home/antoine/dev/my_data/test/smallinput.tif" ); reader->SetFileName( argv[1] );
readerLut->SetFileName( "/home/antoine/dev/my_data/test/small_glob_lut_ref.tif" ); readerLut->SetFileName( argv[2] );
writer->SetFileName( "/home/antoine/dev/my_data/test/small_glob_apply.tif" ); writer->SetFileName( argv[3] );
reader->UpdateOutputInformation(); reader->UpdateOutputInformation();
readerLut->UpdateOutputInformation(); readerLut->UpdateOutputInformation();
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
#include "otbImage.h" #include "otbImage.h"
#include "otbCLHistogramEqualizationFilter.h" #include "otbCLHistogramEqualizationFilter.h"
int otbCLHistogramEqualizationFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) int otbCLHistogramEqualizationFilter(int itkNotUsed(argc), char * argv [])
{ {
typedef int InputPixelType; typedef int InputPixelType;
const unsigned int Dimension = 2; const unsigned int Dimension = 2;
...@@ -36,20 +36,22 @@ int otbCLHistogramEqualizationFilter(int itkNotUsed(argc), char * itkNotUsed(arg ...@@ -36,20 +36,22 @@ int otbCLHistogramEqualizationFilter(int itkNotUsed(argc), char * itkNotUsed(arg
ReaderType::Pointer reader ( ReaderType::New() ); ReaderType::Pointer reader ( ReaderType::New() );
WriterType::Pointer writer ( WriterType::New() ); WriterType::Pointer writer ( WriterType::New() );
reader->SetFileName( "/home/antoine/dev/my_data/test/smallinput.tif" ); reader->SetFileName( argv[1] );
writer->SetFileName( "/home/antoine/dev/my_data/test/small_glob_clahe.tif" ); writer->SetFileName( argv[2] );
reader->UpdateOutputInformation(); reader->UpdateOutputInformation();
FilterType::Pointer histoEqualize ( FilterType::New() ); FilterType::Pointer histoEqualize ( FilterType::New() );
histoEqualize->SetInput( reader->GetOutput() ); histoEqualize->SetInput( reader->GetOutput() );
histoEqualize->SetMin(0); histoEqualize->SetMin(0);
histoEqualize->SetMax(255); histoEqualize->SetMax(255);
histoEqualize->SetNbBin(256); histoEqualize->SetNbBin(256);
InputImageType::SizeType size; auto size = reader->GetOutput()->GetLargestPossibleRegion().GetSize();
size[0] = reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0]; size[0] /= 4;
size[1] = reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1]; size[1] /= 4;
histoEqualize->SetThumbSize(size); histoEqualize->SetThumbSize( size );
// histoEqualize->SetThreshold(100);
writer->SetInput(histoEqualize->GetOutput()); writer->SetInput( histoEqualize->GetOutput() );
writer->Update(); writer->Update();
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "otbImageFileReader.h" #include "otbImageFileReader.h"
#include "otbComputeGainLutFilter.h" #include "otbComputeGainLutFilter.h"
int otbComputeGainLutFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) int otbComputeGainLutFilter(int itkNotUsed(argc), char * argv [])
{ {
typedef int InputPixelType; typedef int InputPixelType;
typedef double OutputPixelType; typedef double OutputPixelType;
...@@ -41,9 +41,9 @@ int otbComputeGainLutFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) ...@@ -41,9 +41,9 @@ int otbComputeGainLutFilter(int itkNotUsed(argc), char * itkNotUsed(argv) [])
ReaderImageType::Pointer readerImage( ReaderImageType::New() ); ReaderImageType::Pointer readerImage( ReaderImageType::New() );
ReaderType::Pointer reader( ReaderType::New() ); ReaderType::Pointer reader( ReaderType::New() );
WriterType::Pointer writer ( WriterType::New() ); WriterType::Pointer writer ( WriterType::New() );
readerImage->SetFileName( "/home/antoine/dev/my_data/test/smallinput.tif" ); readerImage->SetFileName( argv[1] );
reader->SetFileName( "/home/antoine/dev/my_data/test/small_glob_histo_ref.tif" ); reader->SetFileName( argv[2] );
writer->SetFileName( "/home/antoine/dev/my_data/test/small_glob_lut.tif" ); writer->SetFileName( argv[3] );
reader->UpdateOutputInformation(); reader->UpdateOutputInformation();
readerImage->UpdateOutputInformation(); readerImage->UpdateOutputInformation();
...@@ -53,7 +53,9 @@ int otbComputeGainLutFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) ...@@ -53,7 +53,9 @@ int otbComputeGainLutFilter(int itkNotUsed(argc), char * itkNotUsed(argv) [])
computeGainLut->SetMin(0); computeGainLut->SetMin(0);
computeGainLut->SetMax(255); computeGainLut->SetMax(255);
auto size = readerImage->GetOutput()->GetLargestPossibleRegion().GetSize(); auto size = readerImage->GetOutput()->GetLargestPossibleRegion().GetSize();
auto nbPix = size[0]*size[1]; size[0] /= 4;
size[1] /= 4;
auto nbPix = size[0]*size[1] ;
computeGainLut->SetNbPixel( nbPix ); computeGainLut->SetNbPixel( nbPix );
writer->SetInput( computeGainLut->GetOutput() ); writer->SetInput( computeGainLut->GetOutput() );
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "otbVectorImage.h" #include "otbVectorImage.h"
#include "otbComputeHistoFilter.h" #include "otbComputeHistoFilter.h"
int otbComputeHistoFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) int otbComputeHistoFilter(int itkNotUsed(argc), char * argv [])
{ {
typedef int InputPixelType; typedef int InputPixelType;
typedef int OutputPixelType; typedef int OutputPixelType;
...@@ -38,8 +38,8 @@ int otbComputeHistoFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) ...@@ -38,8 +38,8 @@ int otbComputeHistoFilter(int itkNotUsed(argc), char * itkNotUsed(argv) [])
typedef otb::ImageFileWriter< HistoImageType > WriterType; typedef otb::ImageFileWriter< HistoImageType > WriterType;
ReaderType::Pointer reader ( ReaderType::New() ); ReaderType::Pointer reader ( ReaderType::New() );
WriterType::Pointer writer ( WriterType::New() ); WriterType::Pointer writer ( WriterType::New() );
reader->SetFileName( "/home/antoine/dev/my_data/test/smallinput.tif" ); reader->SetFileName( argv[1] );
writer->SetFileName( "/home/antoine/dev/my_data/test/small_glob_histo.tif" ); writer->SetFileName( argv[2] );
reader->UpdateOutputInformation(); reader->UpdateOutputInformation();
FilterType::Pointer computeHisto ( FilterType::New() ); FilterType::Pointer computeHisto ( FilterType::New() );
...@@ -48,14 +48,12 @@ int otbComputeHistoFilter(int itkNotUsed(argc), char * itkNotUsed(argv) []) ...@@ -48,14 +48,12 @@ int otbComputeHistoFilter(int itkNotUsed(argc), char * itkNotUsed(argv) [])
computeHisto->SetMin(0); computeHisto->SetMin(0);
computeHisto->SetMax(255); computeHisto->SetMax(255);
computeHisto->SetNbBin(256); computeHisto->SetNbBin(256);
// computeHisto->SetThreshol(256);
auto size = reader->GetOutput()->GetLargestPossibleRegion().GetSize(); auto size = reader->GetOutput()->GetLargestPossibleRegion().GetSize();
computeHisto->SetThumbSize(size); size[0] /= 4;
size[1] /= 4;
computeHisto->SetThumbSize( size );
writer->SetInput( computeHisto->GetHistoOutput() ); writer->SetInput( computeHisto->GetHistoOutput() );
writer->Update(); writer->Update();
auto index = computeHisto->GetHistoOutput()->GetLargestPossibleRegion().GetIndex();
std::cout << computeHisto->GetHistoOutput()->GetPixel(index) << std::endl;
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
\ No newline at end of file
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "itkImageRegionIterator.h" #include "itkImageRegionIterator.h"
#include "otbCLHistogramEqualizationFilter.h" #include "otbCLHistogramEqualizationFilter.h"
int otbHelperCLAHE(int itkNotUsed(argc), char * itkNotUsed(argv) []) int otbHelperCLAHE(int itkNotUsed(argc), char * argv [])
{ {
typedef int InputPixelType; typedef int InputPixelType;
const unsigned int Dimension = 2; const unsigned int Dimension = 2;
...@@ -35,8 +35,8 @@ int otbHelperCLAHE(int itkNotUsed(argc), char * itkNotUsed(argv) []) ...@@ -35,8 +35,8 @@ int otbHelperCLAHE(int itkNotUsed(argc), char * itkNotUsed(argv) [])
typedef otb::ImageFileWriter< InputImageType > WriterType; typedef otb::ImageFileWriter< InputImageType > WriterType;
ReaderType::Pointer reader ( ReaderType::New() ); ReaderType::Pointer reader ( ReaderType::New() );
WriterType::Pointer writer ( WriterType::New() ); WriterType::Pointer writer ( WriterType::New() );
reader->SetFileName( "/home/antoine/dev/my_data/smallinputmono.tif" ); reader->SetFileName( argv[1] );
writer->SetFileName( "/home/antoine/dev/my_data/smallnewtest.tif" ); writer->SetFileName( argv[2] );
reader->UpdateOutputInformation(); reader->UpdateOutputInformation();
typedef otb::VectorImage< int , 2 > HistogramType; typedef otb::VectorImage< int , 2 > HistogramType;
...@@ -62,8 +62,7 @@ int otbHelperCLAHE(int itkNotUsed(argc), char * itkNotUsed(argv) []) ...@@ -62,8 +62,7 @@ int otbHelperCLAHE(int itkNotUsed(argc), char * itkNotUsed(argv) [])
BufferFilter::Pointer buffer( BufferFilter::New() ); BufferFilter::Pointer buffer( BufferFilter::New() );
StreamingImageFilter::Pointer streamFilter( StreamingImageFilter::New() ); StreamingImageFilter::Pointer streamFilter( StreamingImageFilter::New() );
InputImageType::SizeType size; InputImageType::SizeType size;
size[0] = reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0]; size = reader->GetOutput()->GetLargestPossibleRegion().GetSize();
size[1] = reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1];
// histoEqualize->SetThreshold(100); // histoEqualize->SetThreshold(100);
histoFilter->SetInput( reader->GetOutput() ); histoFilter->SetInput( reader->GetOutput() );
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment