[Insight-users] Fast Image Conversion-

Ryan L. Smith ryans09 at gmail.com
Tue Feb 8 19:54:27 EST 2011


Hi David-

Thanks for the quick response.  I explored that option, and my software
compiles although it hangs on execution.  The example has an input as an
array of unsigned chars, as opposed to my vector. Is this the
problem?  Additionally, this still uses an itk to vtk connector before
display.  I am assuming based on your suggestion, the bulk of my time in the
previous solution was spent looping and setting individual pixels as opposed
to the itk to vtk filter.  Is this correct? If not, is there a vtk import
filter that will take my buffer as an input directly? My non-functioning
code hangs when I try to connect my pipeline to an actor, and it is included
below:

==================================================================================
 setupCamera();
getCamInfo(w,h,d) //get width,height,depth from camera
typedef unsigned char PixelType;
const unsigned int Dimension = 2;
typedef itk::Image<PixelType,Dimension> ImageType;
typedef itk::ImageToVTKImageFilter< ImageType > ConnectorType;
ConnectorType::Pointer connector = ConnectorType::New();
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::ImportImageFilter< PixelType, Dimension > ImportFilterType;
ImportFilterType::Pointer importFilter = ImportFilterType::New();

vtkSmartPointer<vtkImageActor> actor =
vtkSmartPointer<vtkImageActor>::New();

ImportFilterType::SizeType size;
size[0] = w;
size[1] = h; // size along Y

ImportFilterType::IndexType start;
start.Fill( 0 );

ImportFilterType::RegionType region;
region.SetIndex( start );
region.SetSize( size );
importFilter->SetRegion( region );

double origin[ Dimension ];
origin[0] = 0.0; // X coordinate
origin[1] = 0.0; // Y coordinate
importFilter->SetOrigin( origin );

double spacing[ Dimension ];
spacing[0] = 1.0; // along X direction
spacing[1] = 1.0; // along Y direction

importFilter->SetSpacing( spacing );
const int numberOfPixels = size[0] * size[1];

ConnectorType::Pointer connector = ConnectorType::New();



UINT32_TYPE SizeInBytes = h*w*3*((depth+7)/8);

std::vector<
unsigned char> ImageData(SizeInBytes);

UINT32_OUT_TYPE pnFrameCount ;

Result = UCC_GetBitmap8ImageEx( CamId, &*ImageData.begin(), pnFrameCount ,
6000, NULL ) ;

const bool importImageFilterWillOwnTheBuffer = true;

importFilter->SetImportPointer( &*ImageData.begin(), numberOfPixels,

importImageFilterWillOwnTheBuffer );

connector->SetInput(importFilter->GetOutput());

 actor->SetInput(connector->GetOutput());  // THIS LINE MAKES MY CODE HANG

====================================================================================



Thanks in advance for your help!
-Ryan



On Tue, Feb 8, 2011 at 1:55 PM, David Doria <daviddoria at gmail.com> wrote:

>  On Tue, Feb 8, 2011 at 4:52 PM, Ryan L. Smith <ryans09 at gmail.com> wrote:
> >
> > Hi-
> > I am reading in an image stream in unsigned char vector format from a
> camera in real-time.  I have some code setup to display the image using
> VTK/ITK, but the latencies are high.  Is there a method to directly convert
> this vector to a VTK image?  I am currently looping through and setting the
> image pixels in an ITK image using the following example:
> > http://www.vtk.org/Wiki/ITK/Examples/SimpleOperations/SetPixels
> > I then connect the pipeline using itk::ImageToVTKImageFilter and display
> the image.  I recognize this is an inefficient way of doing things, but came
> up blank in looking for an optimized function to do it for me.  Thanks in
> advance-
> > -Ryan
>
> Have you seen the ImportImageFilter ?
> http://www.itk.org/Wiki/ITK/Examples/IO/ImportImageFilter
>
> David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20110208/9a82e4e4/attachment.htm>


More information about the Insight-users mailing list