[vtkusers] Visualize 3D image (.mhd)

Francois Bertel francois.bertel at kitware.com
Mon Jul 12 09:05:32 EDT 2010


This line just create an array of 10 pointers:

vtkImageData** ImageOriginale  = new vtkImageData*[10];

It means that  ImageOriginale[0] to ImageOriginale[9] are not initialized.

therefore the following line is crashing:
ImageOriginale[0]->DeepCopy(caster->GetOutput()) ;

you should have this piece of code first:
int i=0;
while(i<10)
{
 ImageOriginale[i]=vtkImageData::New();
++i;
}

On Mon, Jul 12, 2010 at 8:55 AM, Martijn Steenwijk
<martijnsteenwijk at gmail.com> wrote:
> It is. Sorry, the s from set should be capitalized:
> ->SetFileDimensionality(int)
>
> http://www.vtk.org/doc/release/5.0/html/a00777.html
>
> Best,
> Martijn
>
> ---
> Martijn Steenwijk
> T 06 20693913
> E martijnsteenwijk at gmail.com
>
>
> -----Original Message-----
> From: Urvoas, Paul [mailto:paul.urvoas at philips.com]
> Sent: maandag 12 juli 2010 14:37
> To: martijnsteenwijk at gmail.com
> Cc: vtkusers at vtk.org
> Subject: RE: [vtkusers] Visualize 3D image (.mhd)
>
> Ok but reader is an object from the class vtkMetaImageReader, and
> setFileDimensionality is not a function from this class.
> Regards,
> Paul
>
> ('setFileDimensionality' : is not a member of 'vtkMetaImageReader')
>
> -----Original Message-----
> From: Martijn Steenwijk [mailto:martijnsteenwijk at gmail.com]
> Sent: 2010 Jul 12 2:29 PM
> To: Urvoas, Paul
> Cc: vtkusers at vtk.org
> Subject: RE: [vtkusers] Visualize 3D image (.mhd)
>
> Try
>
> reader->setFileDimensionality(3)
>
> Best,
> Martijn
>
> ---
> Martijn Steenwijk
> T 06 20693913
> E martijnsteenwijk at gmail.com
>
>
> -----Original Message-----
> From: vtkusers-bounces at vtk.org [mailto:vtkusers-bounces at vtk.org] On Behalf
> Of Urvoas, Paul
> Sent: maandag 12 juli 2010 14:21
> To: Bill Lorensen
> Cc: vtkusers at vtk.org
> Subject: Re: [vtkusers] Visualize 3D image (.mhd)
>
> It change anything.
> I have just found a program to read Meta Image. But I get the following
> error (during the execution):
>
> NDims required and not defined.
> MetaObject: Read: MET_Read Failed
> MetaImage: M_Read: Error parsing file
> MetaImage: Read: Cannot parse file
> NDims required and not defined.
> MetaObject: Read: MET_Read Failed
> MetaImage: M_Read: Error parsing file
> MetaImage: Read: Cannot parse file
>
> My input is of course a 3d mhd file...
>
> Thanks in advance,
> Paul
>
>
>
>
>
> This is the program I am trying to use:
>
> int main( int argc, char * argv[] )
> {
>
>        char * in_file_name  = argv[1];
>        char * out_file_name = argv[2];
>
>  // View up
>  double vux = atof(     argv[3] );
>        double vuy = atof(     argv[4] );
>        double vuz = atof(     argv[5] );
>
>  // Camera position direction from fp
>  double px  = atof(     argv[6] );
>        double py  = atof(     argv[7] );
>        double pz  = atof(     argv[8] );
>
>  // MIP or not
>  int    mip = atoi(     argv[9] );
>
>  // Focal point set to center.
>  double fpx;
>        double fpy;
>        double fpz;
>
>
>        // Graphics Factory
>        vtkGraphicsFactory * graphics_factory
>                = vtkGraphicsFactory::New();
>        graphics_factory->SetOffScreenOnlyMode( 1);
>        graphics_factory->SetUseMesaClasses( 1 );
>
>        // Imaging Factory
>        vtkImagingFactory * imaging_factory
>                = vtkImagingFactory::New();
>        imaging_factory->SetUseMesaClasses( 1 );
>
>        // Image Reader
>        //vtkXMLImageDataReader * reader
>        //      = vtkXMLImageDataReader::New();
>  vtkMetaImageReader * reader  = vtkMetaImageReader::New();
>        reader->SetFileName( in_file_name );
>  reader->ReleaseDataFlagOn();
>
>        // Get center
>        reader->Update();
>        vtkImageData * image = reader->GetOutput();
>        double * image_spacing = image->GetSpacing();
>        double * image_origin = image->GetOrigin();
>        int * whole_extent = image->GetWholeExtent();
>        int image_dim[3];
>        image_dim[0] = whole_extent[1] + 1;
>        image_dim[1] = whole_extent[3] + 1;
>        image_dim[2] = whole_extent[5] + 1;
>        fpx = image_origin[0]
>                + image_dim[0] / 2 * image_spacing[0];
>        fpy = image_origin[1]
>                + image_dim[1] / 2 * image_spacing[1];
>        fpz = image_origin[2]
>                + image_dim[2] / 2 * image_spacing[2];
>
>        // Opacity
>        vtkPiecewiseFunction * opacity
>                = vtkPiecewiseFunction::New();
>  opacity->AddPoint(   0, 0.0 );
>        opacity->AddPoint( 255, 0.8 );
>  opacity->AddPoint( 256, 0.0 );
>  opacity->AddPoint( 511, 0.8 );
>  opacity->AddPoint( 512, 0.0 );
>  opacity->AddPoint( 767, 1.0 );
>
>        // Color
>        vtkColorTransferFunction * color
>                = vtkColorTransferFunction::New();
>  color->AddRGBPoint( 0,   1.0, 0.0, 0.0 );
>        color->AddRGBPoint( 255, 1.0, 0.0, 0.0 );
>  color->AddRGBPoint( 256, 0.0, 1.0, 0.0 );
>        color->AddRGBPoint( 511, 0.0, 1.0, 0.0 );
>  color->AddRGBPoint( 512, 1.0, 1.0, 0.0 );
>        color->AddRGBPoint( 767, 1.0, 1.0, 0.0 );
>
>        // Volume Property
>        vtkVolumeProperty * vol_prop = vtkVolumeProperty::New();
>        vol_prop->SetColor( color );
>  if ( mip == 0 )
>    {
>    vol_prop->SetScalarOpacity( opacity );
>    }
>  //vol_prop->SetInterpolationTypeToLinear();
>  vol_prop->SetInterpolationTypeToNearest();
>
>        // Mapper
>        vtkFixedPointVolumeRayCastMapper * mapper
>                = vtkFixedPointVolumeRayCastMapper::New();
>  if ( mip == 0 )
>    {
>    mapper->SetBlendModeToComposite();
>    }
>  else
>    {
>    mapper->SetBlendModeToMaximumIntensity();
>    }
>        mapper->SetInputConnection( reader->GetOutputPort() );
>
>        // Volume
>        vtkVolume * volume = vtkVolume::New();
>        volume->SetMapper( mapper );
>        volume->SetProperty( vol_prop );
>
>        // Camera
>        vtkCamera * camera = vtkCamera::New();
>  camera->ParallelProjectionOn();
>        camera->SetViewUp (vux, vuy, vuz);
>        camera->SetPosition (
>                        fpx + px,
>                        fpy + py,
>                        fpz + pz );
>        camera->SetFocalPoint (fpx, fpy, fpz);
>        camera->ComputeViewPlaneNormal();
>
>  // Scale PolyData
>  vtkPoints * scale_points = vtkPoints::New();
>  scale_points->InsertNextPoint(-10.0, 0.0,  0.0);
>  scale_points->InsertNextPoint(-10.0, 100.0, 0.0);
>  vtkCellArray * scale_cells = vtkCellArray::New();
>  scale_cells->InsertNextCell( 2 );
>  scale_cells->InsertCellPoint( 0 );
>  scale_cells->InsertCellPoint( 1 );
>  vtkPolyData * scale_poly = vtkPolyData::New();
>  scale_poly->SetPoints( scale_points );
>  scale_poly->SetLines( scale_cells );
>  vtkPolyDataMapper * scale_mapper = vtkPolyDataMapper::New();
>  scale_mapper->SetInput( scale_poly );
>  vtkActor * scale_actor = vtkActor::New();
>  scale_actor->GetProperty()->SetColor(1.0, 1.0, 1.0);
>  scale_actor->SetMapper( scale_mapper );
>
>        // Renderer
>        vtkRenderer * renderer = vtkRenderer::New();
>        renderer->SetBackground( 0, 0, 0 );
>  renderer->AddVolume( volume );
>  //renderer->AddActor( scale_actor );
>        renderer->SetActiveCamera(camera);
>        renderer->ResetCamera();
>
>        camera->Zoom(1.3);
>
>        // Render Window
>        vtkRenderWindow * render_window = vtkRenderWindow::New();
>        render_window->SetSize( WSIZE, WSIZE );
>        render_window->SetOffScreenRendering( 1 );
>        render_window->AddRenderer( renderer );
>        // ***** STEREO *****
>        //render_window->StereoRenderOn();
>
>        // Window to Image
>        vtkWindowToImageFilter * win_2_image
>                = vtkWindowToImageFilter::New();
>        win_2_image->SetInput( render_window );
>
>        // PNG Writer
>        vtkPNGWriter * writer = vtkPNGWriter::New();
>        writer->SetFileName( out_file_name );
>        writer->SetInputConnection( win_2_image->GetOutputPort() );
>
>        render_window->Render();
>
>        writer->Write();
>
>        return 0;
> }
>
>
>
> -----Original Message-----
> From: Bill Lorensen [mailto:bill.lorensen at gmail.com]
> Sent: 2010 Jul 12 1:59 PM
> To: Urvoas, Paul
> Cc: vtkusers at vtk.org
> Subject: Re: [vtkusers] Visualize 3D image (.mhd)
>
> Updates are usually done on the filters, not the outpus of the filter.Try:
>  reader->Update();
> and
>  caster->Update();
>
> On Mon, Jul 12, 2010 at 7:08 AM, Urvoas, Paul <paul.urvoas at philips.com>
> wrote:
>> Hi,
>>
>> I would like to visualize 3d mhd image with VTK, thanks to another
> program,
>> I wrote the following code.
>>
>> It crashes just after cout<<"caster ok" and I don't find my mistakes.
>>
>>
>>
>> Thanks in advance,
>>
>> Paul
>>
>>
>>
>>
>>
>> int main(int argc, char* argv)
>>
>> {
>>
>>
>>
>>       vtkImageData** ImageOriginale  = new vtkImageData*[10];
>>
>>
>>
>>       vtkViewImage3D* view;
>>
>>
>>
>>       cout << "start" <<endl;
>>
>>
>>
>>       vtkMetaImageReader* reader = vtkMetaImageReader::New();
>>
>>       reader->SetFileName ("Synthetic-04.mhd");
>>
>>       reader->GetOutput()->Update();
>>
>>       cout << "reader ok" <<endl;
>>
>>
>>
>>       vtkImageCast* caster = vtkImageCast::New();
>>
>>       caster->SetInput (reader->GetOutput());
>>
>>       caster->SetOutputScalarTypeToUnsignedShort ();
>>
>>       caster->GetOutput()->Update();
>>
>>
>>
>>       cout << "caster ok" <<endl;
>>
>>
>>
>>     ImageOriginale[0]->DeepCopy(caster->GetOutput()) ;
>>
>>
>>
>>       cout << "Copy volume to ImageOriaginale" <<endl;
>>
>>
>>
>>       caster->Delete();
>>
>>       reader->Delete();
>>
>>
>>
>>       cout << "reader caster deleted" <<endl;
>>
>>
>>
>>       int dims[3];
>>
>>       ImageOriginale[0]->GetDimensions(dims);
>>
>>       double spacing[3];
>>
>>       ImageOriginale[0]->GetSpacing(spacing);
>>
>>       cout << "spacing & dimension" <<endl;
>>
>>
>>
>>
>>
>>   view->SetImage(ImageOriginale[0]);
>>
>>
>>
>>   view->SetRenderingModeToVR();
>>
>>   view->SetVolumeRayCastFunctionToMIP();
>>
>>
>>
>>   vtkRenderer *ren = vtkRenderer::New();
>>
>>   vtkRenderWindow *renWin = vtkRenderWindow::New();
>>
>>   renWin->AddRenderer(ren);
>>
>>   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>>
>>   iren->SetRenderWindow(renWin);
>>
>>
>>
>>
>>
>>   view->SetImage (ImageOriginale[0]);
>>
>>   view->SetRenderingModeToVR();
>>
>>   view->SetVolumeRayCastFunctionToMIP();
>>
>>
>>
>>   cout << "befor render" <<endl;
>>
>>   renWin->Render();
>>
>>
>>
>> }
>>
>> ________________________________
>> The information contained in this message may be confidential and legally
>> protected under applicable law. The message is intended solely for the
>> addressee(s). If you are not the intended recipient, you are hereby
> notified
>> that any use, forwarding, dissemination, or reproduction of this message
> is
>> strictly prohibited and may be unlawful. If you are not the intended
>> recipient, please contact the sender by return e-mail and destroy all
> copies
>> of the original message.
>>
>> _______________________________________________
>> 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 VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
>>
>
> The information contained in this message may be confidential and legally
> protected under applicable law. The message is intended solely for the
> addressee(s). If you are not the intended recipient, you are hereby notified
> that any use, forwarding, dissemination, or reproduction of this message is
> strictly prohibited and may be unlawful. If you are not the intended
> recipient, please contact the sender by return e-mail and destroy all copies
> of the original message.
> _______________________________________________
> 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 VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
> The information contained in this message may be confidential and legally
> protected under applicable law. The message is intended solely for the
> addressee(s). If you are not the intended recipient, you are hereby notified
> that any use, forwarding, dissemination, or reproduction of this message is
> strictly prohibited and may be unlawful. If you are not the intended
> recipient, please contact the sender by return e-mail and destroy all copies
> of the original message.
>
> _______________________________________________
> 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 VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>



-- 
François Bertel, PhD  | Kitware Inc. Suite 204
1 (518) 371 3971 x113 | 28 Corporate Drive
                      | Clifton Park NY 12065, USA



More information about the vtkusers mailing list