主题:【自己动手】 解码raw文件!
正序浏览
主题图片汇总
主题内检索
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
波士顿的一个程序员(Dave Coffin)写了一个C程序,可以处理canon的raw文件,很多图形处理的商业软件都使用了他的C语言代码,如Adobe Photoshop ,Bibble ,BreezeBrowser 等软件。

C语言代码下载地址:
http://www_cybercom_net/~dcoffin/dcraw/dcraw.c

C程序说明主页地址:
http://www_cybercom_net/~dcoffin/dcraw/

Dave Coffin的个人主页地址:
http://www_cybercom_net/~dcoffin/index.html

[2004-04-21 12:10 补充如下]

dcraw.c能处理的数码相机的raw文件种类如下:Olympus E-1

Canon PowerShot 600
Canon PowerShot A5
Canon PowerShot A50
Canon PowerShot Pro70
Canon PowerShot Pro90 IS
Canon PowerShot G1
Canon PowerShot G2
Canon PowerShot G3
Canon PowerShot G5
Canon PowerShot S30
Canon PowerShot S40
Canon PowerShot S45
Canon PowerShot S50
Canon PowerShot Pro1
Canon EOS D30
Canon EOS D60
Canon EOS 10D
Canon EOS 300D
Canon EOS DIGITAL REBEL
Canon EOS D2000C
Canon EOS-1D
Canon EOS-1DS
Canon EOS-1D Mark II
Casio QV-2000UX
Casio QV-3000EX
Casio QV-3500EX
Casio QV-4000
Casio QV-5700
Casio Exlim Pro 600
Contax N DIGITAL
Creo Leaf Valeo 22
Creative PC-CAM 600
Fuji FinePix S2Pro
Fuji FinePix S5000
Fuji FinePix S7000
Fuji FinePix F700
Imacon Ixpress
Kodak DC20 (see Oliver Hartman's page)
Kodak DC25 (see Jun-ichiro Itoh's page)
Kodak DC40 (aka "Logitech Fotoman Pixtura")
Kodak DC50
Kodak DC120 (also try kdc2tiff)
Kodak DCS315C
Kodak DCS330C
Kodak DCS420
Kodak DCS460
Kodak DCS460A
Kodak DCS520C
Kodak DCS560C
Kodak DCS620C
Kodak DCS620X
Kodak DCS660C
Kodak DCS660M
Kodak DCS720X
Kodak DCS760C
Kodak DCS760M
Kodak EOSDCS1
Kodak EOSDCS3B
Kodak NC2000F
Kodak ProBack
Kodak PB645C
Kodak PB645H
Kodak PB645M
Kodak DCS Pro 14n
Kodak DCS Pro SLR/n
Leica Digilux 2
Minolta DiMAGE 5
Minolta DiMAGE 7
Minolta DiMAGE 7i
Minolta DiMAGE A1
Minolta DiMAGE A2
Nikon D1
Nikon D1H
Nikon D1X
Nikon D100
Nikon D2H
Nikon D70
Nikon E950 ("DIAG RAW" hack)
Nikon E990 ("DIAG RAW" hack)
Nikon E995 ("DIAG RAW" hack)
Nikon E2100 ("DIAG RAW" hack)
Nikon E2500 ("DIAG RAW" hack)
Nikon E4300 ("DIAG RAW" hack)
Nikon E4500 ("DIAG RAW" hack)
Nikon E5000
Nikon E5700
Nikon E8700
Olympus C5050Z
Olympus C5060WZ
Olympus C8080WZ
Olympus E-10
Olympus E-20
Pentax *ist D
Pentax Optio S
Pentax Optio S4
Phase One LightPhase
Phase One H10
Phase One H20
Phase One H25
Rollei d530flex
Sigma SD9
Sigma SD10
Sinar 12582980-byte
Sony DSC-F828
相关标签: Canon EOS 300D Olympus E-20 Canon PowerShot S45 Phase One
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
浏览:3941 回帖:36
游客没有回帖权限
资深泡菜
泡网分: 35.661
主题: 76
帖子: 2496
注册: 2004年3月
好东西,为自己处理RAW提供了可能
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 43.111
主题: 50
帖子: 3610
注册: 2000年12月
这个DCRaw我小试了一把,采用Canon 10D RAW,初步感觉:
优点: 产生的图像非常锐利,色彩不错;亮部细节比较多。
缺点: 摩尔纹严重。
个人观点:这个缺点是致命的,如果没有简单方法改进的话,难以使用。
不知大家有什么感受?
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
?

[bit 编辑于 2004-05-16 00:30]
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
?

[bit 编辑于 2004-05-16 00:28]
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
关于程序及参数的一些说明:
以下是两张标样的统计数据

[code]
感光器原始值的全图统计值(因为RAW的四周有一圈黑边,
可能会对统计值有一些影响,没来及排除)
第一组统计值:G2闪光灯拍白墙 无曝光补偿
感光器 原始值 校正系数
1      116    1.75
2      203    1
3      202    1.004950495
4      180    1.127777778

第二组统计值:G2闪光灯拍白墙 -2EV曝光补偿
感光器 原始值 校正系数
1      52     1.384615385
2      72     1
3      72     1
4      65     1.107692308

+2EV的CRW解码时有问题,数据无效

m_filterRatio[]是定义的四个感光器校正系数,1.7 1 1 1.12是
根据上述统计值给出的一个大概数,如果真要实现,应该至少取
三张不同曝光值的图来做标样,求出曲线,根据感光器原始值来
动态计算校正系数。0.63是对10位到8位的压缩系数,代替pgm.c中
的shift压缩方法。
raw2bw.m_filterRatio[0] = 1.7 * 0.63;
raw2bw.m_filterRatio[1] = 1 * 0.63;
raw2bw.m_filterRatio[2] = 1 * 0.63;
raw2bw.m_filterRatio[3] = 1.12 * 0.63;

...
这是pgm.c的关键代码:
      out[x] = row[x] >> shift;
这是我修改的代码:
      out[x] = (row[x] * m_filterRatio;

[/code]
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
这是测试的几幅图的文件大小,CRW是G2生成的RAW,RAW是decompress.c生成的无压缩RAW文件,解压缩时提示信息是宽度2376,长度1728,这样计算文件大小是2376*1728*2 = 8211456,正是8019KB的大小。而解出的RAW大小不一,只有两个大小是正确的,这两个用我的程序生成黑白图后也的确得到正确的图像(很干净的纯灰图)。而这两个图正好所有图像的原始值都小于255(即8位),出问题的图,好象都有大于255的感光原始值,估计是解压高位字节不为0的CRW时出了问题,原因没时间查了。其实我就是想证实前面所提算法的优势,看来思路是没有错的。

6947.CRW 2,077 KB CRW 文件 2004-4-21 20:43
6948.CRW 2,492 KB CRW 文件 2004-4-21 20:43
6949.CRW 2,877 KB CRW 文件 2004-4-21 20:43
6950.CRW 3,009 KB CRW 文件 2004-4-21 20:49
6954.CRW 2,963 KB CRW 文件 2004-4-21 20:51
6947.raw 8,019 KB RAW 文件 2004-4-21 21:28
6948.raw 8,019 KB RAW 文件 2004-4-21 22:42
6949.raw 8,064 KB RAW 文件 2004-4-21 21:28
6950.raw 8,023 KB RAW 文件 2004-4-21 23:27
6954.raw 8,020 KB RAW 文件 2004-4-21 22:32
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
大嘴猫:你说的俺都明白 ;-)
请注意俺最早说的前提: 针对纯灰度和低饱和度被摄体进行黑白图像生成的优化,换言之,我已对每个像素给出了RGB分量相等(或相近)的假设,而且这种场景的确存在。
而且,昨天也发现,就算是纯灰物体,RGB像素的感光值也不是线性相关的,需要在预定光线下拍几张不同曝光量的白纸才能标定出相关曲线。

bit: 是decompress.c和我改造的pgm.c的结果,几乎可以肯定是decompress.c出的问题,也许是我的使用环境(WIN2K + INTEL CPU + VC60)有问题,没时间查了,呆会我把一些相关的数据帖上来你就明白了。
总的来说,我觉得专用算法还是有优势的(结果图中的第一幅),虽然这个算法还太粗糙
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 1
帖子: 75
注册: 2004年2月
试试:那个公式就是JPEG中计算亮度的公式,无论你的图像内容为何,公式不会变的!
CHK兄:刚才忘了说了,前提就是拍摄的就是黑白物体,否则的话单凭一个系数是不可能的,至少要RGB三个系数,这三个系数还应该是动态的,是跟强度相关的。

回头上一个没有插值的彩色图你就明白了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
解压缩程序应该没问题,否则应该一个字也看不见!应该是转换程序的问题。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
ChK兄,
是decompress.c和pgm.c的试验结果吗?
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
http://www_cybercom_net/~dcoffin/dcraw/decompress.c
解码器好象有问题,解出的图像有乱码,好歹找到一小块能看的,这是其中的一张原图,有的更糟,什么也看不见,但好象拍白墙的那几张没问题。
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
初步结果,没时间再试了,大家可以下载后放大细看
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 0
主题: 6
帖子: 2722
注册: 2000年5月
转黑白时,有一个公式:Y = 0.299 * R + 0.587 * G + 0.114 * B
这个公式,在摄影上意义不大,因为你要根据图像效果来调节。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
大嘴猫兄:
你可以看看bit给出的小程序,的确是没有插值就生成了黑白图 ;-)
我的想法是做一个插值强度可调的程序,当你的被摄体为黑白时,选0参数,不插值,当被摄体的色饱和度低时,选一个较小的参数。当色饱和度较高时,选1参数,这时就是普通的彩色算法。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
bit:
我说的与你说的还不太一样,你说的是指人眼感受彩色图像后映射到亮度上的视觉感受,这在彩色转黑白时玩的花样是很多的,以前也有过不少讨论。
我现在的想法很简单:彩色CCD拍黑白效果不是不行吗?那么我们能不能在假定被摄对象色饱和度极低的情况下(实际上这种应用还是的确存在的)来得到比较好的黑白图片呢?

我上帖的问题是,RGB像素在感受同样亮度的灰度信号时,会有多大的差别?比如R感受到了150, G感受到了130, B感受到了140... 现在将其黑白化,可能需要统一校正到一个值上,否则一个均匀灰度的被摄体看起来就会不均匀。不知我说明白了没有 ;-)

