[vtkusers] Set window/level and convert image DICOM

Pedro Paulo pedropaulobmjr at hotmail.com
Fri Jan 22 14:11:02 EST 2016


I would like to set the WindowCenter and WindowWidth with which the image is converted to png, when I do the conversion using the program I sent, it makes the window and level automatically, which I do not want it to do. For your second question, yes, I want to calculate my own window and level when I convert the image.
For example, I want to make a conversion with the values ww=2000, wl=250 and at another time to make a conversion into the same image with the values ww=3000, wl=150.


I tried using your code like this:


from vtk import *

reader = vtkDICOMImageReader()
reader.SetFileName("img.dcm")
reader.Update()
image = reader.GetOutput()

###########################################################
ww = 2500
wl = 200

greymap = vtkScalarsToColors()
greymap.SetRange(wl-0.5*ww, wl+0.5*ww)

applymap = vtkImageMapToColors()
applymap.SetInputConnection(reader.GetOutputPort())
applymap.SetLookupTable(greymap)

applymap.SetOutputFormatToRGB()
applymap.Update()
###########################################################

and I got the following error:

Traceback (most recent call last):
  File "ff.py", line 12, in <module>
    greymap = vtkScalarsToColors ()
TypeError: this is an abstract class and can not be instantiated



________________________________
De: David Gobbi <david.gobbi at gmail.com>
Enviado: sexta-feira, 22 de janeiro de 2016 18:40
Para: Pedro Paulo
Cc: vtkusers at vtk.org
Assunto: Re: [vtkusers] Set window/level and convert image DICOM

Hi Pedro,

I think that I misunderstood your question.  Do you want to apply the preset
WindowCenter and WindowWidth that are stored in the DICOM meta data?
Or do you want to compute your own window and level?

 - David


On Thu, Jan 21, 2016 at 11:46 PM, Pedro Paulo <pedropaulobmjr at hotmail.com<mailto:pedropaulobmjr at hotmail.com>> wrote:

I'm using python to do this, my code is below, how do I add your code in mine to give right?

Does your vtk-dicom package set the parameters ww/wl and do the conversion?

Sorry my bad english. [&#X1f60a]



from vtk import *

reader = vtkDICOMImageReader()
reader.SetFileName('image.dcm')
reader.Update()
image = reader.GetOutput()

shiftScaleFilter = vtkImageShiftScale()
shiftScaleFilter.SetOutputScalarTypeToUnsignedChar()
shiftScaleFilter.SetInputConnection(reader.GetOutputPort())

shiftScaleFilter.SetShift(-1.0*image.GetScalarRange()[0])
oldRange = image.GetScalarRange()[1] - image.GetScalarRange()[0]
newRange = 255

shiftScaleFilter.SetScale(newRange/oldRange)
shiftScaleFilter.Update()

writer = vtkPNGWriter()
writer.SetFileName('output.jpg')
writer.SetInputConnection(shiftScaleFilter.GetOutputPort())
writer.Write()



________________________________
De: David Gobbi <david.gobbi at gmail.com<mailto:david.gobbi at gmail.com>>
Enviado: quinta-feira, 21 de janeiro de 2016 22:00
Para: Pedro Paulo
Cc: vtkusers at vtk.org<mailto:vtkusers at vtk.org>
Assunto: Re: [vtkusers] Set window/level and convert image DICOM

Just to clarify my previous email, all CT and PET DICOM images have
RescaleIntercept/RescaleSlope, but for CT, it is not uncommon to have
RescaleIntercept = 0 and RescaleSlope = 1.  In any case, these fields
cannot be ignored if you plan to use WindowCenter and WindowWidth.

On Thu, Jan 21, 2016 at 2:47 PM, David Gobbi <david.gobbi at gmail.com<mailto:david.gobbi at gmail.com>> wrote:
Hi Pedro,

I recommend using vtkImageMapToColors to apply a greyscale lookup table.
In python, for example, it would look like this:

from vtk import *

greymap = vtkScalarsToColors()
greymap.SetRange(wl - 0.5*ww, wl + 0.5*ww)

applymap = vtkImageMapToColors()
applymap.SetInputConnection(...)
applymap.SetLookupTable(greymap)
applymap.SetOutputFormatToRGB() # or use SetOutputFormatToLuminance()
applymap.Update()

Be careful, though, because according to the DICOM standard the
VOI LUT (i.e. window/level) should only be applied after the Modality LUT
(i.e. the RescaleIntercept/RescaleSlope).  Probably around half of the
CT images and nearly all PET images have RescaleIntercept/RescaleSlope,
so if you do not take these into account, you'll get an incorrect result.  You'd
be safe with MRI, which does not have RescaleIntercept/Slope.

So, of course, I'd suggest that you use my vtk-dicom package ;-)
https://github.com/dgobbi/vtk-dicom
It has a filter called vtkDICOMApplyRescale that will correctly apply the
rescale information.

 - David


On Thu, Jan 21, 2016 at 2:22 PM, Pedro Paulo <pedropaulobmjr at hotmail.com<mailto:pedropaulobmjr at hotmail.com>> wrote:

Hi people, I want to convert a DICOM image to a png, but, before converting, I would like to set the parameters of Window Width and Window Center, to that the png image looks like if the parameters of ww/wl were seen in a viewer, does anyone know how could I do this?
Thanks!



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160122/df6eb78e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OutlookEmoji-&#X1f60a.png
Type: image/png
Size: 488 bytes
Desc: OutlookEmoji-&#X1f60a.png
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160122/df6eb78e/attachment.png>


More information about the vtkusers mailing list