【问题标题】:DNG raw pictures imported as 16 bit deep but unexpected plt.show() resultDNG 原始图片导入为 16 位深度但意外 plt.show() 结果
【发布时间】:2017-01-03 22:04:55
【问题描述】:

尝试在 Python 中使用 rawpy 处理原始 DNG 图片以奇怪的结果结束。

import rawpy
import imageio
from matplotlib import pyplot as plt

path = '/home/stefan/AIJ/RAW.DNG'
with rawpy.imread(path) as raw:
    rgb = raw.postprocess()
plt.imshow(rgb)
plt.show()

结果是一个 8 位值的 rgb 图片数组,而我的相机生成 14 位原始图片。

可视化rgb 数组给出了预期的结果:

通过一些谷歌搜索,我了解到可以导入相同的文件,但输出为 16 位。

我在后处理函数中使用了以下参数:

rgb = raw.postprocess(output_bps=16,demosaic_algorithm=None,output_color = rawpy.ColorSpace.Adobe)

现在rgb 数组包含 16 位值,但可视化结果如下:

谁能告诉我如何获得类似于第一个结果但处理 16 位值的可视化?

最初我认为这与我的相机生成 14 位图像而不是 16 位的事实有关,但是将参数 output_bps 更改为 14 会得到更差的可视化结果。

提前致谢!

根据要求,我会在此处添加 PENTAX K-5 的原始图片,但它有 18MB 大,并且论坛有 2MB 的限制(可能是另一种传递文件的方式?)。

【问题讨论】:

  • 你能分享你的原始文件吗?普通相机似乎不太可能输出不需要去马赛克的 DNG……或者它不是普通相机吗?
  • 如果不应用去马赛克,为什么还要使用 ColorSpace.Adobe?
  • 这是我不由自主的问自己,这张图需要去马赛克吗?但是因为 output_bps=8 bit 输出没问题,我没有考虑。
  • 在第二张奇怪的照片上,我看到右下角的树,所以我快到了。我仍然不明白去马赛克的机制,什么时候需要,什么时候不需要。

标签: python image-processing matplotlib dng


【解决方案1】:

我认为问题与您阅读图像的方式无关,因为imshow 不显示 16 位 RGB 图像。因此,如果您有兴趣直观地检查 16 位图像的读取结果,我建议您单独检查波段,使用

plt.imshow(rgb[:, :, 0])

每个频段以此类推;或将 rgb 转换为 8 位并显示,使用

rgb8 = (rgb / 256).astype('uint8')
plt.imshow(rgb8)

【讨论】:

  • 非常感谢 jdmcbr!我会仔细检查您建议的解决方案。我通过网上的一些搜索看到 PyQtGraph 模块能够可视化 16 位图片。有人有这个模块的经验吗?圣
  • 尊敬的 JDMCBR,您的建议工作正常。非常感谢。我正在研究 PyQtGraph,这听起来很有希望。
  • 太好了,很高兴它有帮助。我对pyqtgraph 的有限经验并没有鼓励我使用它而不是matplotlib,但我希望它对你有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 2019-04-05
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
相关资源
最近更新 更多