[vtkusers] How to display dicom images without scaling?

Joseph D. Wieber Jr. jdwieber at gmail.com
Tue Jul 26 10:00:01 EDT 2011


Hi Jothy,

Thanks for the reply.  I just tried setting it to On(), but it didn't 
help.  Based on the documentation for vtkImageViewer2 (excerpt pasted 
below) I believe that it is on by default and that turning it off would 
disable the z-coordinate depth placement of the plane.

 From the doxygen docs http://www.vtk.org/doc/release/5.4/html/a00848.html:

vtkImageViewer2 
<http://www.vtk.org/doc/release/5.4/html/a00848.html>uses the 3D 
rendering and texture mapping engine to draw an image on a plane. This 
allows for rapid rendering, zooming, and panning. The image is placed in 
the 3D scene at a depth based on the z-coordinate of the particular 
image slice. Each call toSetSlice() 
<http://www.vtk.org/doc/release/5.4/html/a00848.html#548fb5aa88d007f6ae139f0bb0ab43f7>changes 
the image data (slice) displayed AND changes the depth of the displayed 
slice in the 3D scene. This can be controlled by the 
AutoAdjustCameraClippingRange ivar of the InteractorStyle member.

Regards,

Joseph

On 07/25/2011 04:48 AM, Jothy wrote:
> Don't you think
>
> viewer->GetInteractorStyle ()->AutoAdjustCameraClippingRangeOff ();
>
> this should be On().
>
> Jothy
>
> On Sun, Jul 24, 2011 at 8:50 PM, Joseph D. Wieber Jr. 
> <jdwieber at gmail.com <mailto:jdwieber at gmail.com>> wrote:
>
>
>     Hello,
>
>     I'm new to VTK and I'm working on a project that reads dicom image
>     files.  The files I have are 512x512 pixels, but when I view them
>     they display at approx 150x150 pixels.  I'm using Qt to create the
>     UI via Qt designer with the qvtkWidget.  I'm using the
>     vtkImageViewer2 class to handle the visualization.  I pasted my
>     initialization code below.  The algorithm I'm working on is
>     intelligent scissors (user guided segmentation).  I originally
>     implemented it in OpenCV, but need to convert my app. to use VTK. 
>     I need to extract pixel locations from left click and mouse over
>     events, and I have this part working correctly.  However, for the
>     algorithm to work properly I need to do a lookup into a cost table
>     based on pixel location.  The cost table is built to the correct
>     size (512x512), and when I write out the dimensions of the image I
>     see 512x512, but when I do the picking I get locations in the
>     range of 0 - 150.  Indeed, the displayed image takes up only a
>     small portion of the widget (see image below).  I tried searching
>     the web and the mailing list, but found nothing.  I'm not sure
>     what search terms are appropriate.  I found in the vtkImageViewer2
>     documentation that dicom images are scaled by Z coordinate of the
>     image slice.  When I print out the position of the image the z
>     coord is 0, but I don't know what (or how to get) the position of
>     the camera is.  How can I make the visualization pipeline display
>     the image at full size?
>
>     Thank you in advance for any help or suggestions.
>
>     Regards,
>
>     Joseph.
>
>     MainWindow::MainWindow( QWidget *parent, const string& fname ) :
>         QMainWindow( parent ),
>         ui( new Ui::MainWindow ),
>         m_fileName( fname )
>     {
>         ui->setupUi( this );
>
>         // Read the image
>         vtkSmartPointer< vtkDICOMImageReader > reader =
>                 vtkSmartPointer< vtkDICOMImageReader >::New();
>         reader->SetFileName( m_fileName.c_str () );
>         reader->Update ();
>
>         // setup the intelligent scissors object
>         //mexican hat LoG
>         double laplacian[] = {  0.,  0., -1.,  0.,  0.,
>                                 0., -1., -2., -1.,  0.,
>                                -1., -2., 16., -2., -1.,
>                                 0., -1., -2., -1.,  0.,
>                                 0.,  0., -1.,  0.,  0. };
>
>         m_spScissors.reset( new IntelligentScissors( reader->GetOutput (),
>                                                      laplacian ) );
>
>         // Setup the blending function to overlay the segmentation
>     contour on the image
>         vtkSmartPointer< vtkImageBlend > blend =
>                 vtkSmartPointer< vtkImageBlend >::New();
>         blend->AddInputConnection( reader->GetOutputPort() );
>         blend->SetOpacity( 0, 0.6 );
>         blend->AddInputConnection( m_spScissors->getPathImage () );
>         blend->SetOpacity( 1, 0.4 );
>
>         vtkSmartPointer< vtkImageViewer2 > viewer =
>                 vtkSmartPointer< vtkImageViewer2 >::New();
>         viewer->SetInputConnection ( blend->GetOutputPort () );
>
>         // make the viewer use the interactor supplied from the qvtk
>     widget
>         viewer->SetupInteractor ( ui->qvtkWidget->GetInteractor () );
>
>         //bind Qt and VTK
>         ui->qvtkWidget->SetRenderWindow ( viewer->GetRenderWindow () );
>
>         //try to get image displayed at full size
>         viewer->GetInteractorStyle
>     ()->AutoAdjustCameraClippingRangeOff ();
>
>         // Annotate the image with mouse over pixel information
>         vtkSmartPointer< vtkCornerAnnotation > cornerAnnotation =
>                 vtkSmartPointer< vtkCornerAnnotation >::New();
>         cornerAnnotation->SetLinearFontScaleFactor( 2 );
>         cornerAnnotation->SetNonlinearFontScaleFactor( 1 );
>         cornerAnnotation->SetMaximumFontSize( 15 );
>         cornerAnnotation->SetText( 0, "Off Image" );
>         cornerAnnotation->SetText( 3, "<window>\n<level>" );
>         cornerAnnotation->GetTextProperty()->SetColor( 1, 0, 0 );
>         viewer->GetRenderer ()->AddViewProp ( cornerAnnotation );
>
>         // Picker to pick pixels
>         vtkSmartPointer< vtkPropPicker > propPicker =
>                 vtkSmartPointer< vtkPropPicker >::New();
>         propPicker->PickFromListOn();
>
>         // Give the picker a prop to pick
>         vtkImageActor* imageActor = viewer->GetImageActor();
>         propPicker->AddPickList( imageActor );
>
>         // disable interpolation, so we can see each pixel
>         imageActor->InterpolateOff();
>
>         // Set callback functions
>         vtkInteractorStyleImage* imageStyle =
>     viewer->GetInteractorStyle();
>
>         //listen to MouseMoveEvents invoked by the interactor's style
>         OnMouseMovePtr onMouseMove = OnMouseMovePtr::New();
>         onMouseMove->SetViewer( viewer );
>         onMouseMove->SetAnnotation( cornerAnnotation );
>         onMouseMove->SetPicker( propPicker );
>         onMouseMove->SetIntelligentScissors ( m_spScissors );
>         imageStyle->AddObserver( vtkCommand::MouseMoveEvent,
>     onMouseMove );
>
>         //listen to LeftButtonPressEvent invoked by the interactor's style
>         OnLeftClickPtr onLeftClick = OnLeftClickPtr::New ();
>         onLeftClick->SetViewer ( viewer );
>         onLeftClick->SetAnnotation ( cornerAnnotation );
>         onLeftClick->SetPicker ( propPicker );
>         onLeftClick->SetIntelligentScissors ( m_spScissors );
>         imageStyle->AddObserver ( vtkCommand::LeftButtonPressEvent,
>     onLeftClick );
>
>         viewer->Render ();
>     }
>
>
>     View in HTML to see image
>
>     _______________________________________________
>     Powered by www.kitware.com <http://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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110726/0e260fa9/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 50701 bytes
Desc: not available
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110726/0e260fa9/attachment.png>


More information about the vtkusers mailing list