我需要从DICOM图像转换为JPG / PNG并使用VTK保存图像,但我生成的图像与原始图像不匹配。
我知道我需要重新缩放图像的像素来转换它,但我不知道如何。有谁知道我如何正确地进行转换?
下面是我在python中的代码:
Intent myIntent = new Intent(mContext,bll.RecordService.class);
myIntent.putExtras(data.getExtras());
// Add additional extras if you need to
myIntent.putExtra(...,...);
答案 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()