Pixel Division of Two Images#
Synopsis#
Pixel-wise division of two images.
Results#
Code#
C++#
#include "itkDivideImageFilter.h"
#include "itkImage.h"
#include "itkImageFileWriter.h"
using ImageType = itk::Image<unsigned char, 2>;
void
CreateImage1(ImageType::Pointer image);
void
CreateImage2(ImageType::Pointer image);
int
main()
{
auto image1 = ImageType::New();
CreateImage1(image1);
auto image2 = ImageType::New();
CreateImage2(image2);
using DivideImageFilterType = itk::DivideImageFilter<ImageType, ImageType, ImageType>;
auto divideImageFilter = DivideImageFilterType::New();
divideImageFilter->SetInput1(image1);
divideImageFilter->SetInput2(image2);
divideImageFilter->Update();
itk::WriteImage(divideImageFilter->GetOutput(), "test.png");
return EXIT_SUCCESS;
}
void
CreateImage1(ImageType::Pointer image)
{
// Create an image with 2 connected components
ImageType::RegionType region;
ImageType::IndexType start;
start[0] = 0;
start[1] = 0;
ImageType::SizeType size;
unsigned int NumRows = 200;
unsigned int NumCols = 300;
size[0] = NumRows;
size[1] = NumCols;
region.SetSize(size);
region.SetIndex(start);
image->SetRegions(region);
image->Allocate();
// Make a square
for (unsigned int r = 20; r < 80; ++r)
{
for (unsigned int c = 20; c < 80; ++c)
{
ImageType::IndexType pixelIndex;
pixelIndex[0] = r;
pixelIndex[1] = c;
image->SetPixel(pixelIndex, 15);
}
}
}
void
CreateImage2(ImageType::Pointer image)
{
// Create an image with 2 connected components
ImageType::RegionType region;
ImageType::IndexType start;
start[0] = 0;
start[1] = 0;
ImageType::SizeType size;
unsigned int NumRows = 200;
unsigned int NumCols = 300;
size[0] = NumRows;
size[1] = NumCols;
region.SetSize(size);
region.SetIndex(start);
image->SetRegions(region);
image->Allocate();
// Make another square
for (unsigned int r = 40; r < 100; ++r)
{
for (unsigned int c = 40; c < 100; ++c)
{
ImageType::IndexType pixelIndex;
pixelIndex[0] = r;
pixelIndex[1] = c;
image->SetPixel(pixelIndex, 15);
}
}
}
Classes demonstrated#
-
template<typename TInputImage1, typename TInputImage2, typename TOutputImage>
class DivideImageFilter : public itk::BinaryGeneratorImageFilter<TInputImage1, TInputImage2, TOutputImage> Pixel-wise division of two images.
This class is templated over the types of the two input images and the type of the output image. When the divisor is zero, the division result is set to the maximum number that can be represented by default to avoid exception. Numeric conversions (castings) are done by the C++ defaults.
- ITK Sphinx Examples: