前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >处理Raspberry Pi的RAW文件

处理Raspberry Pi的RAW文件

作者头像
云深无际
发布于 2022-02-09 02:34:28
发布于 2022-02-09 02:34:28
1.1K00
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

树莓派的应用一般保存的文件都是jpg的,但是这种文件是有损的,有时候我们想要RAW文件来进行更加个性化的处理。

拍照时,我们大多数人都喜欢按下相机和手机上的快门按钮,以便几乎立即生成可视图像,通常以众所周知的 JPEG 格式编码。但是,在某些应用程序中,需要对 JPEG 的生成进行更多控制。例如,你可能想要或多或少地去噪,或者你可能觉得颜色渲染得不太正确。

这就是原始(有时是RAW)文件的来源。在这种情况下,原始图像是直接捕获从图像传感器输出的像素,无需额外处理。通常这是一种相对标准的格式,称为拜耳图像,以布莱斯拜耳的名字命名,他在 1974 年为柯达工作时开创了这项技术。这个想法不是让板载硬件 ISP(图像信号处理器)将原始拜耳图像转换为可视图片,而是使用额外的软件离线完成,通常称为原始转换器。

拜耳图像在每个像素位置仅记录一种颜色,如图所示

原始图像有时被比作旧的摄影底片,虽然许多相机供应商使用他们自己的专有格式,但最便携的原始文件格式是 Adobe 在 2004 年定义的数字负片(或DNG)格式。是如何从 Raspberry Pi 获取 DNG 文件,这样我们就可以使用我们最喜欢的原始转换器来处理它们。

大疆 OSMO + 入手初体验.上 在这篇文章里面我有写PNG,可以去看看。

许多人都熟悉该raspistill应用程序,该应用程序从连接的摄像头捕获 JPEG 图像。raspistill包括-r选项,它将所有原始图像数据附加到 JPEG 文件的末尾。JPEG 查看器仍将正常显示文件,但会忽略最后附加的(数兆字节)原始数据。可以使用终端命令捕获这样的“JPEG+RAW”文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
raspistill -r -o image.jpg

不幸的是,这种 JPEG+RAW 格式只是来自相机堆栈的格式,并且不受任何原始转换器的支持。因此,要使用它,我们必须将其转换为 DNG 文件。

这个 Python 实用程序将 Raspberry Pi 的原生 JPEG+RAW 文件转换为 DNG。PyDNG 可以从:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
github.com/schoolpost/PyDNG

安装,那里有更完整的说明。简而言之,我们需要执行以下步骤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/schoolpost/PyDNG
cd PyDNG
pip3 install src/.  # note that PyDNG requires Python3

PyDNG 可以用作大型 Python 脚本的一部分,也可以单独运行。继续raspistill之前的示例,我们可以在终端窗口中输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的细节实现:

