1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#ifndef MULTICHANNELLUTINTENSITYMAPPINGFILTER_H
#define MULTICHANNELLUTINTENSITYMAPPINGFILTER_H
#include "SNAPCommon.h"
#include "itkRGBAPixel.h"
#include <itkImageToImageFilter.h>
/**
* This filter takes multiple input channels and a common lookup table, and
* generates an image of pixels of a certain vector type, e.g., RGBAPixel.
*/
template<class TInputImage>
class RGBALookupTableIntensityMappingFilter :
public itk::ImageToImageFilter<TInputImage,
itk::Image<itk::RGBAPixel<unsigned char>, 2> >
{
public:
typedef typename itk::RGBAPixel<unsigned char> OutputPixelType;
typedef itk::Image<OutputPixelType, 2> OutputImageType;
typedef RGBALookupTableIntensityMappingFilter<TInputImage> Self;
typedef itk::ImageToImageFilter<TInputImage, OutputImageType> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
typedef TInputImage InputImageType;
typedef typename InputImageType::PixelType InputPixelType;
typedef typename OutputPixelType::ComponentType OutputComponentType;
typedef itk::Image<OutputComponentType, 1> LookupTableType;
typedef typename Superclass::OutputImageRegionType OutputImageRegionType;
itkTypeMacro(RGBALookupTableIntensityMappingFilter, ImageToImageFilter)
itkNewMacro(Self)
/** Set the intensity remapping curve - for contrast adjustment */
void SetLookupTable(LookupTableType *lut);
/** The actual work */
void ThreadedGenerateData(const OutputImageRegionType ®ion,
itk::ThreadIdType threadId);
/** Process a single pixel */
OutputPixelType MapPixel(const InputPixelType &xin0, const InputPixelType &xin1, const InputPixelType &xin2);
protected:
RGBALookupTableIntensityMappingFilter();
virtual ~RGBALookupTableIntensityMappingFilter() {}
SmartPtr<LookupTableType> m_LookupTable;
};
#endif // MULTICHANNELLUTINTENSITYMAPPINGFILTER_H
|