rawPy如何读取DNG帧

时间:2017-01-05 23:24:18

标签: python image-processing imagej dng

这个问题是对我之前的dng-raw-pictures-imported-as-16-bit-deep-but-unexpected-plt-show-result的跟进,之后我继续搜索。

由于回复获得了16位的可视化,但每个通道的通道运行良好。我决定采用一系列50个BIAS帧。这是在完全黑暗中使用ISO 100拍摄的照片和曝光时间为1/8000秒(最短曝光和最低ISO)。偏置框显示传感器在没有光进入时看到的内容,传感器后面的ADC应为每个像素提供“0”值。情况并非总是如此,我想分析这个值的变化程度。我不期望大的变化或大的错误值。

使用前一个问题中解释的方法,我逐个读取我的50帧并查看随机像素的R,G,B值(随机但始终是相同的),让我们说像素的位置[1500,1500]。

在运行序列时,我将像素值与行和列的平均值进行比较。除了平均值,我还计算了行和列的标准偏差。

这是我发现的:

Analysis ISO 100, Exp 1/8000s

就我个人而言,我发现这些波动很大,并且对于14位深度的ADC没有预料到这一点。可能我对数据的看法有些不对,我犹豫但担心它必须再做一些像ColorMapping,Demosaicing等的东西。

为了交叉检查,我想确保可以复制我从像素[1500,1500]的Python脚本中获得的值。因此我安装了ImageJ或者在其最后一个版本Fiji中调用。使用DCRAWreader插件,我可以读取相同的16位帧,并使用Pixel Inspect工具查找位置[1500,1500]中着名像素的值。

ImageJ值与我用Python获得的值不一致。

我现在的问题是:“我应该如何解释用Python上传的图片像素背后的rgb数字?它们如何与像素的传感器井中生成的电子数量相关联,并由ADC转换为数字价值?“

1 个答案:

答案 0 :(得分:0)

后处理选项及其默认值可在https://letmaik.github.io/rawpy/api/rawpy.Params.html找到。

在偏置帧上创建统计数据时,您需要禁用任何自动调整亮度等的机​​制。以下选项可使您的绘图更有意义:output_bps=16, no_auto_scale=True, no_auto_bright=True, gamma=(1,1)

您还可以更进一步,通过访问raw.raw_image这是一个2D numpy数组,对非插值的RAW Bayer数据进行分析。

电子数和RAW值之间应该存在或多或少的线性关系,但是如果没有校准将RAW值分配给电子计数则几乎不可能。对于将变换应用于RAW值的消费级相机尤其如此。