<font class="Apple-style-span" face="verdana, sans-serif">I hope this function can save someone a lot of time and headaches. It takes an itk::Image and converts it into a vtkVolume, keeping it in DICOM's patient physical world space. Its main usage is combining it with segmented structures (vtkPolyData) whose vertices are in DICOM patient space, that is, vertex coordinates were obtained using visualizing->TransformIndexToPhysicalPoint().</font><div>
<font class="Apple-style-span" face="verdana, sans-serif"><br></font></div><div><div><font class="Apple-style-span" face="'courier new', monospace"><div>typedef itk::Image<unsigned char, 3> VisualizingImageType</div>
<div><br></div><div>void showITKimageInVTKqwidget(VisualizingImageType::Pointer visualizing)</div><div>{</div><div> typedef itk::ImageToVTKImageFilter<VisualizingImageType> itkVtkConverter;</div><div> itkVtkConverter::Pointer conv=itkVtkConverter::New();</div>
<div> conv->SetInput(visualizing);</div><div> </div><div> vtkGPUVolumeRayCastMapper *mapper = vtkGPUVolumeRayCastMapper::New();</div><div> mapper->SetInput(conv->GetOutput());</div><div><br></div><div>
vtkVolume *volume=vtkVolume::New();</div><div> volume->SetProperty( myTransferFunction );</div><div> volume->SetMapper( mapper );</div><div><br></div><div> // vtkVolume only manages spacing by itself.</div>
<div> // Here we take care of position and orientation so it is in DICOM physical space</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>VisualizingImageType::DirectionType d=visualizing->GetDirection();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>vtkMatrix4x4 *mat=vtkMatrix4x4::New(); //identity matrix</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>for (int i=0; i<3; i++)</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>for (int k=0; k<3; k++)</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>mat->SetElement(i,k, d(i,k));</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>VisualizingImageType::PointType origin=visualizing->GetOrigin();</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>volume->SetOrigin(-origin[0], -origin[1], -origin[2]);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>volume->SetPosition(-origin[0], -origin[1], -origin[2]);</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>for (int i=0; i<3; i++)</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>mat->SetElement(i,3, origin[i]);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>volume->SetUserMatrix(mat);</div>
<div><br></div><div> vtkRenderer *renderer = myQWidget->GetRenderWindow()->GetRenderers()->GetFirstRenderer();</div><div> renderer->AddVolume( volume ); </div><div> myQWidget->GetRenderWindow()->Render();</div>
<div> renderer->ResetCamera();</div><div>}</div></font></div></div><div><div><div><p style="margin-bottom: 0cm; "><font class="Apple-style-span" face="verdana, sans-serif">Dženan</font></p></div></div></div>