[ITK Community] Bug in DefaultVectorPixelAccessor
Jan Ehrhardt
ehrhardt at imi.uni-luebeck.de
Tue Mar 11 08:34:42 EDT 2014
Hi Matt,
yes, I currently use the ITK iterators, but I have the following problem.
Standard code looks like:
itk::ImageRegionIterator<ImageType1> it( radius, myImage, region );
itk::ImageRegionIterator<ImageType2> featureIt1( radius, featureImage1,
region );
itk::ImageRegionIterator<ImageType3> featureIt2( radius, featureImage2,
region );
it.GotoBegin();
featureIt1.GotoBegin();
featureIt2.GotoBegin();
while(!it.IsAtEnd())
{
// do some complicated processing stuff with or without feature1
and/or feature2
++it;
++featureIt1;
++featureIt2;
}
I only know at runtime, whether featureImage1 and/or featureImage2 are
available. If
featureImage1 or featureImage2 is NULL, a segmentation fault occurs.
Therefore, I have currently implemented:
itk::ConstNeighborhoodIterator<ImageType1> it( radius, myImage, region );
it.GotoBegin();
while(!it.IsAtEnd())
{
currentIndex=it.GetIndex();
if( featureImage1.IsNotNull())
{
// use featureImage1->GetPixel(currentIndex) to process feature 1
}
if( featureImage2.IsNotNull())
{
// use featureImage2->GetPixel(currentIndex) to process feature 2
}
// do some other stuff
++it;
}
The Image::GetPixel() method is quite time-consuming and therefore I
look for a more efficient method
to implement this code (without writing four different versions).
Any suggestions?
Best regards,
Jan
On 03/11/2014 06:12 AM, Matt McCormick wrote:
> Hi Jan,
>
> To iterator through an Image or VectorImage, use the Iterators as
> described in the Software Guide [1]
>
> HTH,
> Matt
>
> [1] http://itk.org/ItkSoftwareGuide.pdf
>
>
> On Thu, Mar 6, 2014 at 8:23 AM, Jan Ehrhardt
> <ehrhardt at imi.uni-luebeck.de <mailto:ehrhardt at imi.uni-luebeck.de>> wrote:
>
> Hi folks,
>
> I want to iterate through a vector image without an iterator. My
> approach was:
>
> MultiChannelImageType::AccessorType accessor =
> pImage->GetPixelAccessor();
> MultiChannelImageType::InternalPixelType* pBuffer =
> pImage->GetBufferPointer();
>
> for( OffsetValueType i = from; i < to; ++i )
> {
> vecPixel = accessor.Get(*pBuffer, i);
> }
>
> but the results are not correct (see bug(?) below). If the bug(?)
> in DefaultVectorPixelAccessor is corrected ( m_OffsetMultiplier =
> l ) the behaviour of standard itk iterators change. I assume, I
> don't understand the parameters of
> DefaultVectorPixelAccessor::Get() correctly.
> How can I use the DefaultVectorPixelAccessor correctly?
>
> best,
> jan
>
>
> On 03/06/2014 12:25 PM, Jan Ehrhardt wrote:
>
> Hi folks,
>
> there is a bug in DefaultVectorPixelAccessor (ITK 4.4.0):
>
> void SetVectorLength(VectorLengthType l)
> {
> m_VectorLength = l;
> m_OffsetMultiplier = ( l - 1 );
> }
>
> DefaultVectorPixelAccessor(VectorLengthType l)
> {
> m_VectorLength = l;
> m_OffsetMultiplier = l - 1;
> }
>
> OffsetMultiplier should be m_OffsetMultiplier = l;
>
> Best regards,
> Jan
>
>
> _______________________________________________
> Community mailing list
> Community at itk.org <mailto:Community at itk.org>
> http://public.kitware.com/cgi-bin/mailman/listinfo/community
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20140311/bfdd373c/attachment-0002.html>
More information about the Community
mailing list