【问题标题】:How to Read 16Uint Images in Python如何在 Python 中读取 16Uint 图像
【发布时间】:2014-09-10 08:25:30
【问题描述】:

我有一张医疗 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') 打印(图片)

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

请帮忙解决我的问题

【问题讨论】:

  • 为什么不用matlab把它写成.mat文件,用scipy读取这个文件?
  • 我正在开发一个需要读写和计算值的项目,该项目将在基于服务器的环境中运行。所以请给我一个方法而不是数学实验室
  • 我不熟悉这类数据,但也许你应该看看GDCM,看看你能不能用那个工具解决你的问题。好像有python wrapper,不过没仔细看。

标签: python image opencv matplotlib


【解决方案1】:

这似乎与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 绑定,但不幸的是拒绝加载图像,因为它不是 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 绑定。或者,您可以将命令行工具用作外部转换工具并使用例如subprocess 运行它们。最佳方法取决于您的平台。

【讨论】:

  • 感谢您的重播。但这些方法不适用于我的文件
  • gdcm 可以正常读取图像。从命令行:$ gdcmimg di.jpg di.dcm。完毕。 GDCM 使用带有补丁的 ijg 库来处理 16 位无损编码。
  • @malat:谢谢。我稍微编辑了我的答案,以承认它也可以与 gdcm 一起使用。
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
相关资源
最近更新 更多