我刚想了一下,可以用这个方法比较简单地统计出我要的参数:
用长焦最小光圈拍一个亮度尽量均匀的白纸,然后统计RGB分量的差别,这就是我要的参数。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 1
帖子: 75
注册: 2004年2月
我觉得不插值是不可能的,有个异想天开的方法:根据CCD对RGB的敏感曲线,推算出入光量的强度总和,但实际上这也不可能的。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
ChK

"Converting your color images to black & white can be easily done by selecting the grayscale mode in Photoshop. But the results just don't look as if they were shot on real black & white film,The standard Photoshop grayscale conversion washes out the yellows and bright greens. But black & white film is quite insensitive for yellows and greens!"

所以像素上的RGB比值正是需要仔细研究和反复实践的,而且不同的比值会产生不同的效果,而且会适于不同的拍摄条件,例如有的适于拍人像,有的适于拍天空背景的景色等。

请参考:

http://www_outbackphoto_com/workshop/channelmixer/channelmixer.html
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
但是有一个参数不好定:即对同一个灰色的亮度感光后,我猜想RAW中的RGB像素上的值应该是不相等的,这个比例是多少?如果以1:1:1来计算,可能会有偏差,谁有这方面的资料?
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
刚看了pgm.c,就是俺说的极端例子:假定被摄体是灰色系的,不插值而直接出亮度图,但他在将多于8位的值转为8位时,用的是截断的方法,没有伽玛调整。这程序很简单,晚上回去试试。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
谢谢bit兄,若有功夫我会试试您提供的代码,也许读起来比上午那个程序省事 ;-)

