[Insight-users] what is wrong with this code ? : exporting itkImage
Patrik Brynolfsson
patrik.brynolfsson at gmail.com
Tue Jun 23 03:27:51 EDT 2009
This code works for me:
const mwSize* dimsFix = mxGetDimensions(prhs[0]);
mxArray* mvar =
mxCreateNumericArray(Dimension,dimsFix,mxSINGLE_CLASS,mxREAL);
float* data = (float*)mxGetData(mvar);
typedef itk::ImageRegionConstIterator<MovingImageType> ConstIteratorType;
ConstIteratorType imageout(resampler->GetOutput(),
resampler->GetOutput()->GetRequestedRegion());
imageout.GoToBegin();
for (int i = 0; !imageout.IsAtEnd(); ++i,++imageout)
{
data[i] = imageout.Get();
}
plhs[0] = mvar;
Hope this helps.
2009/6/23 Bill Lorensen <bill.lorensen at gmail.com>
> You should never UnRegister an itk smart pointer. It will UnRegister
> itself when it leaves scope.
>
>
> On Mon, Jun 22, 2009 at 6:22 PM, gregthom<gregthom99 at yahoo.com> wrote:
> >
> > Hello all
> >
> >
> > I am doing a small test with moving data from matlab - > itk -> back to
> > matlab.
> > I can't get code below to work properly. Is there something I am doing
> wrong
> > ?
> > This is not entirely itk but I believe the problem is more in the itk
> side
> > than matlab
> > so please anyone with some itk/matlab experience please have a look.
> >
> >
> > I have this templated function :
> >
> > template < class TImageType, class TPixelType>
> > int itkImage2carray( TImageType *img, TPixelType outData[] )
> > {
> > typedef itk::ImageRegionIterator<TImageType> ItType;
> > ItType it( img, img->GetLargestPossibleRegion() );
> >
> > int ctr = 0;
> > for (it = it.Begin(); !it.IsAtEnd(); ++it)
> > {
> > outData[ctr]=it.Get();
> > ctr++;
> > }
> >
> > return 0;
> > }
> >
> > and I use it like this:
> >
> > typedef float PixelType;
> > const unsigned int Dimension = 3;
> >
> > // before calling the function
> > typedef itk::Image<PixelType, Dimension> ImageType;
> > ImageType::Pointer image = (ImageType *)mxArray2ITKImage(prhs[0]);
> > image->UnRegister(); // Decrement the reference count
> >
> > ImageType::SizeType size;
> > size = image->GetLargestPossibleRegion().GetSize();
> > mwSize* dims;
> > dims[0] = size[0] ;
> > dims[1] = size[1] ;
> > dims[2] = size[2] ;//assume 3D here !
> >
> >
> > //copy back to matlab
> > PixelType data[size[0]*size[1]*size[2]];
> > int res = itkImage2carray<ImageType,PixelType>( image, data);
> >
> > plhs[0] = mxCreateNumericArray(Dimension, dims, mxDOUBLE_CLASS,
> > mxREAL);
> > memcpy((void *)(mxGetPr(plhs[0])), (void *)data, sizeof(data));
> >
> >
> > This has behaved eratically , sometimes I got only half of the input
> image ,
> > now, as it is, this only generates a seg fault in matlab.
> >
> >
> >
> > --
> > View this message in context:
> http://www.nabble.com/what-is-wrong-with-this-code---%3A-exporting-itkImage-tp24156607p24156607.html
> > Sent from the ITK - Users mailing list archive at Nabble.com.
> >
> > _____________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.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-users
> >
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.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-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20090623/8e2f6e84/attachment-0001.htm>
More information about the Insight-users
mailing list