我在python 2.7 Anaconda上使用simpleITK,我做了一个测试读取一个大的tif文件(大约2Gb),将其转换为numpy数组,将其转换回tif并保存在磁盘上,新文件大约为4Gb(我尝试了两种不同的保存方式,但结果是一样的)。数据类型在每一步都是相同的,任何想法为什么会发生?谢谢 !。 :)
import SimpleITK as sitk
p1 = sitk.ReadImage('my_image.tif') #read image
# print properties
print 'Width ',p1.GetWidth()
print 'Height ',p1.GetHeight()
print 'Depth ',p1.GetDepth()
print 'Dimension ',p1.GetDimension()
print 'Pixel Id Value ',p1.GetPixelIDValue()
print 'Pixel ID Type ',p1.GetPixelIDTypeAsString()
print 'Size ',p1.GetSize()
print '__________ '
p1_np = sitk.GetArrayFromImage(p1) #get numpy array from Image
print 'Array type ',p1_np.dtype #print array type
print '__________ '
p1_np_img = sitk.GetImageFromArray(p1_np) #get image from array
# print properties
print 'Width ',p1_np_img.GetWidth()
print 'Height ',p1_np_img.GetHeight()
print 'Depth ',p1_np_img.GetDepth()
print 'Dimension ',p1_np_img.GetDimension()
print 'Pixel Id Value ',p1_np_img.GetPixelIDValue()
print 'Pixel ID Type ',p1_np_img.GetPixelIDTypeAsString()
print 'Size ',p1_np_img.GetSize()
sitk.WriteImage(p1_np_img,'my_image_test_a.tif') #save new image
sitk.WriteImage(sitk.Cast(p1_np_img,sitk.sitkUInt16),'my_image_test_b.tif') #save new image
print "End "
结果如下:
答案 0 :(得分:0)
原始图像被压缩(LZW压缩),simpleITK上传它们并以原始大小保存它们。我在WriteImage中使用了“useCompression' = True”选项,但图像的大小几乎相同,为3.8 Gb。因此,我需要在SimpleITK之外使用压缩方法,这超出了本文中的讨论。无论如何,谢谢你的意见。 WriteImage(图像,std :: string const& fileName,bool useCompression = False)