Valued Regional Maxima Image#
Synopsis#
Valued regional maximal of an image.
Results#
Code#
C++#
#include "itkImage.h"
#include "itkImageFileWriter.h"
#include "itkValuedRegionalMaximaImageFilter.h"
using ImageType = itk::Image<unsigned char, 2>;
static void
CreateImage(ImageType::Pointer image);
int
main()
{
auto image = ImageType::New();
CreateImage(image);
using ValuedRegionalMaximaImageFilter = itk::ValuedRegionalMaximaImageFilter<ImageType, ImageType>;
auto filter = ValuedRegionalMaximaImageFilter::New();
filter->SetInput(image);
itk::WriteImage(image, "intensityblobs.png");
itk::WriteImage(filter->GetOutput(), "maximal.png");
return EXIT_SUCCESS;
}
void
CreateImage(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] = NumCols;
size[1] = NumRows;
region.SetSize(size);
region.SetIndex(start);
image->SetRegions(region);
image->Allocate();
// Make two intensity blobs
for (unsigned int r = 0; r < NumRows; ++r)
{
for (unsigned int c = 0; c < NumCols; ++c)
{
ImageType::IndexType pixelIndex;
pixelIndex[0] = c;
pixelIndex[1] = r;
double c1 = c - 100.0;
double c2 = c - 200.0;
double rr = r - 100.0;
double v1 = 200.0 - std::sqrt(rr * rr + c1 * c1);
double v2 = 150.0 - std::sqrt(rr * rr + c2 * c2);
if (v1 > 190.0)
v1 = 190.0;
if (v2 > 140.0)
v2 = 140.0;
double maxv = v1;
if (maxv < v2)
maxv = v2;
double val = maxv;
if (val < 0.0)
val = 0.0;
if (val > 255.0)
val = 255.0;
if (c < 5)
val = 255.0;
image->SetPixel(pixelIndex, val);
}
}
}
Classes demonstrated#
-
template<typename TInputImage, typename TOutputImage>
class ValuedRegionalMaximaImageFilter : public itk::ValuedRegionalExtremaImageFilter<TInputImage, TOutputImage, std::greater<TInputImage::PixelType>, std::greater<TOutputImage::PixelType>> Transforms the image so that any pixel that is not a regional maxima is set to the minimum value for the pixel type. Pixels that are regional maxima retain their value.
Regional maxima are flat zones surrounded by pixels of lower value. A completely flat image will be marked as a regional maxima by this filter.
This code was contributed in the Insight Journal paper: “Finding regional extrema - methods and performance” by Beare R., Lehmann G. https://www.insight-journal.org/browse/publication/65
- Author
Richard Beare. Department of Medicine, Monash University, Melbourne, Australia.
- See
ValuedRegionalMinimaImageFilter
- See
ValuedRegionalExtremaImageFilter
- See
HMinimaImageFilter
- ITK Sphinx Examples: