主题:【码农天书】MATLAB利用Adobe DNG Converter解码RAW的方法
正序浏览
主题图片汇总
主题内检索
浏览:10657 回帖:140
游客没有回帖权限
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
肖邦OP9no1 发表于 2018-4-2 11:10
如何用?
能写个使用说明方便一下文青和文科嘛


参见readme,
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
禁言中
泡网分: 3.014
主题: 68
帖子: 4109
注册: 2013年6月
rivershaw 发表于 2017-5-7 15:35
提醒,本文不是给文艺青年看的,文科生请远离。

理工科的,如果对RAW、MATLAB没兴趣,也不必再往下看了。

严重欢迎码农吐槽、挑错!

照相机的RAW格式照片,充满了神秘感,解析RAW格式的照片,既能分析出照相机的一些基本性能指标,也能搞懂后期解码调整参数的理论依据,还能从根本上理解曝光、影调的关系,提高前期精确控制曝光的技术。

RAW格式照片的数据,厂商都是不公开的,目前获取RAW解码数据,多数采用dcraw的开源代码,但是dcraw的解码算法不够好,对白平衡色温计算、色彩空间转换等等,算法有些问题,解码效果不够理想。

本文采用的是Adobe的DNG数据解码,首先用Adobe DNG Converter软件把RAW转换成Adobe的DNG,再对DNG解码。Adobe DNG Converter是Adobe提供的免费转换软件,针对照相机新的RAW格式,不断升级,目前最新的版本是Ver 9.1,下载地址:
http://supportdownloads.adobe.com/thankyou.jsp?ftpID=6131&fileID=6167

Adobe的DNG数据格式,是开放协议,可以从Adobe网站下载,目前最新的版本是dng_spec_1.4.0.0.pdf,下载地址:
http://wwwimages.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec_1.4.0.0.pdf

使用MATLAB读取DNG格式数 ...


如何用?
能写个使用说明方便一下文青和文科嘛
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
禁言中
泡网分: 1.754
主题: 1
帖子: 968
注册: 2017年7月
收藏
本帖由安卓客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 28.669
主题: 1
帖子: 653
注册: 2003年1月
做个记号。常来学习。
本帖由安卓客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
禁言中
泡网分: 15.634
主题: 51
帖子: 8021
注册: 2011年4月
真正的技术贴
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 3.554
主题: 58
帖子: 1830
注册: 2015年3月
我洗干净手了
可以摸摸你的奖杯吗
本帖由安卓客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
源代码的链接更新如下:

链接:https://pan.baidu.com/s/1dteBBw 密码:u9do
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-25 13:53
好像还不能给您发短消息.好像级别还不够.

我这边收到一个您发来的一个消息, 可有什么指导??


有什么问题可以给我发邮件,[email]rivershaw@sina.com[/email]。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
好像还不能给您发短消息.好像级别还不够.

我这边收到一个您发来的一个消息, 可有什么指导??
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-24 14:01
啊!!!!!!!!!这个意思!!!

我试着写写看,谢谢!!


