简介

有时我们得到的Raw图是MIPI格式的,为了能正确读取该数据,我们需要进行MIPI Raw到Raw的转换。本文对将会先介绍MIPI的数据格式,然后用C进行实现。

MIPI Raw到Raw数据格式

CMOS sensor中返回的原始数据格式中每一个像素是10bit的,然而计算机读取单元为8bit或16bit。为了解决该问题,可以用新的数据格式或者对10bit进行补齐到16bit,这样每个像素就多增加了6bit(60%),增加传输带宽。综上,我们需要一个存储数据格式,既能让计算机进行正确读取,又能保证不浪费带宽。MIPI Raw满足对数据进行压缩存储节约带宽且也能被读取存储。

这里以CMOS Sensor输出的10bit Raw来进行举例。MIPI压缩思想为5个Bytes存储4个像素的信息,最后一个字节为前四个字节的存储信息补充。为什么要这样呢?请看下图我画的解析:

Sensor出的Raw图到MIPI Raw变换

呼应上面所说的,我们从相机pipeline中获取出来的图可能就是MIPI raw图,使用传统读取raw图是不行的。此时我们需要进行逆转换 - 顺序读取MIPI raw文件,每5个Bytes就对第5个数据进行拆分,分别放入Pixel 1, Pixel 2,Pixel 3和Pixel4尾部。

重点细节:本次我们的图片为MIPI raw图,row4080col3060,大小15253KB,通过python uin8格式读出后有15618240个数据元(为了表示和理解方便,定义数据元为上图灰色小方块),15618240 Bytes / 1024 = 15252.1875KB也就约等于15253KB。

我们先从正面Raw to MIPI来推,以理解MIPI to Raw逆变换的操作方法。这里要注意Stride的计算方法,原始的MIPI raw图像数据是只有一行的,通过Stride可以知道读多少个Byte就是Raw图的一行。请看下列Stride计算方式:

式中1.25来自于10/8,width*10表示MIPI下需要的Bits,之后再除以8表示需要的Bytes。这里不一定能整除,所以需要对齐8bits,这就是为啥最后还要除以8,上取整再乘以8的原因。

读取文件方式是以行来读取的,上取整对齐所带来的就是MIPI每一行最后的占位符。

Raw to MIPI: 首先我们来计算下MIPI有多少数据数据元,4080*3060*(5/4)=15606000,而(15618240-15606000)/ 3060=4,也就是每一行最后会多有4个8bits的占位符。直接用 式1 Stride计算方法我们有stride=5104,而4080*(5/4)=5100,可以看出同前一句得到的占位符个数一样,同是4个。

Raw to MIPI: 已知stride5104Bytes。每次读取到5104Bytes便知道为图像的一行,且后4位为占位符。读取完毕后再跳到到下一个stride去做处理得到Raw图像下一行。

代码实现

int 

参考

【1】https://github.com/oswystan/raw_unpack/blob/master/raw_unpack.c

