[vtkusers] differences in window/leveling (new, no so big, attachment)
José M. Rodriguez Bacallao
jmrbcu at gmail.com
Tue Dec 18 08:20:35 EST 2012
thanks david, I understand what you mean and this apply to tow path of the
pipeline:
format in (vtkgdcm.VTK_LOOKUP_TABLE, vtkgdcm.VTK_INVERSE_LUMINANCE) and
format == vtkgdcm.VTK_YBR
but the format of the image I am displaying is: VTK_LUMINANCE so, it goes
for this path:
else:
scalar_range = vtk_image.GetScalarRange()
image_mapper.SetInput(vtk_image)
so, there is no vtkImageMapToColors involved, just the vtkImageProperty and
the image is dark with this path
any suggestions?
also, when the image format type is VTK_LOOKUP_TABLE, if I only use
vtkImageProperty and set the property lookup table to the lookup table of
the image, the colors of the displayed image are wrong.
On Mon, Dec 17, 2012 at 5:24 PM, David Gobbi <david.gobbi at gmail.com> wrote:
> Your image is dark because you are applying the window/level
> _after_ you have converted the image to RGB. After the image
> is RGB, it has values in the range [0,255]. So of course if you
> apply a window/level of 1995/998 to such an image, the result
> is going to be very dark.
>
> To summarize: you can apply the window/level with
> vtkImageMapToColors, or you can apply the window/level
> with vtkImageProperty, but _not with both_.
>
> Two ways to fix:
>
>
> Option #1: Apply window/level with vtkImageMapToColors
>
> lut.SetRange(level-0.5*window, level+0.5*window)
> image_property.SetColorWindow(255.0)
> image_property.SetColorLevel(127.5)
>
>
> Option #2: Apply window/level with vtkImageProperty:
>
> Remove vtkImageMapToColors from your pipeline (completely!)
> image_property.SetColorWindow(window)
> image_property.SetColorLevel(level)
> image_property.SetLookupTable(lut) # optional
>
> - David
>
>
> On Mon, Dec 17, 2012 at 2:48 PM, José M. Rodriguez Bacallao
> <jmrbcu at gmail.com> wrote:
> > sorry, the attachment was a little big so I had to scale it down, here is
> > again:
> >
> > hello, while I was testing a dicom viewer I am developing I noticed
> > differences in window leveling from the pipeline I am using with respect
> to
> > one of the viewers I use as reference. I attached the snapshot, the left
> > window is my viewer and the right is one of my reference viewers. Both
> have
> > the same window/level: 1995/998, but the image displayed at left is
> darker
> > than right, here is part of the pipeline I use:
> >
> > vtk_image = image.vtk_image
> > self.view = vtk.QVTKWidget(self)
> > self.view.setFocusProxy(self)
> > # add the view to the internal layout
> > self.setUpdatesEnabled(False)
> > self.layout().takeAt(1)
> > self.layout().addWidget(self.view)
> > self.setUpdatesEnabled(True)
> >
> > # create the main interactor style
> > style = vtk.vtkInteractorStyleImage()
> > style.SetInteractionModeToImageSlicing()
> >
> > self.view.GetRenderWindow().GetInteractor().SetInteractorStyle(style)
> >
> > # the axial orientation
> > style.SetZViewRightVector((1, 0, 0))
> > style.SetZViewUpVector((0, -1, 0))
> >
> > # the sagital orientation
> > style.SetXViewRightVector((0, 1, 0))
> > style.SetXViewUpVector((0, 0, 1))
> >
> > # the coronal orientation
> > style.SetYViewRightVector((1, 0, 0))
> > style.SetYViewUpVector((0, 0, 1))
> >
> > image_mapper = vtk.vtkImageResliceMapper()
> > image_mapper.SliceFacesCameraOn()
> > image_mapper.SliceAtFocalPointOn()
> > image_mapper.JumpToNearestSliceOn()
> > image_mapper.BorderOff()
> > self.image_mapper = image_mapper
> >
> > format = image.image_format
> > if format in (vtkgdcm.VTK_LOOKUP_TABLE,
> > vtkgdcm.VTK_INVERSE_LUMINANCE):
> > lut = vtk_image.GetPointData().GetScalars().GetLookupTable()
> >
> > if isinstance(lut, vtkgdcm.vtkLookupTable16):
> > color_filter = vtkgdcm.vtkImageMapToColors16()
> > else:
> > color_filter = vtk.vtkImageMapToColors()
> >
> > color_filter.SetInputConnection(vtk_image.GetProducerPort())
> > color_filter.SetLookupTable(lut)
> >
> > if format == vtkgdcm.VTK_LOOKUP_TABLE:
> > color_filter.SetOutputFormatToRGB()
> > elif format == vtkgdcm.VTK_INVERSE_LUMINANCE:
> > color_filter.SetOutputFormatToLuminance()
> >
> > color_filter.Update()
> > scalar_range = color_filter.GetOutput().GetScalarRange()
> > image_mapper.SetInputConnection(color_filter.GetOutputPort())
> > del color_filter
> > elif format == vtkgdcm.VTK_YBR:
> > color_filter = vtkgdcm.vtkImageYBRToRGB()
> > color_filter.SetInputConnection(vtk_image.GetProducerPort())
> > color_filter.Update()
> > scalar_range = color_filter.GetOutput().GetScalarRange()
> > image_mapper.SetInputConnection(color_filter.GetOutputPort())
> > del color_filter
> > else:
> > scalar_range = vtk_image.GetScalarRange()
> > image_mapper.SetInput(vtk_image)
> >
> > try:
> > # here the window width will be: 1995 and window level: 998
> > level = image.window_level[0]
> > window = image.window_width[0]
> > except KeyError, IndexError:
> > window = scalar_range[1] - scalar_range[0]
> > level = 0.5 * (scalar_range[1] + scalar_range[0])
> >
> > image_property = vtk.vtkImageProperty()
> > image_property.SetColorWindow(window)
> > image_property.SetColorLevel(level)
> > image_property.SetAmbient(0.0)
> > image_property.SetDiffuse(1.0)
> > image_property.SetOpacity(1.0)
> > image_property.SetInterpolationTypeToLinear()
> > self.image_property = image_property
> >
> > image_actor = vtk.vtkImageSlice()
> > image_actor.SetMapper(image_mapper)
> > image_actor.SetProperty(image_property)
> > self.image_actor = image_actor
> >
> > image_renderer = vtk.vtkRenderer()
> > image_renderer.SetBackground(0, 0, 0)
> > self.image_renderer = image_renderer
> > image_renderer.AddViewProp(image_actor)
> > image_renderer.ResetCamera()
> > image_renderer.GetActiveCamera().ParallelProjectionOn()
> > self.render_window().AddRenderer(image_renderer)
> >
> > self.set_orientation('AXIAL')
> > self.render()
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20121218/593e736a/attachment.htm>
More information about the vtkusers
mailing list