树莓派的应用一般保存的文件都是jpg的,但是这种文件是有损的,有时候我们想要RAW文件来进行更加个性化的处理。
拍照时,我们大多数人都喜欢按下相机和手机上的快门按钮,以便几乎立即生成可视图像,通常以众所周知的 JPEG 格式编码。但是,在某些应用程序中,需要对 JPEG 的生成进行更多控制。例如,你可能想要或多或少地去噪,或者你可能觉得颜色渲染得不太正确。
这就是原始(有时是RAW)文件的来源。在这种情况下,原始图像是直接捕获从图像传感器输出的像素,无需额外处理。通常这是一种相对标准的格式,称为拜耳图像,以布莱斯拜耳的名字命名,他在 1974 年为柯达工作时开创了这项技术。这个想法不是让板载硬件 ISP(图像信号处理器)将原始拜耳图像转换为可视图片,而是使用额外的软件离线完成,通常称为原始转换器。
拜耳图像在每个像素位置仅记录一种颜色,如图所示
原始图像有时被比作旧的摄影底片,虽然许多相机供应商使用他们自己的专有格式,但最便携的原始文件格式是 Adobe 在 2004 年定义的数字负片(或DNG)格式。是如何从 Raspberry Pi 获取 DNG 文件,这样我们就可以使用我们最喜欢的原始转换器来处理它们。
大疆 OSMO + 入手初体验.上 在这篇文章里面我有写PNG,可以去看看。
许多人都熟悉该raspistill
应用程序,该应用程序从连接的摄像头捕获 JPEG 图像。raspistill
包括-r
选项,它将所有原始图像数据附加到 JPEG 文件的末尾。JPEG 查看器仍将正常显示文件,但会忽略最后附加的(数兆字节)原始数据。可以使用终端命令捕获这样的“JPEG+RAW”文件:
raspistill -r -o image.jpg
不幸的是,这种 JPEG+RAW 格式只是来自相机堆栈的格式,并且不受任何原始转换器的支持。因此,要使用它,我们必须将其转换为 DNG 文件。
这个 Python 实用程序将 Raspberry Pi 的原生 JPEG+RAW 文件转换为 DNG。PyDNG 可以从:
github.com/schoolpost/PyDNG
安装,那里有更完整的说明。简而言之,我们需要执行以下步骤:
git clone https://github.com/schoolpost/PyDNG
cd PyDNG
pip3 install src/. # note that PyDNG requires Python3
PyDNG 可以用作大型 Python 脚本的一部分,也可以单独运行。继续raspistill
之前的示例,我们可以在终端窗口中输入:
python3 examples/utility.py image.jpg
生成的 DNG 文件可以由各种原始转换器处理。有些是免费的(例如 RawTherapee 或 dcraw,尽管后者不再被官方开发或支持),并且有许多众所周知的专有选项(例如 Adobe Camera Raw 或 Lightroom)。
现在,到目前为止处理 Raspberry Pi 原始文件的问题之一是获得合理颜色的问题。以前,图像被渲染成病态的绿色,仅仅是因为没有进行色彩平衡,而绿色通常是最敏感的颜色通道。事实上,它甚至比这更糟糕,因为原始图像中的 RGB 值仅反映了传感器的光点对不同波长的敏感度,并且与我们自己的眼睛感知的颜色没有先验的一般相关性. 这是我们需要白平衡和颜色矩阵的地方。
如果场景的中性部分看起来很中性,则需要正确的白平衡乘数。我们可以用raspistill
在JPEG + RAW文件中(或者你可以衡量自己在现场的一个中立的一部分,就像灰卡)。然后需要矩阵和查找表将颜色从“相机”空间转换为最终选择的颜色空间,主要是 sRGB 或 Adobe RGB。
左边为没有处理的,右边是处理的
关于PNG的具体实现,我放链接了,自己读。(估计你也不读)
Dji Onboard SDK(边缘高性能SDK),PNG的相关文件,我这里也写过
其实还提供了DCP的文件(就是PNG的配置文件)这里就不说了。
下面是原文地址和PNG的细节实现:
还有一篇极好的文章
https://www.strollswithmydog.com/raw-file-conversion-steps/
zhttps://wwwimages2.adobe.com/content/dam/acom/en/products/photoshop/pdfs/dng_spec_1.5.0.0.pdf
https://www.raspberrypi.com/news/processing-raw-image-files-from-a-raspberry-pi-high-quality-camera/