试试兄:可能我没说太清楚,插值是肯定的,我的意思是能不能在算法上侧重亮度分量而不是色彩分量,一个极端的例子:
比如我假定被摄体的色饱和度比较低,甚至认为他是RGB分量相等的灰色物体,这样甚至不用插值也能出黑白图,因为假设的前提已给定每个点上的RGB分量相等了,不用再估算。
哪位有兴趣马上可以做个实验:拍标板或报纸,用上述方法转灰度图,与通用RAW转化器对比,也许会有些不一样的地方。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
ChK,

decompress.c,一个400行的C程序,可以解压canon的CRW文件(raw),
pgm.c,一个40行的C程序,可以将解压的文件转换成一个8位的黑白图片。

两个程序的源代码下载地址如下:

http://www_cybercom_net/~dcoffin/dcraw/decompress.c

http://www_cybercom_net/~dcoffin/dcraw/pgm.c
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 0
主题: 6
帖子: 2722
注册: 2000年5月
专用于RAW转黑白格式的软件,因为转RGB时,要考虑很多色彩方面的问题,导致了绝对分辨率的下降(比如D70的彩色摩尔纹,俺觉得就是为了追求分辨率带来的负作用)。也许,只转黑白的话,没准还可以改进那些低色彩饱和度被摄体的效果。


