[Insight-users] RGB to grayscale

Luis Ibanez luis.ibanez@kitware.com
Mon May 10 01:21:30 EDT 2004


This is a multi-part message in MIME format.
--------------070108060505000406010906
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit


Hi Michael,


The most efficient way is to use the new filter:

         itk::RGBToLuminanceImageFilter

Simply instantiate an input image using the class
RGBPixel<> as pixel type.

If you want to trade memory for computation time
you could also use the RGBToLuminanceImageAdaptor.


You will find a test for this new filter and image
adaptor under:


  Insight/Testing/Code/BasicFilters
     itkRGBToLuminanceImageFilterAndAdaptorTest.cxx


Note that you will have to update your CVS checkout
in order to get these new filter and adaptor.

The RGB to Luminance filter is attached to this email.


Please let us know if you have further questions,


    Thanks


      Luis



------------------------
Michael Hawrylycz wrote:

>  Hi,
> 
>   What is the most efficient way to convert an rgb image to grayscale ?
> 
> Thanks,
> 
> Mike
> 
> 
> Mike Hawrylycz, Ph.D.
> Director, Informatics
> Allen Institute of Brain Science
> mikeh@alleninstitute.org
> (206) 548-7011
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users@itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 
----------------------------------------------------------



--------------070108060505000406010906
Content-Type: text/plain;
 name="itkRGBToLuminanceImageFilter.h"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="itkRGBToLuminanceImageFilter.h"

/*=========================================================================

  Program:   Insight Segmentation & Registration Toolkit
  Module:    $RCSfile: itkRGBToLuminanceImageFilter.h,v $
  Language:  C++
  Date:      $Date: 2004/05/10 00:16:11 $
  Version:   $Revision: 1.1 $

  Copyright (c) Insight Software Consortium. All rights reserved.
  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even 
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef __itkRGBToLuminanceImageFilter_h
#define __itkRGBToLuminanceImageFilter_h

#include "itkUnaryFunctorImageFilter.h"

namespace itk
{
  
/** \class RGBToLuminanceImageFilter
 * \brief Converts an RGB image into a grayscale image.
 * 
 * This filters converts an RGB image into a Luminance on by computing
 * pixel-wise a linear combination on the Red, Green and Blue channels. The
 * pixel type of the input image must have a GetLuminance() method. This is the
 * case of the itk::RGBPixel class.
 *
 * \ingroup IntensityImageFilters  Multithreaded
 */
namespace Function {  
  
template< class TInput, class TOutput>
class RGBToLuminance
{
public:
  typedef typename TInput::ComponentType      ComponentType;
  typedef typename itk::NumericTraits< ComponentType >::RealType  RealType;

  RGBToLuminance() {}
  ~RGBToLuminance() {}
  inline TOutput operator()( const TInput & A )
  { return static_cast<TOutput>( A.GetLuminance() ); }
}; 
}

template <class TInputImage, class TOutputImage>
class ITK_EXPORT RGBToLuminanceImageFilter :
    public
UnaryFunctorImageFilter<TInputImage,TOutputImage, 
                        Function::RGBToLuminance< 
  typename TInputImage::PixelType, 
  typename TOutputImage::PixelType>   >
{
public:
  /** Standard class typedefs. */
  typedef RGBToLuminanceImageFilter  Self;
  typedef UnaryFunctorImageFilter<TInputImage,TOutputImage, 
                                  Function::RGBToLuminance< typename TInputImage::PixelType, 
                                                 typename TOutputImage::PixelType> >  Superclass;
  typedef SmartPointer<Self>   Pointer;
  typedef SmartPointer<const Self>  ConstPointer;

  /** Method for creation through the object factory. */
  itkNewMacro(Self);
  
protected:
  RGBToLuminanceImageFilter() {}
  virtual ~RGBToLuminanceImageFilter() {}

private:
  RGBToLuminanceImageFilter(const Self&); //purposely not implemented
  void operator=(const Self&); //purposely not implemented

};

} // end namespace itk


#endif

--------------070108060505000406010906--





More information about the Insight-users mailing list