c++ 取整_MPIP Raw转Raw图简述-C实现相关推荐

  1. 乘基取整法是什么_深入理解计算机系统(六):进制间的转换原理

    目录 1.进制的介绍 2.二进制转换成其他进制 3.十进制转换成其他进制 4.十六进制转换成其他进制 5.总结 上一篇博客我们讲解了信息的在计算机中是如何存储以及如何表示的.但是对于各个进制的转换只是 ...

  2. matlab数组平方的计算自定义函数_从零开始的matlab学习笔记——(38)简单数论计算函数:取整,gcd,lcm,质数,全排列...

    matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习 翻了翻优化工具箱,发现内容 ...

  3. 正则获取前8位数字_数据取整,获取字符串前数字另辟蹊径之LOOKUP

    看到标题,数据取整,获取字符串前数字,用LOOKUP函数?EK你确定没搞错吗?是的,当然没有搞错.今天,我们会用LOOKUP来数据取整,获取字符串前数字. 首先我们来看一下数据取整效果图: 图1 取整 ...

  4. 18100出多少取整_一级注册消防考试难点解析,沥青厂房需要多少个水流指示器及追问...

    最近,在朋友圈看到一道关于水流指示器数量计算的题目,感觉到很有意思--因为你一不小心就掉到命题者的"陷阱"中,别人一提你则恍然大悟,实则是你没有理解透彻有关的知识点,平时没理解,考 ...

  5. python矩阵所有元素取整_Python主要逻辑基础与处理

    一.主要内容思维导图 总图 数据类型及操作 条件判断与循环 函数与模块 常用数据结构collections 所思所想: Python语言的主要思维框架:数据输入--数据结构分析--选择数据类型(容器) ...

  6. 直方图均衡化取整怎么计算_玩转直方图处理之直方图均衡化、规定化

    冒泡....双十一刚过~购物狂欢完还是要收心学习鸭!今天来说一说直方图. 直方图 定义: 直方图是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况. 一般用横轴表示数据类型,纵轴表示 ...

  7. 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」

    6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...

  8. 图解数组计算模块NumPy下(三角函数、四舍五入函数(around)、取整、将弧度转化为角度、统计分析函数、中位数、数组的排序、argsort()、lexsort())

    本文来自<Python数据分析从入门到精通>--明日科技编著 8.5 NumPy常用统计分析函数 8.5.1 数学运算函数 NumPy包含大量的数学运算的函数,包括三角函数.算术运算函数. ...

  9. [Python] Python数值取整

    美图欣赏2022/06/22 1.向上取整math.ceil() 不论正负,所有小数都是向着数值更大的方向取整 import math math.ceil(-0.5) # 0 math.ceil(-0 ...

  10. qchart 坐标轴设置_qt qchart缩放后坐标轴间隔取整

    使用qt的qchart显示数据曲线,坐标轴QValueAxis可以设置刻度间隔数量,但每个刻度的数值是根据坐标的极值除以间隔数量得到的,不一定是整数,导致曲线控件的显示刻度不适合观察. 如图: 纵坐标 ...

最新文章

  1. numpy.array()基本操作
  2. poj 1981(单位圆覆盖点)
  3. 【深度学习】利用CNN来检测伪造图像
  4. 廖雪峰js教程笔记9 json
  5. java 的 CopyOnWriteArrayList类
  6. QBC(Query By Criteria) QBE (Query By Example)
  7. 读书笔记:Information Architecture for the World Wide Web, 3rd Edition 北极熊 第一部分 1-3...
  8. Linux学习技巧分享
  9. kafka启动后闪退
  10. TCP三次握手四次挥手介绍
  11. 东芝笔记本linux系统安装驱动,东芝Windows系统如何手动安装驱动程序
  12. 《MLB棒球创造营》:走近棒球运动·匹兹堡海盗队
  13. msvcr100.dll丢失怎么办?msvcr100.dll丢失的解决方法
  14. could not initialize javavm mysql_Could not initialize JavaVM
  15. 在服务系统部署MFC程序,出现DLL缺失情况的问题解决方式
  16. mp4+html+ipad无法播放,mp4文件不能在IPAD上播放
  17. 【引用】 web前段学习路线
  18. 手机充电器的D+,D-电压
  19. 摄氏度和华氏度的换算
  20. 怀孕也就36-40周足够,而芯片54周交期伤心欲绝了!

热门文章

  1. js中不能做变量名的字符
  2. dstat 性能监测工具
  3. Flash 显示全景图
  4. mojoportal学习——文章翻译之使用Artisteer快捷的创建模板
  5. Python 学习笔记:class
  6. 第8章 多项式回归与模型泛化 学习笔记下
  7. 发明与实用新型专利了解
  8. 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧(完整版)
  9. Don't be afraid. You are stronger than you think.
  10. Atitit insert插入数据 目录 1.1. INSERT INTO SET这种方式可读性更好 1 1.1.1. 方式4、INSERT INTO 表名 SET 列名1 = 列值1,列名2=列值