[Insight-users] [Insight-developers] ImageAdaptors and RGB images

Richard Beare richard.beare at gmail.com
Mon Feb 21 19:10:12 EST 2011


Sorry - badly posted question:

Here is a more complete version of the code and the errors (I've only
included errors from the first adaptor):

template <int dim, class pixtype>
void extractProfile(const CmdLineType & CmdLineObj)
{
  typedef typename itk::Image<pixtype, dim> RawImType;
  typedef typename itk::Image<unsigned char, dim> MaskImType;
  typedef typename itk::Image<short, dim> SignedImType;
  typedef itk::RGBPixel<pixtype>   RGBPixelType;
  typedef itk::Image<RGBPixelType, dim>    RGBImageType;

  typename RGBImageType::Pointer raw = readIm<RGBImageType>(CmdLineObj.InputIm);

  // break into red, green and blue components so that we can get rid
  // of the overlays
  typedef typename itk::RedPixelAccessor<RGBPixelType> RedAccessorType;
  typedef typename itk::GreenPixelAccessor<RGBPixelType> GreenAccessorType;
  typedef typename itk::BluePixelAccessor<RGBPixelType> BlueAccessorType;

  typedef typename itk::ImageAdaptor<RGBImageType, RedAccessorType>
RedAdaptorType;
  typedef typename itk::ImageAdaptor<RGBImageType, GreenAccessorType>
GreenAdaptorType;
  typedef typename itk::ImageAdaptor<RGBImageType, BlueAccessorType>
BlueAdaptorType;

  typename RedAdaptorType::Pointer RedAdaptor = RedAdaptorType::New();
  typename GreenAdaptorType::Pointer GreenAdaptor = GreenAdaptorType::New();
  typename BlueAdaptorType::Pointer BlueAdaptor = BlueAdaptorType::New();


  RedAdaptor->SetImage(raw);
  GreenAdaptor->SetImage(raw);
  BlueAdaptor->SetImage(raw);

  // blue - red selects cyan
  // red - blue selects yellow

  itk::Instance< itk::SubtractImageFilter< BlueAdaptorType,
RedAdaptorType, SignedImType> > Difference;
  Difference->SetInput(BlueAdaptor);
  Difference->SetInput2(RedAdaptor);
}

int main(int argc, char * argv[])
{

  const int dim = 2;
  CmdLineType CmdLineObj;
  ParseCmdLine(argc, argv, CmdLineObj);


  extractProfile<dim, unsigned char>(CmdLineObj);

}



[ 50%] Building CXX object CMakeFiles/procDiameter.dir/procDiameter.o
In file included from
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/Common/itkMath.h:29,
                 from
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/Common/itkIndex.h:25,
                 from
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/Common/itkImageRegion.h:26,
                 from
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/IO/itkImageIORegion.h:24,
                 from
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/IO/itkImageIOBase.h:24,
                 from
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/IO/itkImageFileWriter.h:22,
                 from
/home/richardb/Projects/MCRI/cardiacflow/trunk/Ultrasound/ioutils.h:5,
                 from
/home/richardb/Projects/MCRI/cardiacflow/trunk/Ultrasound/procDiameter.cxx:3:
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/Common/itkConceptChecking.h:
In member function ‘void itk::Concept::AdditiveOperators<T1, T2,
T3>::Constraints::constraints() [with T1 = itk::RGBPixel<unsigned
char>, T2 = itk::RGBPixel<unsigned char>, T3 = short int]’:
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/Common/itkConceptChecking.h:317:
  instantiated from
‘itk::Concept::AdditiveOperators<itk::RGBPixel<unsigned char>,
itk::RGBPixel<unsigned char>, short int>’
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/BasicFilters/itkSubtractImageFilter.h:87:
  instantiated from
‘itk::SubtractImageFilter<itk::ImageAdaptor<itk::Image<itk::RGBPixel<unsigned
char>, 2u>, itk::BluePixelAccessor<itk::RGBPixel<unsigned char> > >,
itk::ImageAdaptor<itk::Image<itk::RGBPixel<unsigned char>, 2u>,
itk::RedPixelAccessor<itk::RGBPixel<unsigned char> > >,
itk::Image<short int, 2u> >’
/home/richardb/Projects/MCRI/cardiacflow/trunk/Ultrasound/procDiameter.cxx:30:
  instantiated from
