ITK/Examples/Smoothing/RGBMedianImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Created page with "This examples creates a subclass of RGBPixel that overrides the operator <= method. The operator compares luminances of pixels. ==RGBMedianImageFilter.cxx== <source lang="cpp"> #...")
 
(Deprecated content that is moved to sphinx)
 
(3 intermediate revisions by one other user not shown)
Line 1: Line 1:
This examples creates a subclass of RGBPixel that overrides the operator <= method. The operator compares luminances of pixels.
{{warning|1=The media wiki content on this page is no longer maintained.  The examples presented on the https://itk.org/Wiki/*  pages likely require ITK version 4.13 or earlier releases.   In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.
==RGBMedianImageFilter.cxx==
}}
<source lang="cpp">
#include "itkMedianImageFilter.h"


#include "itkImage.h"
[https://itk.org/ITKExamples[ITK Sphinx Examples]]
#include "itkImageFileReader.h"
#include "itkSubtractImageFilter.h"
#include "itkRGBPixel.h"
#include "itkCastImageFilter.h"
 
#include "itksys/SystemTools.hxx"
 
#include <sstream>
 
#include "QuickView.h"
 
namespace itk
{
/** \class myRGBPixel
* \brief Extends RGBPixel with operator <=
*
* This class overrides the <= operator to use Luminance as a sorting value.
*/
template< typename TComponent = unsigned short >
class myRGBPixel : public RGBPixel<TComponent>
{
public:
  typedef myRGBPixel          Self;
  typedef RGBPixel<TComponent> Superclass;
  using RGBPixel<TComponent>::operator=;
 
  bool operator<=(const Self & r) const
  {
    if (this->GetLuminance() <= r.GetLuminance())
      {
      return true;
      }
    else
      {
      return false;
      }
  }
};
}
 
int main(int argc, char * argv[])
{
  // Verify command line arguments
  if( argc < 2 )
    {
    std::cerr << "Usage: " << std::endl;
    std::cerr << argv[0] << " InputImageFile [radius]" << std::endl;
    return EXIT_FAILURE;
    }
  std::string inputFilename = argv[1];
 
  // Setup types
  typedef itk::myRGBPixel<unsigned char>                      PixelType;
  typedef itk::Image<PixelType, 2 >                          ImageType;
  typedef itk::RGBPixel<unsigned char>                        RGBPixelType;
  typedef itk::Image<RGBPixelType, 2 >                        RGBImageType;
 
  typedef itk::ImageFileReader<ImageType>                    ReaderType;
  typedef itk::MedianImageFilter<ImageType, ImageType >      FilterType;
  typedef itk::SubtractImageFilter<RGBImageType>              SubtractType;
  typedef itk::CastImageFilter<ImageType, RGBImageType>      CastType;
 
  // Create and setup a reader
  ReaderType::Pointer reader = ReaderType::New();
  reader->SetFileName( inputFilename );
 
  // Create and setup a median filter
  FilterType::Pointer medianFilter = FilterType::New();
  FilterType::InputSizeType radius;
  radius.Fill(2);
  if (argc > 2)
    {
    radius.Fill(atoi(argv[2]));
    }
 
  medianFilter->SetRadius(radius);
  medianFilter->SetInput(reader->GetOutput());
 
  // Cast the custom myRBGPixel's to RGBPixel's
  CastType::Pointer castReader = CastType::New();
  castReader->SetInput(reader->GetOutput());
 
  CastType::Pointer castMedian = CastType::New();
  castMedian->SetInput(medianFilter->GetOutput());
 
  SubtractType::Pointer diff = SubtractType::New();
  diff->SetInput1(castMedian->GetOutput());
  diff->SetInput2(castReader->GetOutput());
 
  QuickView viewer;
  viewer.AddRGBImage(
    castReader->GetOutput(),
    true,
    itksys::SystemTools::GetFilenameName(inputFilename)); 
 
  std::stringstream desc;
  desc << "MedianImageFilter, radius = " << radius;
  viewer.AddRGBImage(
    castMedian->GetOutput(),
    true,
    desc.str()); 
 
  std::stringstream desc2;
  desc2 << "Original - Median";
  viewer.AddRGBImage(
    diff->GetOutput(),
    true,
    desc2.str()); 
 
  viewer.Visualize();
 
  return EXIT_SUCCESS;
}
</source>
{{ITKVTKCMakeLists|RGBMedianImageFilter|}}

Latest revision as of 16:24, 31 May 2019

Warning: The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/* pages likely require ITK version 4.13 or earlier releases. In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.

[ITK Sphinx Examples]