5858#include " itkImageFileWriter.h"
5959#include " itkRescaleIntensityImageFilter.h"
6060#include " itkImageRegionConstIterator.h"
61-
61+ namespace
62+ {
6263int
63- main (int argc, char * argv[])
64+ ExampleMain (int argc, const char * const argv[])
6465{
6566
6667 constexpr unsigned int Dimension = 2 ;
@@ -80,74 +81,90 @@ main(int argc, char * argv[])
8081 return EXIT_FAILURE;
8182 }
8283
83- try
84- {
85- using ImageType = itk::Image<unsigned char , Dimension>;
86- using BayesianInitializerType =
87- itk::BayesianClassifierInitializationImageFilter<ImageType>;
88- auto bayesianInitializer = BayesianInitializerType::New ();
8984
90- auto input = itk::ReadImage<ImageType>(argv[1 ]);
85+ using ImageType = itk::Image<unsigned char , Dimension>;
86+ using BayesianInitializerType =
87+ itk::BayesianClassifierInitializationImageFilter<ImageType>;
88+ auto bayesianInitializer = BayesianInitializerType::New ();
9189
92- bayesianInitializer->SetInput (input);
93- bayesianInitializer->SetNumberOfClasses (std::stoi (argv[3 ]));
90+ auto input = itk::ReadImage<ImageType>(argv[1 ]);
9491
95- // TODO add test where we specify membership functions
92+ bayesianInitializer->SetInput (input);
93+ bayesianInitializer->SetNumberOfClasses (std::stoi (argv[3 ]));
9694
97- bayesianInitializer-> Update ();
95+ // TODO add test where we specify membership functions
9896
99- itk::WriteImage ( bayesianInitializer->GetOutput (), argv[ 2 ] );
97+ bayesianInitializer->Update ( );
10098
101- if (argv[4 ] && argv[5 ])
102- {
103- using MembershipImageType = BayesianInitializerType::OutputImageType;
104- using ExtractedComponentImageType =
105- itk::Image<MembershipImageType::InternalPixelType, Dimension>;
106- auto extractedComponentImage = ExtractedComponentImageType::New ();
107- extractedComponentImage->CopyInformation (
108- bayesianInitializer->GetOutput ());
109- extractedComponentImage->SetBufferedRegion (
110- bayesianInitializer->GetOutput ()->GetBufferedRegion ());
111- extractedComponentImage->SetRequestedRegion (
112- bayesianInitializer->GetOutput ()->GetRequestedRegion ());
113- extractedComponentImage->Allocate ();
114- using ConstIteratorType =
115- itk::ImageRegionConstIterator<MembershipImageType>;
116- using IteratorType =
117- itk::ImageRegionIterator<ExtractedComponentImageType>;
118- ConstIteratorType cit (
119- bayesianInitializer->GetOutput (),
120- bayesianInitializer->GetOutput ()->GetBufferedRegion ());
121- IteratorType it (extractedComponentImage,
122- extractedComponentImage->GetLargestPossibleRegion ());
99+ itk::WriteImage (bayesianInitializer->GetOutput (), argv[2 ]);
123100
124- const unsigned int componentToExtract = std::stoi (argv[4 ]);
125- cit.GoToBegin ();
126- it.GoToBegin ();
127- while (!cit.IsAtEnd ())
128- {
129- it.Set (cit.Get ()[componentToExtract]);
130- ++it;
131- ++cit;
132- }
101+ if (argv[4 ] && argv[5 ])
102+ {
103+ using MembershipImageType = BayesianInitializerType::OutputImageType;
104+ using ExtractedComponentImageType =
105+ itk::Image<MembershipImageType::InternalPixelType, Dimension>;
106+ auto extractedComponentImage = ExtractedComponentImageType::New ();
107+ extractedComponentImage->CopyInformation (
108+ bayesianInitializer->GetOutput ());
109+ extractedComponentImage->SetBufferedRegion (
110+ bayesianInitializer->GetOutput ()->GetBufferedRegion ());
111+ extractedComponentImage->SetRequestedRegion (
112+ bayesianInitializer->GetOutput ()->GetRequestedRegion ());
113+ extractedComponentImage->Allocate ();
114+ using ConstIteratorType =
115+ itk::ImageRegionConstIterator<MembershipImageType>;
116+ using IteratorType =
117+ itk::ImageRegionIterator<ExtractedComponentImageType>;
118+ ConstIteratorType cit (
119+ bayesianInitializer->GetOutput (),
120+ bayesianInitializer->GetOutput ()->GetBufferedRegion ());
121+ IteratorType it (extractedComponentImage,
122+ extractedComponentImage->GetLargestPossibleRegion ());
133123
134- // Write out the rescaled extracted component
135- using OutputImageType = itk::Image<unsigned char , Dimension>;
136- using RescalerType =
137- itk::RescaleIntensityImageFilter<ExtractedComponentImageType,
138- OutputImageType>;
139- auto rescaler = RescalerType::New ();
140- rescaler->SetInput (extractedComponentImage);
141- rescaler->SetOutputMinimum (0 );
142- rescaler->SetOutputMaximum (255 );
143- itk::WriteImage (rescaler->GetOutput (), argv[5 ]);
124+ const unsigned int componentToExtract = std::stoi (argv[4 ]);
125+ cit.GoToBegin ();
126+ it.GoToBegin ();
127+ while (!cit.IsAtEnd ())
128+ {
129+ it.Set (cit.Get ()[componentToExtract]);
130+ ++it;
131+ ++cit;
144132 }
145- }
146- catch (const itk::ExceptionObject & excp)
147- {
148- std::cerr << " ITK exception caught:\n " << excp << std::endl;
149- return EXIT_FAILURE;
133+
134+ // Write out the rescaled extracted component
135+ using OutputImageType = itk::Image<unsigned char , Dimension>;
136+ using RescalerType =
137+ itk::RescaleIntensityImageFilter<ExtractedComponentImageType,
138+ OutputImageType>;
139+ auto rescaler = RescalerType::New ();
140+ rescaler->SetInput (extractedComponentImage);
141+ rescaler->SetOutputMinimum (0 );
142+ rescaler->SetOutputMaximum (255 );
143+ itk::WriteImage (rescaler->GetOutput (), argv[5 ]);
150144 }
151145
152146 return EXIT_SUCCESS;
153147}
148+ } // namespace
149+
150+ int
151+ main (int argc, char * argv[])
152+ {
153+ try
154+ {
155+ return ExampleMain (argc, argv);
156+ }
157+ catch (const itk::ExceptionObject & exceptionObject)
158+ {
159+ std::cerr << " ITK exception caught:\n " << exceptionObject << ' \n ' ;
160+ }
161+ catch (const std::exception & stdException)
162+ {
163+ std::cerr << " std exception caught:\n " << stdException.what () << ' \n ' ;
164+ }
165+ catch (...)
166+ {
167+ std::cerr << " Unhandled exception!\n " ;
168+ }
169+ return EXIT_FAILURE;
170+ }
0 commit comments