‘itk::Instance<itk::SubtractImageFilter<itk::ImageAdaptor<itk::Image<itk::RGBPixel<unsigned
char>, 2u>, itk::BluePixelAccessor<itk::RGBPixel<unsigned char> > >,
itk::ImageAdaptor<itk::Image<itk::RGBPixel<unsigned char>, 2u>,
itk::RedPixelAccessor<itk::RGBPixel<unsigned char> > >,
itk::Image<short int, 2u> > >’
/home/richardb/Projects/MCRI/cardiacflow/trunk/Ultrasound/procDiameter.cxx:112:
  instantiated from ‘void extractProfile(const CmdLineType&) [with int
dim = 2, pixtype = unsigned char]’
/home/richardb/Projects/MCRI/cardiacflow/trunk/Ultrasound/procDiameter.cxx:125:
  instantiated from here
/usr/local/ITK/ITK-3.20_staticB/include/InsightToolkit/Common/itkConceptChecking.h:299:
error: invalid static_cast from type ‘itk::RGBPixel<unsigned char>’ to
type ‘short int’
On Tue, Feb 22, 2011 at 11:02 AM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
> Hi Richard,
>
> 1) How is the type "pixtype" defined ?
>
> 2) What exactly are the error messages that you get from the concept check ?
>     please post them to the list.
>
>
>  Thanks
>
>
>       Luis
>
>
> -------------------------------
> On Mon, Feb 21, 2011 at 6:08 PM, Richard Beare <richard.beare at gmail.com> wrote:
>> Hi,
>> I'm trying to take a difference between channels of an RGB image. The
>> color accessor functors seem the appropriate way of doing it, but I'm
>> running into problems with concept checks in the subtract filter.
>>
>> Am I making a stupid error with this code? Should I be using an
>> alternative approach?
>>
>> Thanks
>>
>>  typedef typename itk::Image<pixtype, dim> RawImType;
>>  typedef typename itk::Image<unsigned char, dim> MaskImType;
>>  typedef typename itk::Image<short, dim> SignedImType;
>>  typedef itk::RGBPixel<pixtype>   RGBPixelType;
>>  typedef itk::Image<RGBPixelType, dim>    RGBImageType;
>>
>>  typename RGBImageType::Pointer raw = readIm<RGBImageType>(CmdLineObj.InputIm);
>>
>>
>>  typedef typename itk::RedPixelAccessor<RGBPixelType> RedAccessorType;
>>  typedef typename itk::GreenPixelAccessor<RGBPixelType> GreenAccessorType;
>>  typedef typename itk::BluePixelAccessor<RGBPixelType> BlueAccessorType;
>>
>>  typedef typename itk::ImageAdaptor<RGBImageType, RedAccessorType>
>> RedAdaptorType;
>>  typedef typename itk::ImageAdaptor<RGBImageType, GreenAccessorType>
>> GreenAdaptorType;
>>  typedef typename itk::ImageAdaptor<RGBImageType, BlueAccessorType>
>> BlueAdaptorType;
>>
>>  typename RedAdaptorType::Pointer RedAdaptor = RedAdaptorType::New();
>>  typename GreenAdaptorType::Pointer GreenAdaptor = GreenAdaptorType::New();
>>  typename BlueAdaptorType::Pointer BlueAdaptor = BlueAdaptorType::New();
>>
>>
>>  RedAdaptor->SetImage(raw);
>>  GreenAdaptor->SetImage(raw);
>>  BlueAdaptor->SetImage(raw);
>>
>>  // blue - red selects cyan
>>  // red - blue selects yellow
>>
>>  itk::Instance< itk::SubtractImageFilter< BlueAdaptorType,
>> RedAdaptorType, SignedImType> > Difference;
>>  Difference->SetInput(BlueAdaptor);
>>  Difference->SetInput2(RedAdaptor);
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>>
>> Kitware offers ITK Training Courses, for more information visit:
>> http://kitware.com/products/protraining.html
>>
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-developers
>>
>


More information about the Insight-users mailing list