[Insight-users] vtk polydata import / export

imho imho at bephp . com
Fri, 18 Jul 2003 18:17:22 +0200


Hi Luis,

I don't understand, I've found the imageViewer where you said.
I've a too old version I guess.

what I'm trying to do is a registration between a liver reconstructed 
from slices and a "live liver", who will be digitalised (I don't know 
how already) in the chirurgical room.
But I've to simulate this live digitalisation, so I load a polyData 
saved before, and deform it a bit.
I don't know the structure that will have the digitalised one, but I can 
have the reconstructed one as imageData (originally) and polyData.
I already do a point-based registration and a ICP registration with 
these two polyData (with vtk, using vtkLandmarkTransform, vtkTransform, 
vtkTransformPolyDataFilter and vtkIterativeClosestPointTransform)

So I've first preferably continued using polyData, but I guess I can 
change all of this to imageData?
I'll look in this way.
Thanks

Imho.


Luis Ibanez wrote:

>
> Hi Imho,
>
> The viewer that you may want to use is the one in
>
>    InsightApplications/ImageViewer/
>
> It doesn't reguire GLUT, it does require FLTK.
>
> ---
>
> The conversion from vtkPolyData to vtkImage is natually
> a slow process, you are generating a volume from a
> surface.  You don't want to do this each time.
> Simply write a separate program that do the conversion
> and save the images in files.  Then use the images
> for running the Demons registration process.
>
>
>
> Question:  How did you get this vtkPolyData models
>            of the liver ?
>
>
> Presumably you got them from a segmentation of actual
> volumetric data....
>
> If this is the case, you better use this original volumetric
> data for performing the Demons registration, instead of
> going the long way through a geometrical model.
>
> Demons is based on a concept of optical flow, its precision
> will be in the order of one-pixel, assuming that the gradients
> in the image borders have profiles with linear sections.
>
>
> Regards,
>
>
>   Luis
>
>
>
> --------------
> imho wrote:
>
>> Hi all,
>> I have finally compiled it with the glut stuff but I have nothing at 
>> the execution on windows...
>> (no message, nothing)
>>
>> Anyway, I'll try to resolve my pipe-line problem, and if I find out 
>> I'll let you know.
>> But the conversion vtkPolyData -> vtkImageData with the 
>> vtkImplicitModeller is so slow (and I've two models to convert), I 
>> don't know if the demons algorithm in ITK will be enough accurate.
>>
>> Is there any other way to do a connection vtk-itk-vtk?
>>
>> Thanks for your help.
>>
>> Mathieu Malaterre wrote:
>>
>>> You'll find the file here:
>>>
>>> http://public . kitware . com/cgi-bin/cvsweb . cgi/Insight/Utilities/GlutMaster/Attic/?cvsroot=Insight
>>>
>>> But as you can see this is no longer supported.
>>>
>>> HTH
>>> mathieu
>>>
>>> imho wrote:
>>>
>>>> Hi Luis,
>>>> I have a linking error
>>>>
>>>> "
>>>> Compiling...
>>>> itkImageViewer.cxx
>>>> C:\itk\itksrc\Code\IO\itkImageViewerWindow.h(23) : fatal error 
>>>> C1083: Cannot open include file: 'itkGlutMaster.h': No such file or 
>>>> directory
>>>> Error executing cl.exe.
>>>>
>>>> NewProject.exe - 1 error(s), 0 warning(s)
>>>> "
>>>> and I cant' find this in my itk folders.
>>>>
>>>> So if the image files were corrupted, I have a problem with the 
>>>> vtkExport ---> itkImport or I've writed the files badly.
>>>> The conversion polyData->ImageData->polyData in VTK is OK witout 
>>>> the connection to itk.
>>>> the files :
>>>> vtk stuff
>>>> "
>>>>        polyToImage->SetInput(poly[0]); //  implicitModeller to do a 
>>>> polyData -> ImageData conversion
>>>>        polyLiveToImage->SetInput(polyLive);
>>>>              polyToImage->SetSampleDimensions(10, 10, 10);
>>>>        polyToImage->SetMaximumDistance(0.25);
>>>> //        polyToImage->SetModelBounds(poly[0]->GetBounds());
>>>>              polyLiveToImage->SetSampleDimensions(10, 10, 10);
>>>> //        polyLiveToImage->SetSampleDimensions(110, 40, 20);
>>>>        polyLiveToImage->SetMaximumDistance(0.25);
>>>>    //    polyLiveToImage->SetModelBounds(polyLive->GetBounds());
>>>>              imageModel = polyToImage->GetOutput(); // getting the 
>>>> ImageData
>>>>        imageModelLive = polyLiveToImage->GetOutput();
>>>>                      vtkExporter4->SetInput(imageModel);
>>>>        vtkExporter5->SetInput(imageModelLive);
>>>>
>>>>        regITK = new registrationITK(vtkImporter4, vtkExporter4, 
>>>> vtkExporter5);
>>>>
>>>>        cast->SetInput(vtkImporter4->GetOutput());
>>>>        castTo3D->SetInput(vtkImporter4->GetOutput());
>>>>
>>>>        isRegITK = true;
>>>>
>>>> "
>>>>
>>>> itk stuff
>>>> in registrationITK.h
>>>> "
>>>> ...
>>>>    typedef float PixelType;
>>>>    typedef itk::Image<PixelType, Dimension> ImageType;
>>>>
>>>>    typedef itk::VTKImageImport<ImageType> ImageImportType;
>>>>    typedef itk::VTKImageImport<InternalImageType> ImageImportType2;
>>>>    typedef itk::VTKImageExport<ImageType> ImageExportType;
>>>>    typedef itk::ImageFileWriter<ImageType> ImageWriter;
>>>>
>>>> private :
>>>>
>>>>
>>>>    ImageImportType::Pointer itkImporter;
>>>>    ImageImportType::Pointer itkImporter2;
>>>>    ImageExportType::Pointer itkExporter;
>>>>    ImageWriter::Pointer writerITK;
>>>>
>>>> };
>>>> "
>>>> in itkRegistration.cpp
>>>> "
>>>> registrationITK::registrationITK(vtkImageImport* vtkImporter, 
>>>> vtkImageExport *vtkExporter, vtkImageExport *vtkExporter2)
>>>> {      itkImporter = ImageImportType::New();
>>>>    itkImporter2 = ImageImportType::New();
>>>>    itkExporter = ImageExportType::New();
>>>>    writerITK = ImageWriter::New();
>>>>
>>>>    itkExporter->SetInput(itkImporter->GetOutput());
>>>>
>>>>    ConnectPipelines(vtkExporter, itkImporter);
>>>>    ConnectPipelines(vtkExporter2, itkImporter2);
>>>>    ConnectPipelines(itkExporter, vtkImporter);            
>>>> itkImporter->Update();
>>>>    itkImporter2->Update();
>>>>    itkExporter->Update();
>>>>    writerITK->SetFileName("test_itk_write.vtk");
>>>>       itk::VTKImageIO::Pointer vtkWriter = itk::VTKImageIO::New();
>>>>    vtkWriter->SetFileName( "LOCAL" );
>>>>    vtkWriter->SetFileTypeToBinary();
>>>>
>>>>    writerITK->SetImageIO( vtkWriter );
>>>>      writerITK->SetInput(itkImporter->GetOutput());
>>>>       writerITK->Update();
>>>> }
>>>> "
>>>> What could I try?
>>>>
>>>> Thanks
>>>>
>>>>
>>>>
>>>> Luis Ibanez wrote:
>>>>
>>>>>
>>>>> Hi Imho,
>>>>>
>>>>> If you want to read the vtk image using VTK reader
>>>>> you may try the following reader.
>>>>> http://www . vtk . org/doc/nightly/html/classvtkDataSetReader . html
>>>>>
>>>>> I tried both image that you send, and they appear to be
>>>>> corrupted.
>>>>>
>>>>> What error did you encounter while building the viewer ?
>>>>>
>>>>> The viewer will help you a lot since with it you can see
>>>>> images in multiple formats: MetaImage, GIPL, Analyze, VTK...
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>   Luis
>>>>>
>>>>>
>>>>>
>>>>> --------------------
>>>>> imho wrote:
>>>>>
>>>>>> Hi Luis,
>>>>>>
>>>>>> I have saved the data into a .mdh metaImage file, and it has a 
>>>>>> non null size.
>>>>>> I've tried to compile the imageViewer but I have a linking error 
>>>>>> so I've tried to save it into a VTK format, but I can't open it 
>>>>>> with my polyDataReader of course ( ERROR: In 
>>>>>> C:\martink\vtk40\VTK\IO\vtkPolyDataReader.cxx, line 167
>>>>>> vtkPolyDataReader (0x057D3900): Cannot read dataset type: 
>>>>>> structured_points). But it seems that the importer in itk is ok, 
>>>>>> it's the last part of the pipe-line that I've to check out, the 
>>>>>> itkExporter->vtkImporter.
>>>>>>
>>>>>> I send you the output files, maybe it could help.
>>>>>>
>>>>>> thanks
>>>>>>
>>>>>>
>>>>>
>>>>> .
>>>>>
>>>>
>>>> _______________________________________________
>>>> Insight-users mailing list
>>>> Insight-users at itk . org
>>>> http://www . itk . org/mailman/listinfo/insight-users
>>>>
>>>
>>>
>>
>>
>
>
>
> .
>