[vtkusers] displaying dicom images with the right orientation
Jothy
jothybasu at gmail.com
Thu Mar 17 11:03:23 EDT 2011
If you use vtkImageReslice you will be doing the transformation with
vtkImageReslice (indirectly). But again you will have problems with
different Image Orientation patient.
By transforming , I am not modifying the pixel values, its only the
coordinates to match the vtk system.
Jothy
On Thu, Mar 17, 2011 at 2:53 PM, Lic. José M. Rodriguez Bacallao
<jmrbcu at gmail.com> wrote:
> well, I think it could be done that way but I have read in some place
> (the book from BioImage) that one never should modify the original
> image, that's why I am asking. In one pipeline I use the camera, in
> the other one I use vtkImageReslice, which one is more suited to what
> I need to achieve.
>
> On 3/17/11, Jothy <jothybasu at gmail.com> wrote:
>> Hi Lic
>>
>> I uses vtkTransform to transform the vtkImageData rather than
>> transforming the camera. Because I wanted to overlay the RT dose on
>> the image. It works very well. The only problem is the the
>> coordinates too get transformed. I mean if you have +30, -50, it will
>> become -30,50.
>>
>> Jothy
>>
>> On Thu, Mar 17, 2011 at 1:59 PM, Lic. José M. Rodriguez Bacallao
>> <jmrbcu at gmail.com> wrote:
>>> so, no one at all?
>>>
>>> On 3/14/11, Lic. José M. Rodriguez Bacallao <jmrbcu at gmail.com> wrote:
>>>> any ideas?
>>>>
>>>> On 3/14/11, Lic. José M. Rodriguez Bacallao <jmrbcu at gmail.com> wrote:
>>>>> i folks, I just finished two versions of a pipeline for displaying
>>>>> dicom images with the right display position and orientation. I am
>>>>> using gdcm vtkGDCMImageReader to read the images (and IPPSort to
>>>>> sort). In both pipelines I set the reader's FileLoewerLeft to "On" and
>>>>> in both I achieve the desired result. The question is which pipeline
>>>>> is better for wat I am trying to do (display the images the right way
>>>>> and later display a MPR view) or use one for display simple slices and
>>>>> the other one to make a MPR. One pipeline version is using the camera
>>>>> to achieve the right visualization and the other one is using
>>>>> vtkImageReslice.
>>>>>
>>>>> here is an example program with the two pipelines (left: Camera,
>>>>> right: vtkImageReslice)
>>>>>
>>>>>
>>>>> def get_left_renderer(input, dir_cosines):
>>>>> image_actor = vtk.vtkImageActor()
>>>>> image_actor.SetInput(input.GetOutput())
>>>>>
>>>>> ren_left = vtk.vtkRenderer()
>>>>> ren_left.SetViewport(0.0, 0.0, 0.5, 1.0)
>>>>> ren_left.AddActor(image_actor)
>>>>>
>>>>> camera_left = ren_left.GetActiveCamera()
>>>>> axial_matrix = vtk.vtkMatrix4x4()
>>>>> axial_matrix.DeepCopy(dir_cosines)
>>>>> axial_matrix.SetElement(1, 1, -1)
>>>>> t = vtk.vtkTransform()
>>>>> t.Identity()
>>>>> t.Concatenate(axial_matrix)
>>>>> camera_left.SetUserTransform(t)
>>>>> ren_left.ResetCamera()
>>>>>
>>>>> return ren_left
>>>>>
>>>>> def get_right_renderer(input):
>>>>> image = input.GetOutput()
>>>>> (x_min, x_max, y_min, y_max, z_min, z_max) = image.GetWholeExtent()
>>>>> (x_spacing, y_spacing, z_spacing) = image.GetSpacing()
>>>>> (x0, y0, z0) = image.GetOrigin()
>>>>>
>>>>> center = (
>>>>> x0 + x_spacing * 0.5 * (x_min + x_max),
>>>>> y0 + y_spacing * 0.5 * (y_min + y_max),
>>>>> z0
>>>>> )#+ z_spacing * 0.5 * (z_min + z_max))
>>>>>
>>>>> axial = vtk.vtkMatrix4x4()
>>>>> axial.DeepCopy((
>>>>> 1, 0, 0, center[0],
>>>>> 0, -1, 0, center[1],
>>>>> 0, 0, 1, center[2],
>>>>> 0, 0, 0, 1
>>>>> ))
>>>>>
>>>>> reslice = vtk.vtkImageReslice()
>>>>> reslice.SetInput(input.GetOutput())
>>>>> reslice.SetOutputDimensionality(3)
>>>>> reslice.SetAutoCropOutput(True)
>>>>> reslice.SetResliceAxes(axial)
>>>>>
>>>>> image_actor = vtk.vtkImageActor()
>>>>> image_actor.SetInput(reslice.GetOutput())
>>>>>
>>>>> ren_right = vtk.vtkRenderer()
>>>>> ren_right.SetViewport(0.5, 0.0, 1.0, 1.0)
>>>>>
>>>>> ren_right.AddActor(image_actor)
>>>>> ren_right.ResetCamera()
>>>>>
>>>>> return ren_right
>>>>>
>>>>> import vtk, vtkgdcm, sys
>>>>> from PyQt4 import QtGui
>>>>>
>>>>> if __name__ == '__main__':
>>>>> app = QtGui.QApplication(sys.argv)
>>>>>
>>>>> isi = vtk.vtkInteractorStyleImage()
>>>>> vtk_widget = vtk.QVTKWidget()
>>>>> vtk_widget.resize(1280,800)
>>>>> vtk_widget.GetInteractor().SetInteractorStyle(isi)
>>>>> rwin = vtk_widget.GetRenderWindow()
>>>>>
>>>>> # read the image from disk
>>>>> image_reader = vtkgdcm.vtkGDCMImageReader()
>>>>>
>>>>> image_reader.SetFileName('/home/jmrbcu/pictures/workpictures/dicom/IM66.dcm')
>>>>> image_reader.FileLowerLeftOn()
>>>>> image_reader.Update()
>>>>>
>>>>> # calculate the middle window center and width
>>>>> image = image_reader.GetOutput()
>>>>> range = image.GetScalarRange()
>>>>> center = 0.5 * (range[1] + range[0])
>>>>> width = range[1] - range[0]
>>>>>
>>>>> # create the colormap
>>>>> colormap = vtkgdcm.vtkImageMapToWindowLevelColors2()
>>>>> colormap.SetInputConnection(image_reader.GetOutputPort())
>>>>> colormap.SetWindow(width)
>>>>> colormap.SetLevel(center)
>>>>> colormap.Update()
>>>>>
>>>>> # create left and right renderers
>>>>> rwin.AddRenderer(get_left_renderer(colormap,
>>>>> image_reader.GetDirectionCosines()))
>>>>> rwin.AddRenderer(get_right_renderer(colormap))
>>>>>
>>>>> rwin.Render()
>>>>> vtk_widget.show()
>>>>>
>>>>> app.exec_()
>>>>>
>>>>> # ipp = reader.GetImagePositionPatient()
>>>>> # iop = reader.GetImageOrientationPatient()
>>>>> # row = iop[:3]
>>>>> # col = iop[3:]
>>>>> # slice = [0,0,0]
>>>>> # vtk.vtkMath().Cross(row, col, slice)
>>>>> #
>>>>> # matrix = vtk.vtkMatrix4x4()
>>>>> # for j in range(3):
>>>>> # matrix.SetElement(j, 0, row[j])
>>>>> # matrix.SetElement(j, 1, col[j])
>>>>> # matrix.SetElement(j, 2, slice[j])
>>>>> #
>>>>>
>>>>> #
>>>>> # ca.SetUserTransform(t)
>>>>> # ca.SetViewUp(0, -1, 0)
>>>>> # ca.SetFocalPoint(0, 0, 1)
>>>>> # ca.SetPosition(0,0,0)
>>>>>
>>>>> # ca.ComputeViewPlaneNormal()
>>>>> # ca.OrthogonalizeViewUp()
>>>>> # ca.ParallelProjectionOn()
>>>>> # ca.SetParallelScale(1)
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Lic. José M. Rodriguez Bacallao
>>>>> Centro de Biofisica Medica
>>>>> -----------------------------------------------------------------
>>>>> Todos somos muy ignorantes, lo que ocurre es que no todos ignoramos lo
>>>>> mismo.
>>>>>
>>>>> Recuerda: El arca de Noe fue construida por aficionados, el titanic
>>>>> por profesionales
>>>>> -----------------------------------------------------------------
>>>>>
>>>>
>>>>
>>>> --
>>>> Lic. José M. Rodriguez Bacallao
>>>> Centro de Biofisica Medica
>>>> -----------------------------------------------------------------
>>>> Todos somos muy ignorantes, lo que ocurre es que no todos ignoramos lo
>>>> mismo.
>>>>
>>>> Recuerda: El arca de Noe fue construida por aficionados, el titanic
>>>> por profesionales
>>>> -----------------------------------------------------------------
>>>>
>>>
>>>
>>> --
>>> Lic. José M. Rodriguez Bacallao
>>> Centro de Biofisica Medica
>>> -----------------------------------------------------------------
>>> Todos somos muy ignorantes, lo que ocurre es que no todos ignoramos lo
>>> mismo.
>>>
>>> Recuerda: El arca de Noe fue construida por aficionados, el titanic
>>> por profesionales
>>> -----------------------------------------------------------------
>>> _______________________________________________
>>> 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
>>>
>>
>
>
> --
> Lic. José M. Rodriguez Bacallao
> Centro de Biofisica Medica
> -----------------------------------------------------------------
> Todos somos muy ignorantes, lo que ocurre es que no todos ignoramos lo mismo.
>
> Recuerda: El arca de Noe fue construida por aficionados, el titanic
> por profesionales
> -----------------------------------------------------------------
>
More information about the vtkusers
mailing list