还有一篇极好的文章

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.strollswithmydog.com/raw-file-conversion-steps/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zhttps://wwwimages2.adobe.com/content/dam/acom/en/products/photoshop/pdfs/dng_spec_1.5.0.0.pdf
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.raspberrypi.com/news/processing-raw-image-files-from-a-raspberry-pi-high-quality-camera/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Struts 1高级应用
在前面两章中,我们学习了Struts 1的基础知识,包括Struts 1的运行原理、体系结构和标签库等。Struts作为经典的MVC框架给开发人员带来了更加简单和高效的开发模式,并且增强了应用程序的健壮性、重用性和扩展性。
张哥编程
2024/12/17
950
Struts 1高级应用
struts2随笔
1、struts.properties配置常量等同于struts.xml中配置(置于类加载路径下面) struts.multipart.maxSize文件上传最大大小 struts.action.ex
用户1141560
2017/12/26
1.1K0
struts2国际化
在struts2中需要做国际化的有: jsp页面的国际化,action错误信息的国际化,转换错误信息的国际化,校验错误信息的国际化 jsp页面的国际化 第一步 在src目录下新建tanggao_en_
汤高
2018/01/11
9210
struts2国际化
Java EE实用教程笔记----(5)第五章 Struts 2应用进阶
今天开始第五章啦,本章主要内容:Struts 2拦截器、Struts 2文件操作、Struts 2国际化。
浩Coding
2019/07/03
5040
Java EE实用教程笔记----(5)第五章 Struts 2应用进阶
Struts 2配置详解
上一章我们初步学习了Struts 2框架,包括Struts 2体系结构和运行流程,并通过登录案例介绍了使用Struts 2进行开发的基本步骤。
张哥编程
2024/12/17
2270
Struts 2配置详解
Struts2知识整理
李家酒馆酒保
2017/12/27
1.1K0
Struts2知识整理
struts2中的constant配置
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation/
黄啊码
2020/05/29
9000
day26_Struts2学习笔记_03
软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。
黑泽君
2018/10/11
5090
day26_Struts2学习笔记_03
struts2面试整理
李家酒馆酒保
2017/12/26
5970
Java学习之struts2使用
访问到http://127.0.0.1/hello.action时,则就映射到HelloWorldAction.execute方法里面,而这里的方法返回SUCCESS,struts2这样进行了配置
全栈程序员站长
2022/07/13
6140
Struts 2基础入门
前四章我们学习了Struts 1的相关知识,包括Struts 1体系结构、运行流程、标签库等。Struts 1虽然是经典的MVC框架,但是其自身具有某些天生的设计缺陷,例如:与Servlet API耦合严重、难以测试、侵入式设计等等,为了弥补这些缺陷,Struts 2框架应运而生。
张哥编程
2024/12/17
850
Struts 2基础入门
Struts2学习笔记(3)--输入校验
===================================== 1.register.jsp
py3study
2020/01/08
7730
struts2(四)之输入校验
前言   这个本来是昨天就写好的,但是不知道为什么没有保存成功!但是今天起来再写一遍就当巩固一下知识吧。 一、输入校验概述   在以前我们写一个登录页面时,并没有限制用户的输入,不管用户输入什么,我们都存入数据库中,很显然这是不行的,我们需要检测用户输入的文本是否合法,   是否符合我们需要的文本格式,符合就放行,而struts2中就有这种功能,能帮我们在服务器段进行判断,比如用户名不能为空,年龄只能在0-100之间等。现在   我们就来说说如何使用struts2中的校验功能把。   分为两种:编程式校验和
用户1195962
2018/01/18
1.2K0
struts2(四)之输入校验
【SSH快速进阶】——Struts2数据校验
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/48525349
DannyHoo
2018/09/13
4840
【SSH快速进阶】——Struts2数据校验
Struts2 类型转换和数据校验
Struts 2提供了功能强大的类型转换器来处理表现层数据,开发者可以利用Struts 2的类型转换机制来完成任意的类型转换。在应用开发中,对用户的输入进行校验是经常遇到的业务,Struts 2提供了多种方式供开发者对客户输入的数据进行校验,非常得方便灵活。
张哥编程
2024/12/18
1230
Struts2 类型转换和数据校验
java 添加 psd_psd缩略图生成上传解决方案「建议收藏」
InputStream stream = file.getInputStream();//把文件读入
全栈程序员站长
2022/07/01
8420
day25_day27_Struts2_学习回顾
        表现层、MVC模式。 2、Struts1和Struts2的一个显著区别是什么?     答:
黑泽君
2018/10/11
5860
Struts2框架的基本使用(三)
Single
2018/01/04
8520
Struts2框架的基本使用(三)
Struts2【开发Action】
前言 前面Struts博文基本把Struts的配置信息讲解完了…..本博文主要讲解Struts对数据的处理 Action开发的三种方式 在第一次我们写开发步骤的时候,我们写的Action是继承着Act
Java3y
2018/03/15
1.2K0
Struts2【开发Action】
浅析Struts2中的OGNL和ValueStack
要了解Struts2与OGNL表达式的关系,我们必须先搞清楚以下三个概念: 1、  ActionContext它是Action运行的上下文环境,Action的多项设置都存放在次,我们每一次Action
I Teach You 我教你
2018/01/02
8160
相关推荐
Struts 1高级应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验