使用VTK转换DICOM图像

时间:2015-11-05 03:33:05

标签: python-2.7 vtk dicom

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

enter image description here

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

下面是我在python中的代码:

Intent myIntent = new Intent(mContext,bll.RecordService.class);
myIntent.putExtras(data.getExtras());

// Add additional extras if you need to
myIntent.putExtra(...,...);

2 个答案:

答案 0 :(得分:3)

MRI和CT模式中的DICOM通常是短类型,并且您无情地将图像转换为unsigned char。 如果您尝试获取相应的uchar图像,则应使用void RegisterRoutes(RouteCollection routeCollection) { routeCollection.MapPageRoute("RibbetPay", "Offer/{PaymentID}/{UserName}/{PaymentTitle}", "~/Offer/UserCreateOffer.aspx"); //routeCollection.MapPageRoute("Profile", "Offer/{UserName}", "~/Offer/UserPublicProfile.aspx"); routeCollection.MapPageRoute("Route2", "Offer/{UserName}/{random1}/{random2}", "~/Offer/UserPublicProfile.aspx", false); } ,就像vtkImageShiftScale文档所说:

  

警告       由于vtkImageCast仅在不重新调整值的情况下转换值,因此不会推荐使用它。 vtkImageShiftScale是推荐的方式   更改图像数据的类型。

答案 1 :(得分: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()