[vtkusers] Creating a vtkImageData from scratch reading DICOM files with DCMTK

Mark Wyszomierski markww at gmail.com
Thu Aug 16 13:36:01 EDT 2007


Hmm hard to say, if there's anything specific let us know, goodluck,

Mark

On 8/16/07, Jesús Spí­nola <jspinola at gmail.com> wrote:
> I just realized the problem wasn't in copying the data, I missed some
> parameters for the vtkImageViewer camera in my test program :/
> Now I can load the images, but they don't look very well, maybe it's about
> the bytes I'm allocating for the image and the buffers, or something related
> with the window level functions.
>
> Thanks for your reply
>
>
> On 8/16/07, Mark Wyszomierski <markww at gmail.com> wrote:
> > Jesus, I always use DcmFileFormat and haven't had problems with it and
> > vtkImageData. I've never tried with DicomImage. I thought DicomImage
> > does window level / rescale slope/intercept transformations
> > automatically which is why I don't use it.
> >
> > Anyway I think the DICOM object will give you the image data top to
> > bottom, but VTK works in cartesian coordinates, bottom to top. So you
> > probably have to setup a pixel loop to do the work of reading the
> > DICOM image backwards. I usually do something like:
> >
> > DcmFileFormat dcm;
> > dcm.loadFile("C:\\test.dcm");
> > const unsigned short* p = NULL;
> > dcm.getDataset()->findAndGetUint16Array(DCM_PixelData,
> p);
> >
> > // Then copy over each pixel value from p in a pixel loop but bottom
> > to top into your vtkImageData object.
> >
> > Like I said I've been doing that for awhile without any problems, hope
> > that helps somewhat,
> >
> > Mark
> >
> >
> >
> >
> >
> > On 8/16/07, Jesús Spí­nola <jspinola at gmail.com> wrote:
> > > Hi vtkusers,
> > >
> > > I want to read some DICOM files into one vtkImageData. To read the pixel
> > > data from the DICOM files I want to use the DCMTK libraries. The
> > > vtkImageData object will contain several DICOM images so I want to load
> the
> > > pixel data into vtkImageData file by file.
> > >
> > > First I allocate the vtkImageData and then I load the files in a bucle
> from
> > > dcmtk (DicomImage class) to the vtkImageData object. The images are
> loaded
> > > correctly by dcmtk ( I dumped the images in a png file and they're ok )
> but
> > > when I want to view the images with vtkImageViewer2 they are completely
> > > dark, so it seems no data is loaded at all. Following there's the code
> > > snippet I use to do that. I also tried to read the pixel data with
> > > DcmDataset::findAndGetUint16Array(DCM_PixelData,..)
> instead
> > > of DicomImage, but with no success.
> > >
> > > Has anyone any suggestions of what I'm probably missing or doing wrong?
> > >
> > > // first we allocate the data
> > > m_imageDataVTK = vtkImageData::New();
> > > m_imageDataVTK->SetOrigin( origin );
> > > m_imageDataVTK->SetSpacing( spacing );
> > > m_imageDataVTK->SetDimensions( rows, columns, slices );
> > > m_imageDataVTK->SetScalarTypeToUnsignedShort(); // the
> data
> > > will be 16 bit
> > > m_imageDataVTK->SetNumberOfScalarComponents(1);
> > > m_imageDataVTK->AllocateScalars();
> > >
> > > // now we load all the images
> > > int zSlice = 0;
> > >
> > >     foreach( Image *image, m_imageSet )
> > >     {
> > >         DicomImage *dicomImage = new DicomImage( qPrintable(
> > > image->getPath() ) ); // we load a new Image
> > >         if( dicomImage != NULL )
> > >         {
> > >             if( dicomImage->getStatus() == EIS_Normal )
> > >             {
> > >                 dicomImage->setMinMaxWindow();
> > >                 if( dicomImage->getOutputData(16) != NULL )
> > >                 {
> > >                     // we copy the data in the dcmtk buffer to the
> > > vtkImageData one
> > >                     memcpy((unsigned short
> > > *)m_imageDataVTK->GetScalarPointer(0,0,zSlice),
> (unsigned
> > > short *)dicomImage->getOutputData(16),
> > > dicomImage->getOutputDataSize() );
> > >                     dicomImage->deleteOutputData();
> > >                     m_imageDataVTK->Modified();
> > >                 }
> > >         }
> > >         zSlice++;
> > >     }
> > >
> > > Thanks in advance!
> > >
> > > _______________________________________________
> > > This is the private VTK discussion list.
> > > Please keep messages on-topic. Check the FAQ at:
> > > http://www.vtk.org/Wiki/VTK_FAQ
> > > Follow this link to subscribe/unsubscribe:
> > > http://www.vtk.org/mailman/listinfo/vtkusers
> > >
> > >
> >
>
>



More information about the vtkusers mailing list