c++解码raw文件

编程入门 行业动态 更新时间:2024-10-26 07:32:45

c++解码raw<a href=https://www.elefans.com/category/jswz/34/1771438.html style=文件"/>

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文件

本文发布于:2024-03-23 17:59:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741129.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   raw

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!