(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
啊!!!!!!!!!这个意思!!!


我试着写写看,谢谢!!
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-24 10:01
我是这样理解的.

如果Division是3的话,应该是3等分吧,对吗? 所以边界值应该是? (这里我觉得应该不是0 0.5 1)
就比如文档里写的,假如HueDivision =3 的话,
if HueDivisions is equal to 3, then the table samples are at 0 degrees (red), 120 degrees (green), and 240 degrees (blue).

所以假设是3等分的话,应该是这三个等分点的数据我们都是已知的,然后

我们有一个x ,必定会落在这三个区间中的一个区间内.
x0


if HueDivisions is equal to 3, then the table samples are at 0 degrees (red), 120 degrees (green), and 240 degrees (blue).

对啊,反复跟你说,“wrap-around”,所以对Hue来说,Divisions=3,实际是4,360与0相同,至于用什么算法实现随便你。

x0、x1取整查表,写代码吧,写了就知道了。

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 2.557
主题: 5
帖子: 308
注册: 2015年12月
高深!顶!!!
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
我是这样理解的.

如果Division是3的话,应该是3等分吧,对吗? 所以边界值应该是? (这里我觉得应该不是0 0.5 1)
就比如文档里写的,假如HueDivision =3 的话,
if HueDivisions is equal to 3, then the table samples are at 0 degrees (red), 120 degrees (green), and 240 degrees (blue).

所以假设是3等分的话,应该是这三个等分点的数据我们都是已知的,然后

我们有一个x ,必定会落在这三个区间中的一个区间内.
x0<x<x1 . x0,x1 就是x点所处区间的左右区间边界值,所以可以依据这个,求出xd.

然后,借助c000->c111八个点的数据,我们可以求出内插的这个cxxx.

关于内插,您看看我这样理解是否正确?

然后关于查表 , 关于您描述的整数化, 我有点不太理解.
因为x的范围只是在[0,1], 所以,整数化的话,只可能有两种可能性啦?

谢谢您的指导,麻烦您了...这么多基础的问题..
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
是工作需要
想要把profilehuesatmap 这中间的三个tag 加入到dng 中。

现在就是在纠结数据怎么放
本帖由安卓客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-23 21:55
我刚刚阅读了※※※※上关于这个三线插值的含义,我不是很懂这几个函数式中的几个变量的由来.

这些x,y,z x0,y0,z0,x1,y1,z1 是怎么从Division的值求得的呢?

假定Value对应x,Hue对应y,Saturation对应z。

然后Value的Division为3的话,

x =0.333
x0 =0.666
x1 = 1  ??

但是如果我的Hue的Division是6的话, 那我就会有6个值, 所以对应的y,y0,y1 又应该是什么呢?

抛开这个,我对于三线性插对于这个hsv的理解是, H,S,V 三个值各为一个坐标,然后8个坐标点(h,s,v) 可以求出一个内插点. 但是这样理解的话,我就不是很清楚哪个Division的值到底是用在哪里计算的了.


Value的值是0.0-1.0之间,Division=3,边界值0.0、0.5、1.0。

x=0.333,落在0.0-0.5之间,就是x0=0.0,x1=0.5,xd=0.333,但是x0、x1是用于查表的地址,整数化,就是x0=0、x1=1。
如果x=0.600,落在0.5-1.0之间,就是x0=0.5,x1=1.0,xd=0.100,用于查表就是x0=1、x1=2。

Hue一样,只是要考虑“wrap-around”,你自己想吧。

如果不是工作需要,就别再管这个RAW解码了,费太多精力不划算。

如果是工作需要,需求是什么?可能会有更简捷的解决方案。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
我刚刚阅读了※※※※上关于这个三线插值的含义,我不是很懂这几个函数式中的几个变量的由来.

这些x,y,z x0,y0,z0,x1,y1,z1 是怎么从Division的值求得的呢?

假定Value对应x,Hue对应y,Saturation对应z。

然后Value的Division为3的话,

x =0.333
x0 =0.666
x1 = 1  ??

但是如果我的Hue的Division是6的话, 那我就会有6个值, 所以对应的y,y0,y1 又应该是什么呢?

抛开这个,我对于三线性插对于这个hsv的理解是, H,S,V 三个值各为一个坐标,然后8个坐标点(h,s,v) 可以求出一个内插点. 但是这样理解的话,我就不是很清楚哪个Division的值到底是用在哪里计算的了.
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-23 10:13
我再找找资料看..
DNG的资料真的好少..
我理解的三线性插值是和 H S V 相关. 因为看了这一句

The table entries are stored in the tag in nested loop order, with the value divisions in the outer loop, the hue divisions in the middle loop, and the saturation divisions in the inner loop.

我以为三线性插值是根据这个 内嵌loop order来看的..


1、三线性插值的算法:https://en.※※※※※※※※※.org/wiki/Trilinear_interpolation

2、假定Value对应x,Hue对应y,Saturation对应z。

3、先根据Divisions,计算出xd、x0、x1,yd、y0、y1和zd、z0、z1。根据x0、x1,y0、y1,z0,z1查表ProfileHueSatMapData,找出c000、c001、c010、c011、c100、c101、c110、c111。每一个cxxx都包含三个数据,对应h、v、s的校准值。

4、“The table entries are stored in the tag in nested loop order, with the value divisions in the outer loop, the hue divisions in the middle loop, and the saturation divisions in the inner loop.”  说的是查表时的地址索引算法。

5、Hue(y0、y1)在查表时要,把360°用0°的数据补充,就是“wrap-around”。

6、根据xd、yd、zd,按三线性内插算法计算,最后得到内插数据c。

7、按照HSV校准要求,根据c(h、v、s),对x、y、z,就是Value、Hue、Saturation进行校准,Hue加校准值,Value和Saturation乘校准值。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
我再找找资料看..
DNG的资料真的好少..
我理解的三线性插值是和 H S V 相关. 因为看了这一句

The table entries are stored in the tag in nested loop order, with the value divisions in the outer loop, the hue divisions in the middle loop, and the saturation divisions in the inner loop.

我以为三线性插值是根据这个 内嵌loop order来看的..
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
退修.

十几年???

我的天啊...我才刚开始工作啊...

这是真碰见大神了
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-20 15:48
它的文档中描述的

Hue is indexd using wrap-around math

所以这个wrap-around 是查表的时候才会被用到的一种查表方式吗?

这个东西中文叫啥啊?? 环绕式查表?

能否加下您的微信呢大神


wrap-around,我理解,就是0°、360°相同处理。

比如,Division为3,就是360°除以3,表里有3组数据,但三线性插值要按0-120、120-240、240-360插值,360就是0,使用0的数据。

抱歉,我不会玩微信,年轻时做过码农,退休有十几年了,现在已经是老窝囊废了,

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
它的文档中描述的

Hue is indexd using wrap-around math

所以这个wrap-around 是查表的时候才会被用到的一种查表方式吗?

这个东西中文叫啥啊?? 环绕式查表?

能否加下您的微信呢大神
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-20 15:09
我好像理解您的意思了

所以说,对于单个ProfileHueSatMapData来说,它本身有3个分量,即HSV,然后ProfileHueSatMapDim 中的HueDivision,Saturation Division和Value Division 都是起到一个等分的作用. 第一个是等分360度,后面两个是等分[0,1]. 等分的目的是为了做三线性内插会更准确? 假如等分成3份,即会内插3个值,等分成六份即内插6个值,插值越多,值越准确

然后 ProfileHueSatMapData1 和 ProfileHueSatMapData2 就是两组独立的数据,根据 StandardA和D65两个不同的色温的关系,再做单线性内插.

这样理解不知是否正确?

谢谢大神指导!!!  COOL,DNG可玩性很高啊,哈哈


(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
我好像理解您的意思了

所以说,对于单个ProfileHueSatMapData来说,它本身有3个分量,即HSV,然后ProfileHueSatMapDim 中的HueDivision,Saturation Division和Value Division 都是起到一个等分的作用. 第一个是等分360度,后面两个是等分[0,1]. 等分的目的是为了做三线性内插会更准确? 假如等分成3份,即会内插3个值,等分成六份即内插6个值,插值越多,值越准确

然后 ProfileHueSatMapData1 和 ProfileHueSatMapData2 就是两组独立的数据,根据 StandardA和D65两个不同的色温的关系,再做单线性内插.

这样理解不知是否正确?

谢谢大神指导!!!  COOL,DNG可玩性很高啊,哈哈
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-20 11:27
不对啊..内插应该只会和那ProfileHueSatMapData1 和 ProfileHueSatMapData2 有关系吧.
和单独一个Data里的这个Division应该没有什么关系吧..

不是很理解这个Division的目的是为了什么


ProfileHueSatMapData1 和 ProfileHueSatMapData2的内插是线性内插,与三线性内插不是一回事。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-20 11:00
在文档里,就是您截图的这部分,对于Hue有这样的描述

Hue is indexed using wrap-around math. for example, if huedivision is equal to 3, then the table samples at 0 degree(red), 120 degrees(green) and 240 degrees(blue).

所以,这个HueDivision起到一个等分Hue(总共360°)的作用对吗,假如是6的话,就等分六分.

那同理, ValueDivision和saturation division 应该也是同样的作用,都是作为等分的一个值吧..

不过,等分的目的是为了什么呢?

是为了内插?


等分的目的就是三线性内插后查表。特别是H,内插时还要wrap-around。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
不对啊..内插应该只会和那ProfileHueSatMapData1 和 ProfileHueSatMapData2 有关系吧.
和单独一个Data里的这个Division应该没有什么关系吧..

不是很理解这个Division的目的是为了什么
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.029
主题: 0
帖子: 18
注册: 2017年10月
在文档里,就是您截图的这部分,对于Hue有这样的描述

Hue is indexed using wrap-around math. for example, if huedivision is equal to 3, then the table samples at 0 degree(red), 120 degrees(green) and 240 degrees(blue).

所以,这个HueDivision起到一个等分Hue(总共360°)的作用对吗,假如是6的话,就等分六分.

那同理, ValueDivision和saturation division 应该也是同样的作用,都是作为等分的一个值吧..

不过,等分的目的是为了什么呢?

是为了内插?

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-19 10:43
这里的文档也都读了

您看,那个第二步,这里是把RGB坐标直接转成HSV坐标吧.

然后HSV坐标拿过来做索引去做内插

但是这里面这个liner RGB coordinates / linear HSV coordinates & 这个tri-linear interpolation 到底怎么算linear呢?


Trilinear interpolation:

https://en.※※※※※※※※※.org/wiki/Trilinear_interpolation
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 8.166
主题: 48
帖子: 7544
注册: 2007年7月
年内主力装备
★ NIKON Z 8
DanielX 发表于 2017-10-19 10:43
这里的文档也都读了

您看,那个第二步,这里是把RGB坐标直接转成HSV坐标吧.

然后HSV坐标拿过来做索引去做内插

但是这里面这个liner RGB coordinates / linear HSV coordinates & 这个tri-linear interpolation 到底怎么算linear呢?


这里的liner RGB,是指从XYZ(D50),转换到ProPhoto RGB空间,但没有做gamma的RGB,文档的其他地方有说明。

用liner RGB转换,自然就是linear HSV。

tri-linear interpolation,叫做三线性插值,是一个标准算法。

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
回复主题: 【码农天书】MATLAB利用Adobe DNG Converter解码RAW的方法
功能受限
游客无回复权限,请登录后再试