[vtkusers] How to display dicom images without scaling?

Jothy jothybasu at gmail.com
Tue Jul 26 10:20:29 EDT 2011


Can you try reading your images with vv viewer
http://www.creatis.insa-lyon.fr/rio/vv#Download_VV

it too uses the same vtk and Qt. If it can read properly then go to it src
code and find out how they setup the vtkImageViewer2.

HTH

Jothy

On Tue, Jul 26, 2011 at 3:08 PM, Joseph D. Wieber Jr. <jdwieber at gmail.com>wrote:

> **
>
> 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
> > 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 ();
>> }
>>
>>
>> [image: View in HTML to see image]
>>
>> _______________________________________________
>> 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
>>
>>
>
> _______________________________________________
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110726/9567f4cc/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/9567f4cc/attachment.png>


More information about the vtkusers mailing list