C++ & VTK : fail to find origins of DICOM image after write, load it -
i'm in trouble dicom images. want find origins of images after write , load it, can't. nevertheless, can find spacing , number of voxels, same way origins...
i try give pieces of code. first of all, wrote dicom image using vtkdicomreader (maybe old version of vtkdicomimagereader?) on vtkimagedata. took care set vtkimagedata information :
vtksmartpoint<vtkimagedata> spectdada = vtksmartpoint<vtkimagedata>::new(); spectdata->setorigin( 50, 50, 50 ); spectdata->setdimension( 128, 128, 128); spectdata->setspacing( 4.667, 4.667, 4.667); spectdata->allocatescalars(vtk_unsigned_short,3); spectdata->getpointdata()->setscalars(scalars); //scalar contains voxel index , values vtksmartpoint<vtkdicommetadata> meta = vtksmartpoint<vtkdicommetadata>::new(); vtksmartpoint<vtkdicommrgenerator> generator = vtksmartpoint<vtkdicommrgenerator>::new(); vtksmartpoint<vtkdicommrgenerator> writer = vtksmartpoint<vtkdicomwriter>::new(); writer->setinputdata(spectdata); writer->setgenerator(generator); writer->setmetadata(meta); writer->setmemoryrowordertofilenative(); writer->write(); then, load images using vtkdicomreader (not vtkdicomimagereader -> old version?):
vtksmartpoint<vtkstringarray> files = vtksmartpoint<vtkstringarray>::new(); files->insertnextvalue(completepath); //the folder path containing dicom images vtksmartpoint<vtkdicomsorter> sorter = vtksmartpoint<vtkdicomsorter>::new(); sorter->setinputfilenames(files); sorter->update(); vtkstringarray *a = sorter->getoutputfilenames(); vtksmartpointer<vtkdicomreader> readervtk = vtksmartpointer<vtkdicomreader>::new(); readervtk->setfilenames(a); readervtk->update(); readervtk->setmemoryrowordertotopdown(); int *extent = reader->getdataextent(); //working double *spacing = reader->getdataspacing(); //working double *origin = reader->getdataorigin(); //not working if people understand what's going on finding origins, apreciate.
florian
Comments
Post a Comment