Python 2.7 使用VTK转换DICOM图像

Python 2.7 使用VTK转换DICOM图像,python-2.7,vtk,dicom,Python 2.7,Vtk,Dicom,我需要将DICOM图像转换为JPG/PNG,并使用VTK保存图像,但生成的图像与原始图像不匹配 我知道我需要重新缩放图像的像素来转换它,但我不知道如何转换。有人知道我如何正确地进行转换吗 下面是我的python代码: from vtk import * reader = vtkDICOMImageReader() reader.SetFileName('image.dcm') reader.Update() castFilter = vtkImageCast() castFilter.Se

我需要将DICOM图像转换为JPG/PNG,并使用VTK保存图像,但生成的图像与原始图像不匹配

我知道我需要重新缩放图像的像素来转换它,但我不知道如何转换。有人知道我如何正确地进行转换吗

下面是我的python代码:

from vtk import *

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

castFilter = vtkImageCast()
castFilter.SetOutputScalarTypeToUnsignedChar()
castFilter.SetInputConnection(reader.GetOutputPort())
castFilter.Update()

writer = vtkJPEGWriter()
writer.SetFileName('output.jpg')
writer.SetInputConnection(castFilter.GetOutputPort())
writer.Write()

MRI和CT模式中的DICOM通常是短类型的,并且你正在无情地将图像转换为无符号字符。 如果您试图获取相应的uchar图像,则应使用
vtkImageShiftScale
,就像
vtkImageCast
文档所说的那样:

警告 由于vtkImageCast只强制转换值而不重新缩放它们,因此不建议使用它。vtkImageShiftScale是推荐的 更改图像数据的类型


我进行了转换,以下是我的代码:

from vtk import vtkDICOMImageReader
from vtk import vtkImageShiftScale
from vtk import vtkPNGWriter

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()