# how to apply CT Presets and LUT simultaneously using vtkimageviewer2

**URL:** https://discourse.vtk.org/t/how-to-apply-ct-presets-and-lut-simultaneously-using-vtkimageviewer2/726
**Category:** Support
**Created:** [April 10, 2019, 9:09am UTC](https://discourse.vtk.org/t/how-to-apply-ct-presets-and-lut-simultaneously-using-vtkimageviewer2/726 "2019-04-10T09:09:29Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![Aravind](https://discourse.vtk.org/user_avatar/discourse.vtk.org/aravind/32/1070_2.png) [@Aravind](https://discourse.vtk.org/u/Aravind)
#### Post date: [April 10, 2019, 9:09am UTC](https://discourse.vtk.org/t/how-to-apply-ct-presets-and-lut-simultaneously-using-vtkimageviewer2/726/1 "2019-04-10T09:09:29Z")

</div>

Hello - I am building an application where by I have the options to apply LUT as well as CT Presets.

I am using vtkimageviewer2 for rendering the slices and I am using a nii image reader.

Not sure if what I am doing is the right way to apply CT Presets along with Colour Palettes simultaneously.

PathDicom = “/Desktop/TempDICOM/0/0.nii”  
reader = vtk.vtkNIFTIImageReader()  
reader.SetFileName(PathDicom)  
reader.Update()

# get the histogram range to optimally view the images

hist = vtk.vtkImageHistogramStatistics()  
hist.SetInputConnection(reader.GetOutputPort())  
hist.Update()  
hist\_range = hist.GetAutoRange()

# 1500 and 300 - is bone window

windowlevel = vtk.vtkImageMapToWindowLevelColors()  
windowlevel.SetInputConnection(self.reader.GetOutputPort())  
windowlevel.SetWindow(1500)  
windowlevel.SetLevel(300)  
windowlevel.Update()

lut = vtk.vtkLookupTable()  
ctf = vtk.vtkColorTransferFunction()  
ctf.SetColorSpaceToDiverging()  
ctf.AddRGBPoint(0, 0, 0, 0)  
ctf.AddRGBPoint(0.06, 0, 0, 0.36)  
ctf.AddRGBPoint(0.16, 0.29, 0, 0.75)  
ctf.AddRGBPoint(0.22, 0.48, 0, 0.89)  
ctf.AddRGBPoint(0.31, 0.68, 0, 0.6)  
ctf.AddRGBPoint(0.37, 0.76, 0, 0.36)  
ctf.AddRGBPoint(0.5, 0.94, 0.31, 0)  
ctf.AddRGBPoint(0.56, 1, 0.45, 0)  
ctf.AddRGBPoint(0.81, 1, 0.91, 0)  
ctf.AddRGBPoint(0.88, 1, 1, 0.38)  
ctf.AddRGBPoint(1, 1, 1, 1)

lut.SetNumberOfTableValues(256)  
lut.Build()

for i in range(0, 256):  
rgb = list(ctf.GetColor(float(i) / 256)) + [1]  
lut.SetTableValue(i, rgb)

# the LUT in the above line is having the colour gradient that I would like to apply on the image.

# now I build this LUT

lut.SetTableRange(hist\_range[0], hist\_range[1])  
lut.SetSaturationRange(0, 0)  
lut.SetHueRange(0, 1)  
lut.SetValueRange(0, 1)  
lut.SetNumberOfColors(256)  
lut.Build()

# use vtkimageviewer2 render the image.

# here I use the window level lookup set previously to bone window as the inout to the image viewer

# the color looktable is also set to the image viewer.

imageViewer = vtk.vtkImageViewer2()  
imageViewer.SetInputConnection(windowlevel.GetOutputPort())  
#set the lookuptable  
imageViewer.GetWindowLevel().SetLookupTable(lut)

#render the image  
imageViewer.SetSlice(60)  
renderWindowInteractor = vtk.vtkRenderWindowInteractor()  
imageViewer.SetupInteractor(renderWindowInteractor)  
imageViewer.Render()  
imageViewer.GetRenderer().ResetCamera()  
imageViewer.Render()  
renderWindowInteractor.Start()

What I have done above is it the right way of applying CT Presets and Colour LUT simultaneously?

Thanks,  
Aravind
