[vtkusers] Visualize 3D image (.mhd)

Urvoas, Paul paul.urvoas at philips.com
Mon Jul 12 08:36:34 EDT 2010


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.



More information about the vtkusers mailing list