python - 如何在 Python 中读取 16Uint 图像

标签 python image opencv matplotlib

我有一张医学 16 位无符号 jpeg 图像,我需要用 python 读取它。 对于我的项目,这些图像只能通过 mathlab 读取,我需要读取其实际像素值,并需要对该值进行一些数学运算。 您可以在以下链接中找到图片

https://drive.google.com/file/d/0B4l5GiM7kBXraDEyMXdseENfUlE/edit?usp=sharing

当我被要求在 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)

raise IOError("cannot identify image file")
IOError: cannot identify image file

请帮忙解决我的问题

最佳答案

这似乎是 How we can read 16 un signed integer(16 uint) jpeg files in python 的副本

我在 https://drive.google.com/file/d/0B4l5GiM7kBXraDEyMXdseENfUlE/edit?usp=sharing 查看了您的图片.可以明确的是,它是一张采用哈夫曼编码的 16 位灰度无损 JPEG 图像。但是,对于无损编码,至少有:

  • JPEG 无损(稀有,旧)
  • JPEG-LS(很少见,没那么老)
  • JPEG2000(更新)

有关这些的更多信息,请参阅:http://en.wikipedia.org/wiki/Lossless_JPEG

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

我还尝试查询 ImageMagickidentify,它提供了更多信息:

identify.im6: Unsupported JPEG process: SOF type 0xc3 `/tmp/di.jpg' @ error/jpeg.c/JPEGErrorHandler/316.

现在 SOF 类型在 JPEG 中很重要。错误消息表明有问题的文件是“JPEG 无损”文件。 (这可能是因为它采用了霍夫曼编码这一事实。)令人讨厌的是,这种类型的文件中使用的编码方案与标准 JPEG 完全不同,标准 JPEG 库不支持它。

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

我尝试了后者,它的命令行工具确实识别了该文件并将其解码为更有用的东西(灰度 PPM 文件)。

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

关于python - 如何在 Python 中读取 16Uint 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24837867/

相关文章:

python - 我可以在 Tensorflow 联合学习 (TFF) 的 keras 模型中使用 class_weight

html - 将图像作为背景图像,将自身拉伸(stretch)到页面末尾

c++ - 压缩原始图像缓冲区

opencv - 如何更新Opencv.3?

python - Seaborn pairplot 和 NaN 值

Python JIRA SOAPpy 在 findIssue 上烦人的重定向

python - Pandas groupby 到 to_csv

html - CSS 技巧 : make images load horizontally instead of vertically

python - 如何在Python和Opencv中检测八边形

matlab - 估计Matlab或openCV中棋盘格点的转换