如何在Python中读取16Uint图像

如何在Python中读取16Uint图像,python,image,opencv,matplotlib,Python,Image,Opencv,Matplotlib,我有一个医学16未签名jpeg图像,我需要用python阅读它。 对于我的项目,这些图像只能用mathlab读取。我需要读取它的实际像素值,并且需要对这些值进行一些数学运算。 您可以在以下链接中找到该图像 当我被要求在mathlab中获取图像信息时,下面的描述就来了 i = imfinfo('di.jpg') i = Filename: [1x56 char] FileModDate: '14-Jul-2014 15:22:13' FileSize:

我有一个医学16未签名jpeg图像,我需要用python阅读它。 对于我的项目,这些图像只能用mathlab读取。我需要读取它的实际像素值,并且需要对这些值进行一些数学运算。 您可以在以下链接中找到该图像

当我被要求在mathlab中获取图像信息时,下面的描述就来了

i = imfinfo('di.jpg')

i = 

       Filename: [1x56 char]
    FileModDate: '14-Jul-2014 15:22:13'
       FileSize: 1044064
         Format: 'jpg'
  FormatVersion: ''
          Width: 1024
         Height: 1024
       BitDepth: 16
      ColorType: 'grayscale'
FormatSignature: ''
NumberOfSamples: 1
   CodingMethod: 'Huffman'
  CodingProcess: 'Lossless'
        Comment: {'Created by AccuSoft Corp.'}
我已经使用matplotlib、opencv、scikitImage、scipy、medpy、PIL库来阅读python中的图像。 我无法在这些类型中读取此图像

当我在python中使用时,会出现以下错误 代码: 导入图像 img=Image.open('di.jpg') 打印(img)


请帮助解决我的问题

这似乎是

我看了一下你的照片。清楚的是,这是一幅16位灰度无损JPEG图像,采用哈夫曼编码。然而,对于无损编码,至少有:

  • JPEG无损(罕见、旧)
  • JPEG-LS(非常罕见,不太旧)
  • JPEG2000(更新版)
有关这些方面的更多信息,请参阅:

cel
在其评论中提到的
GDCM
库使用
CharLS
库读取JPEG-LS。这个库确实有Python绑定,但不幸的是拒绝加载图像,因为它不是JPEG-LS文件。(但是,YMMV,请参见下面的malat评论。)

我还试图查询
ImageMagick
identify
,它提供了更多的信息:

identify.im6: Unsupported JPEG process: SOF type 0xc3 `/tmp/di.jpg' @ error/jpeg.c/JPEGErrorHandler/316.
现在,SOF类型在JPEG中很重要。错误消息表明该文件是“JPEG无损”文件。(这可能是因为它采用了哈夫曼编码。)令人讨厌的是,这类文件中使用的编码方案与标准JPEG完全不同,标准JPEG库不支持它

似乎至少有两个开源库支持文件格式:

  • IJG的JPEG库版本6b(旧!)用特殊补丁补丁
  • 托马斯·里希特的LibJPEG:
我尝试了后者,它的命令行工具确实识别了该文件并将其解码为更有用的文件(灰度PPM文件)


因此,这至少提供了一条路线。您必须编译并安装该库,然后为其创建必要的Python绑定。或者,您可以将命令行工具用作外部转换工具,并与子流程一起运行,例如,
子流程
。最好的方法取决于您的平台。

为什么不使用matlab将其写入.mat文件并使用scipy读取此文件?我正在开发一个需要读写和计算值的项目,该项目将在基于服务器的环境中工作。因此,请向我推荐一种方法,而不是Mathlab我不熟悉这类数据,但也许你应该看看
GDCM
,看看你是否能用这个工具解决你的问题。它似乎有一个python包装,但我没有仔细看。谢谢你的重播。但是这些方法不适用于我的文件GDCM可以很好地读取图像。从命令行:
$gdcmimg di.jpg di.dcm
。完成。GDCM使用带有补丁的ijg库来处理16位无损编码。@malat:谢谢。我对我的答案进行了一些编辑,以确认它可能也适用于gdcm。
identify.im6: Unsupported JPEG process: SOF type 0xc3 `/tmp/di.jpg' @ error/jpeg.c/JPEGErrorHandler/316.