[Insight-users] OtsuMultipleThresholdImageFilter
David Doria
daviddoria at gmail.com
Fri Apr 8 10:37:32 EDT 2011
On Fri, Apr 8, 2011 at 10:32 AM, john smith <mkitkinsightuser at gmail.com>wrote:
> Hello,
> I have the followin code from itk-manual to run
> OtsuMultipleThresholdImageFilter. What must I type in the command window to
> run the project?
> Thanks in advance
>
> //////////// code//////////////
>
>
> #include "itkOtsuMultipleThresholdsCalculator.h"
>
>
> #include "itkImage.h"
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
> #include "itkScalarImageToHistogramGenerator.h"
> #include "itkBinaryThresholdImageFilter.h"
> #include "itkNumericTraits.h"
>
> #include <stdio.h>
> int main( int argc, char * argv[] )
> {
> if( argc < 5 )
> {
> std::cerr << "Usage: " << argv[0];
> std::cerr << " inputImageFile outputImageFileBase ";
> std::cerr << " outputImageFileExtension numberOfThresholdsToCalculate
> " << std::endl;
> return EXIT_FAILURE;
> }
>
>
> typedef unsigned short InputPixelType;
> typedef unsigned char OutputPixelType;
>
> typedef itk::Image< InputPixelType, 3 > InputImageType;
> typedef itk::Image< OutputPixelType, 3 > OutputImageType;
>
>
> typedef itk::Statistics::ScalarImageToHistogramGenerator<
> InputImageType >
> ScalarImageToHistogramGeneratorType;
>
> typedef ScalarImageToHistogramGeneratorType::HistogramType
> HistogramType;
>
> typedef itk::OtsuMultipleThresholdsCalculator< HistogramType >
> CalculatorType;
>
>
> typedef itk::ImageFileReader< InputImageType > ReaderType;
> typedef itk::ImageFileWriter< OutputImageType > WriterType;
>
>
> typedef itk::BinaryThresholdImageFilter<
> InputImageType, OutputImageType > FilterType;
>
> ScalarImageToHistogramGeneratorType::Pointer
> scalarImageToHistogramGenerator =
> ScalarImageToHistogramGeneratorType::New();
>
> CalculatorType::Pointer calculator = CalculatorType::New();
> FilterType::Pointer filter = FilterType::New();
>
>
> ReaderType::Pointer reader = ReaderType::New();
> WriterType::Pointer writer = WriterType::New();
>
>
> scalarImageToHistogramGenerator->SetNumberOfBins( 128 );
> calculator->SetNumberOfThresholds( atoi( argv[4] ) );
>
> const OutputPixelType outsideValue = 0;
> const OutputPixelType insideValue = 255;
>
> filter->SetOutsideValue( outsideValue );
> filter->SetInsideValue( insideValue );
>
>
> reader->SetFileName( argv[1] );
>
>
> scalarImageToHistogramGenerator->SetInput( reader->GetOutput() );
> calculator->SetInputHistogram(
> scalarImageToHistogramGenerator->GetOutput() );
> filter->SetInput( reader->GetOutput() );
> writer->SetInput( filter->GetOutput() );
>
> try
> {
> reader->Update();
> }
> catch( itk::ExceptionObject & excp )
> {
> std::cerr << "Exception thrown while reading image" << excp <<
> std::endl;
> }
> scalarImageToHistogramGenerator->Compute();
>
> try
> {
> calculator->Update();
> }
> catch( itk::ExceptionObject & excp )
> {
> std::cerr << "Exception thrown " << excp << std::endl;
> }
>
>
> const CalculatorType::OutputType &thresholdVector =
> calculator->GetOutput();
> CalculatorType::OutputType::const_iterator itNum =
> thresholdVector.begin();
>
> std::string outputFileBase = argv[2];
> std::string outputFile;
>
> InputPixelType lowerThreshold = 0;
> InputPixelType upperThreshold;
>
> std::string format = argv[2];
>
> char outputFilename[1000];
> outputFile = outputFileBase + "%03d.";
> outputFile += argv[3]; // filename extension
>
>
> for(; itNum < thresholdVector.end(); itNum++)
> {
> std::cout << "OtsuThreshold["
> << (int)(itNum - thresholdVector.begin())
> << "] = "
> <<
> static_cast<itk::NumericTraits<CalculatorType::MeasurementType>::PrintType>(*itNum)
>
> << std::endl;
>
>
> upperThreshold = static_cast<InputPixelType>(*itNum);
>
> filter->SetLowerThreshold( lowerThreshold );
> filter->SetUpperThreshold( upperThreshold );
>
> lowerThreshold = upperThreshold;
>
> sprintf (outputFilename, outputFile.c_str(), (itNum -
> thresholdVector.begin()));
> writer->SetFileName( outputFilename );
>
>
> try
> {
> writer->Update();
> }
> catch( itk::ExceptionObject & excp )
> {
> std::cerr << "Exception thrown " << excp << std::endl;
> }
>
> }
>
> upperThreshold = itk::NumericTraits<InputPixelType>::max();
> filter->SetLowerThreshold( lowerThreshold );
> filter->SetUpperThreshold( upperThreshold );
>
> sprintf (outputFilename, outputFile.c_str(), (thresholdVector.size() ));
> writer->SetFileName( outputFilename );
>
> try
> {
> writer->Update();
> }
> catch( itk::ExceptionObject & excp )
> {
> std::cerr << "Exception thrown " << excp << std::endl;
> }
>
>
> return EXIT_SUCCESS;
> }
>
>
At the top of the example there is an explanation:
// INPUTS: {BrainProtonDensitySlice.png}
// OtsuMultipleThresholdsOutput png 4
I would guess that this would translate to :
./ThisProgram BrainProtonDensitySlice.png OtsuMultipleThresholdsOutput png
4
I'm not sure why INPUTS{} is in brackets, etc.
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20110408/441d57d4/attachment.htm>
More information about the Insight-users
mailing list