[vtkusers] How to display dicom images without scaling?

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


Update:

A colleague of mine pointed out to me that in the header the pixel 
dimensions of the sample image is 0.292.  When we manually change this 
value to 1.0 the image displays at full size.  We tried to change that 
value in the code, but our efforts were fruitless.  We tried several 
alternatives including changing the output spacing, reslicing, 
resampling, and setting the spacing.  Can someone please tell me what I 
have to do to modify the dicom header using vtk and have the image 
display at the full 512x512 pixel resolution?  Thanks.

Regards,

Joseph

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/a8b599d9/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/a8b599d9/attachment.png>


More information about the vtkusers mailing list