python - Rawpy 原始图像模式

标签 python image-processing libraw

我正在尝试使用 RawPy 模块在 Python 中读取原始图像并对其进行去马赛克。不幸的是,该模块不提供简单的去马赛克方法,而是提供完整的后处理函数,该函数不适合我的情况,因为我想保留浮点图像,而不是使用 8 位 uint。我也不想应用 Gamma 或任何其他后处理,所以我最终手动对它们进行去马赛克。当我使用已加载 dng 图像的 RawPy 对象的 raw_pattern 方法时,我得到以下结果:

In[23] : raw_image.raw_pattern
Out[23]: array([[0, 1],
                [3, 2]], dtype=uint8)

但是 Adob​​e 的 DNG 文档说

Digital Negative Specification
September 2012
CFAPlaneColor
...
Value  
See below
Default 
0, 1, 2 (red, green, blue)

我很困惑 3 从哪里来? 如果有另一种方法对原始图像进行去马赛克也是合适的,因为我很容易替换项目的这一部分。

提前致谢!

最佳答案

rawpy(或更准确地说,底层 libraw/dcraw 软件)将两个绿色 channel 视为单独的 channel 。看看https://en.wikipedia.org/wiki/Bayer_filter您可以看到拜耳滤波器矩阵由 4 像素正方形组成,其中有 1 个蓝色像素、1 个红色像素和 2 个绿色像素。具有两个绿色像素的原因是人类视觉对绿色更加敏感并且更容易注意到噪声。通过添加更多绿色像素,可以在去马赛克/后处理过程中减少绿色 channel 中的噪声。

除了自己进行去马赛克(这可能相当困难)之外,另一种选择可能是禁用所有类型的后处理选项并输出为 16 位整数图像。我在处理天文摄影图像时使用了这种技术。请参阅项目概述中的此示例:

with rawpy.imread(path) as raw:
    rgb = raw.postprocess(gamma=(1,1), no_auto_bright=True, output_bps=16)
imageio.imsave('linear.tiff', rgb)

关于python - Rawpy 原始图像模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53701791/

相关文章:

python - 使用 fabric 和 supervisor 部署 Web 应用程序 - SIGHUP 导致服务器终止

algorithm - 通过低带宽连接上的补丁程序增量传输大图像

c - 如何使用LibRaw(c++)获取CR2图像的原始数据

c++ - LibRaw 和 OpenCV

python - 上下文管理器的单元测试失败,出现 AttributeError : __exit__

python - 变量作为 python 中调用方法的一部分

python - 我有两个 Django 网站。我如何判断用户是否已经在其中一个上进行了身份验证?

c - 从文件中读取模式并在 C 中创建该模式的 bmp 图像

ruby - 从 Ruby 中的图像集合创建拼贴画