mosaic sensor必须插值转为彩色的才能再转黑白。因为sensor前面已经带了彩色滤镜,不能直接做黑白处理了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
Dave Coffin 用了几个月的时间,在2001年9月,成功解压了 无损压缩的canon的raw文件,所以dcraw程序还是很有价值的,这个程序已经完成了很多高难度的工作,得到了里程碑级的工作结果,后人可以以此为基础,做很多工作了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
bit
资深泡菜
泡网分: 28.751
主题: 26
帖子: 2022
注册: 2003年9月
Canon从 PowerShot Pro90 开始,包括以后的G1 G2 D30 D60 10D 300D等机型,对raw文件进行无损压缩,而且没有公开压缩算法,这给解码canon raw文件带来非常大的难度。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.455
主题: 21
帖子: 12481
注册: 2003年1月
一个建议,哪位有功夫做这么个东西:
专用于RAW转黑白格式的软件,因为转RGB时,要考虑很多色彩方面的问题,导致了绝对分辨率的下降(比如D70的彩色摩尔纹,俺觉得就是为了追求分辨率带来的负作用)。也许,只转黑白的话,没准还可以改进那些低色彩饱和度被摄体的效果。

如果有人愿做这个东西来造福大家,请在这里跟个帖,如果没人跟帖,俺想有空的时候试试,只可惜最近都太忙。先把代码下载下来放着再说...
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0
主题: 1
帖子: 75
注册: 2004年2月
其实RAW文件没什么神秘的,甚至从某种意义讲比BMP都简单--如果想简单的话。如果要成为标准,那就必须考虑兼容性和各种可能性,BMP就是这么变复杂的。毫不客气的说,俺前阵就自己定义过一种RAW格式,当然只限俺自己的系统,文件头只有32字节,支持8/10比特的Bayer格式。

那个文件正在消化,不过刚发现一个俺自己的内存泄漏,好久没弄了,找起来有点困难,一会儿换最终版看看。就是那400多种格式,岂不是要做一个很长的下拉菜单?苦!

其实俺真正的用心,是看看佳能的原始数据与其他的系统差别又多大,由此可以推断出佳能的图像处理能力到底如何。很多人都在说数码锐不锐的问题,咱们就比比看,是镜头锐还是DSP锐。

但是仅仅从程序看,要用起来不是那么简单。希望这两天俺有时间。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
版主
泡网分: 226.811
主题: 1036
帖子: 33851
注册: 2003年4月
内容贡献勋章 优质内容勋章
》除非你愿意自己再写一个adobe camera raw,否则基本没有什么意义来用这个dcraw

业界一直有一个说法ACR就是用了Dcraw的routines。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 0.006
主题: 12
帖子: 143
注册: 2004年4月
同意试试的观点
  论打基础的话,各位同学首先需要学习好图像处理的相关课程。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 0
主题: 6
帖子: 2722
注册: 2000年5月
我觉得如果有时间的话,读raw解码的原程序能非常好的理解raw文件格式,为处理好raw文件打一个坚实的基础,这也是意义所在。拿到dcraw的意义是多方面的,对不同的人有不同的意义。


不知道你说的处理raw文件指的是什么。如果是说自己再发明一次wheel,写一个dcraw,确实需要知道raw文件格式。

如果是处理图像,看不出raw怎么存在文件中对你有任何影响。你需要的就是会用ps cs, c1 pro之类raw处理程序。

dcraw我以前下载过,在linux上batch convert raw用来生成album。不过不能看图修改必要的像曝光、白平衡之类参数,实在没有多少实际意义,所以现在不用了,还是在PS CS里batch convert。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
回复主题: 【自己动手】 解码raw文件!
功能受限
游客无回复权限,请登录后再试