文件"/>
c++解码raw文件
解码流程
看这篇就可以懂了
文章内部附了python相关的代码
本文只关注CFA demosaicting
这步,不做白平衡,最终显示效果虽然看起来奇怪,但我额外做了自适应的白平衡效果是没问题的
debayer算法
原理看这篇即可
因为raw文件存储时是以G R B G类似这样依次存储,不像rgb图像一个位置有三个值,raw文件一个位置只有一个值,同时由于人眼对绿色比较敏感,所以G多一些,一般有四种方式
以(b)为例
比如对于这个(0,2)这个位置
需要补充R和B的值,R可以取左右两个R的平均值,B可以取上下两个B的平均值(边界处只取一个),只要遍历每个位置利用周边的值来填补缺失像素即可。
实现
我这里的数据集是BGGR存储,每次先处理BGBGBG这行,再处理GRGR这行,同时根据index的奇数偶数特性判断当前是哪个像素和需要填补哪些像素,我的实现算法很简单,纯c++实现的平均插值,关键部分给了注释
opencv相应部分
看文档.4/modules/imgproc/doc/miscellaneous_transformations.html 这个接口也很好玩,These are components from the second row, second and third columns,
这个参数选择是根据第二行的第二个和第三个值来选择的,有点怪怪的,对应的源代码在.cpp
里面提供了几种插值算法,对应平均插值法有两处,靠上面的很复杂也是opencv现在采用的,靠下面的老版本和我自己实现的类似
当前最好的debayer算法
根据.htm 性价比最高的就是直接平均,但会带来物体边缘处不自然的情况,现在发论文很多都是魔改这个插值的方式,效率差一些,效果看起来自然一些,我个人最看好的是英伟达实现的DFPD /
相关拓展阅读:
.pdf
/%E5%8E%BB%E9%A6%AC%E8%B3%BD%E5%85%8B
更多推荐
c++解码raw文件
发布评论