[vtkusers] How to display dicom images without scaling?
Jothy
jothybasu at gmail.com
Mon Jul 25 04:48:15 EDT 2011
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>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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110725/9e74dd4d/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/20110725/9e74dd4d/attachment.png>
More information about the vtkusers
mailing list