2015-11-05 66 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是 改變圖像數據類型的推薦方式。