Normalize Image¶
Synopsis¶
Normalize an image.
Results¶
![../../../../_images/Yinyang25.png](../../../../_images/Yinyang25.png)
Input Image¶
![../../../../_images/NormalizeImage.png](../../../../_images/NormalizeImage.png)
Input And Output Image With Data¶
Code¶
C++¶
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkNormalizeImageFilter.h"
#include "itkStatisticsImageFilter.h"
#ifdef ENABLE_QUICKVIEW
# include "QuickView.h"
#endif
#include <iomanip>
int
main(int argc, char * argv[])
{
if (argc < 2)
{
std::cerr << "Usage: " << argv[0] << " filename" << std::endl;
return EXIT_FAILURE;
}
using FloatImageType = itk::Image<double, 2>;
using ReaderType = itk::ImageFileReader<FloatImageType>;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(argv[1]);
using NormalizeFilterType = itk::NormalizeImageFilter<FloatImageType, FloatImageType>;
NormalizeFilterType::Pointer normalizeFilter = NormalizeFilterType::New();
normalizeFilter->SetInput(reader->GetOutput());
using StatisticsFilterType = itk::StatisticsImageFilter<FloatImageType>;
StatisticsFilterType::Pointer statistics1 = StatisticsFilterType::New();
statistics1->SetInput(reader->GetOutput());
StatisticsFilterType::Pointer statistics2 = StatisticsFilterType::New();
statistics2->SetInput(normalizeFilter->GetOutput());
#ifdef ENABLE_QUICKVIEW
QuickView viewer;
std::stringstream desc1;
statistics1->Update();
desc1 << itksys::SystemTools::GetFilenameName(argv[1]) << "\nMean: " << statistics1->GetMean()
<< " Variance: " << statistics1->GetVariance();
viewer.AddImage(reader->GetOutput(), true, desc1.str());
std::stringstream desc2;
statistics2->Update();
desc2 << "Normalize"
<< "\nMean: " << std::fixed << std::setprecision(2) << statistics2->GetMean()
<< " Variance: " << statistics2->GetVariance();
viewer.AddImage(normalizeFilter->GetOutput(), true, desc2.str());
viewer.Visualize();
#endif
return EXIT_SUCCESS;
}
Classes demonstrated¶
-
template<typename
TInputImage
, typenameTOutputImage
>
classNormalizeImageFilter
: public itk::ImageToImageFilter<TInputImage, TOutputImage> Normalize an image by setting its mean to zero and variance to one.
NormalizeImageFilter shifts and scales an image so that the pixels in the image have a zero mean and unit variance. This filter uses StatisticsImageFilter to compute the mean and variance of the input and then applies ShiftScaleImageFilter to shift and scale the pixels.
NB: since this filter normalizes the data such that the mean is at 0, and
to
is mapped to -1.0 to 1.0, output image integral types will produce an image that DOES NOT HAVE a unit variance due to 68% of the intensity values being mapped to the real number range of -1.0 to 1.0 and then cast to the output integral value.
- See
NormalizeToConstantImageFilter
- ITK Sphinx Examples: