2015-11-05 69 views
2

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

enter image description here

我知道我需要重新缩放图像的像素,将其转换,但我不知道怎么办。有谁知道我可以如何正确地进行转换?

下面,我在Python代码:在MRI和CT模式

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

回答

1

我做了转换,这里是我的代码:

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

DICOMs一般都是短期的类型,而你无情地铸造形象为unsigned char。 如果你想获得一个相应的UCHAR图像,你应该使用vtkImageShiftScale,就像vtkImageCast文档说:

警告 作为vtkImageCast只投下值不缩放他们,它的使用不recommented。 vtkImageShiftScale是 改变图像数据类型的推荐方式。