我正在尝试使用 RawPy 模块在 Python 中读取原始图像并对其进行去马赛克。不幸的是,该模块不提供简单的去马赛克方法,而是提供完整的后处理函数,该函数不适合我的情况,因为我想保留浮点图像,而不是使用 8 位 uint。我也不想应用 Gamma 或任何其他后处理,所以我最终手动对它们进行去马赛克。当我使用已加载 dng 图像的 RawPy 对象的 raw_pattern 方法时,我得到以下结果:
In[23] : raw_image.raw_pattern
Out[23]: array([[0, 1],
[3, 2]], dtype=uint8)
但是 Adobe 的 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/