一文看懂图像格式 RAW、RGB、YUV、Packed/Unpacked、Bayer、MIPI、Planar、Semi-Planar、Interleaved

本文主要是介绍一文看懂图像格式 RAW、RGB、YUV、Packed/Unpacked、Bayer、MIPI、Planar、Semi-Planar、Interleaved,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、通用属性

1. Packed/Unpacked

2. 压缩/非压缩

二、RAW

1. Bayer格式

2. 分类

3. MIPI RAW

三、RGB

分类

四、YUV

1. YUV与RGB转换

2. 分类

3. 内存计算

五、压缩格式


有的人,错过了,一生再也找寻不到。

本文详细分析各种图像格式(RAW、RGB、YUV)的分类、内存分布。一篇文章让你看懂。

一、通用属性

1. Packed/Unpacked

一个像素点占n个bit,如果n不是8的倍数,那么就有Packed、Unpacked的概念。试想某格式一个像素10bit(比如Raw10),如果Unpacked,那么实际一个像素要占2Byte=16bit,其中前10bit才有图像数据,后6bit占位(一般是0)。如果是Packed,那么就没有占位。

2. 压缩/非压缩

为方便大尺寸图像存储、传输,常用压缩的方法进行。

对于isp而言,常见压缩算法有FLC(Fixed Length Compression)、AFBC(Arm Frame Buffer Compression),JPEG等。

下文所讲内存分布均指非压缩格式,因为压缩后的内存分布由算法决定。

二、RAW

RAW的含义是“未经处理加工”。

RAW图像是CCD/CMOS等sensor直接采集到的图像,是光信号转化为电信号时的电平高低的原始记录。

1. Bayer格式

RAW一般采用Bayer格式(单个像素为R/G/B光强信息)进行排列,由于人眼对绿色更加敏感,因此增加对绿光的采样。主要有四种排序:

  • RGGB
  • BGGR
  • GRBG
  • GBRG

举例一个像素是8*8的sensor,BGGR格式的RAW图像:

要么你可能会问,一个像素只有一种颜色R/G/B,那我们看到的图像比如第一个像素不一定是只有B。因为后面会插值计算出每个pixel的其他分量!以降低功耗。 

2. 分类

  • RAW8:1 pixel 8 bits
  • RAW10Unpacked:1 pixel 2 Bytes(16bits,有6bit没用)
  • RAW10Packed:1 pixel 10 bits
  • RAW12Unpacked/RAW12Packed
  • RAW14Unpacked/RAW14Packed
  • RAW16
  • ......

RAW格式很大,往往需要压缩处理存入DDR。

3. MIPI RAW

MIPI RAW可以看做为一种Packed RAW,只是要按照MIPI RAW的存储规则来Packed。既然是Packed,举例来说,对于MIPI RAW10,5个Byte(40bits)就可以存4个像素的数据(4*10bits),没有空bit。

三、RGB

每个像素由三原色R/G/B组成,注意和RAW的区别,RAW每个像素只有一个三原色。

分类

  • RGB565:1 pixel 16 bits(R 5bits、G 6bits、B 5bits)
  • RGB555:1 pixel 16 bits(有1bit不用)
  • RGB24:1 pixel 24 bits(RGB各8bits)
  • RGB32:1 pixel 32 bits(RGB各8bits,有8bits不用)
  • ARGB32:1 pixel 32 bits(RGB各8bits,还有Alpha透明度8bits)

四、YUV

YUV是用一个亮度分量Y和两个色度分量U,V来描述一个颜色。只有Y的话就是灰度图像。

1. YUV与RGB转换

YUV转RGB

R = Y + 1.13983 * V
G = Y - 0.39465 * U - 0.58060 * V
B = Y + 2.03211 * U

RGB转YUV

Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.14713 * R - 0.28886 * G + 0.436 * B
V = 0.615 * R - 0.51499 * G - 0.10001 * B

2. 分类

由于人眼对Y的敏感度远超对U、V的敏感度,所以有时可用多个Y共用一组U、V,既节省了空间又保证了质量。

常用格式分类:

  • YUV420,4个Y共用一套UV,数据个数1.5*w*h
  • YUV422,2个Y共用一套UV,数据个数2*w*h
  • YUV444,不共用,1个Y一套UV,数据个数3*w*h

如果一个像素是8bit,那么存储占用对于YUV420就是1.5*w*h*8 bits=1.5*w*h Bytes 。

YUV的内存分布按Y、U、V三个分量的排列顺序,可分为

  • Planar,三个分量分开存放
  • Semi-Planar,Y分量单独存放,UV分量交错一起存放
  • Packed/Interleaved,三个分量交错一起存放

注意:这里的Packed和图像的Packed是两个概念!这里的Packed指的是所有像素分量交错;图像的Packed是一个像素点n bits无空位排列。 

I420(也叫YU12,或YUV420 Planar)

总数据个数w*h+0.25*w*h+0.25*w*h=1.5*w*h

YYYY
YYYY
UU
VV

当然,对于计算机内存来说,只是从某个addr开始一直存储,先存Y再存U再存V

YV12(YVU420 Planar)

总数据个数w*h+0.25*w*h+0.25*w*h=1.5*w*h

YYYY
YYYY
VV
UU

NV12(YUV420 Semi-Planar)

总数据个数w*h+0.5*w*h=1.5*w*h

YYYY
YYYY
UVUV

NV21(YVU420 Semi-Planar)

总数据个数w*h+0.5*w*h=1.5*w*h

YYYY
YYYY
VUVU

I422(YUV422 Planar)

总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h

YYYY
YYYY
UUUU
VVVV

 YV16(YVU422 Planar)

总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h

YYYY
YYYY
VVVV
UUUU

  NV16(YUV422 Semi-Planar)

总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h

YYYY
YYYY
UVUV
UVUV

  NV61(YVU422 Semi-Planar)

总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h

YYYY
YYYY
VUVU
VUVU

YUVY(YUV422 Interleaved)

总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h

YUVY YUVY
YUVY YUVY

 VYUY(VYU422 Interleaved)

总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h

VYUY VYUY
VYUY VYUY

  UYVY(UYV422 Interleaved)

总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h

UYVY UYVY
UYVY UYVY

I444(YUV 444 Planar)

总数据个数w*h*3

YYYY
YYYY
UUUU
UUUU
VVVV
VVVV

YV24(YVU 444 Planar)

总数据个数w*h*3

YYYY
YYYY
VVVV
VVVV
UUUU
UUUU

NV24(YUV 444 Semi-Planar)

总数据个数w*h*3

YYYY
YYYY
UVUVUVUV
UVUVUVUV

 NV42(YVU 444 Semi-Planar)

总数据个数w*h*3

YYYY
YYYY
VUVUVUVU
VUVUVUVU

YUV 444 Packed

总数据个数w*h*3

YUV YUV
YUV YUV

3. 内存计算

有了上面的基础,内存计算就超级简单。比如:

YUV420SP8,内存占用即为1.5*w*h Bytes

YUV420SP10 Unpacked,内存占用即为1.5*w*h*2 Bytes,因为Unpacked时10bit要占2Bytes,有6bits的空位。

YUV420SP10 Packed,内存占用即为1.5*w*h*10/8 Bytes。没用空位。

1920*1080的NV12 8bit图像,占内存为1.5*1920*1080 = 3,110,400 Bytes ≈ 3MB,这就是3MB图像的由来,内存占用还是挺大的。

五、压缩格式

JPEG,PNG,GIF,BMP,TIFF,TGA等等。

不断更新,还在路上......

这篇关于一文看懂图像格式 RAW、RGB、YUV、Packed/Unpacked、Bayer、MIPI、Planar、Semi-Planar、Interleaved的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321440

相关文章

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间,我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧,并通过对多个噪声帧进行平均得到相应的干净帧。 2、有效的原始视频去噪网络(RViDeNet),通过探

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

一文说清什么是AI原生(AI Native)应用以及特点

引言:智能新纪元 如今,走在街头,哪儿不被智能科技包围?智能音箱、自动驾驶汽车、聊天机器人......这些都在用不同的方式提升我们的生活体验。然而,究竟什么才能称得上“AI原生应用”呢? 什么是AI原生?   AI原生不仅仅是简单地引入人工智能功能。真正的AI原生应用犹如一个智慧的“大脑”,它的每一个决策都依赖于深度学习与数据分析。以Siri为例,它通过学习用户的习惯和需求,提供个性化的

Excel查询颜色RGB值

1.选中单元格,点右键,设置单元格格式-填充-其他颜色-自定义,下面显示的就是该单元格颜色的RGB值 2.与十六进制换算: https://www.sioe.cn/yingyong/yanse-rgb-16/

世界公认十大护眼灯数据出炉!一文看懂孩子用的台灯哪个牌子好

近年来,随着科技的迅猛发展,诸如智能手机、电脑等电子设备在工作、学习及娱乐中的应用日益广泛,人们对这些设备的依赖程度也随之加深。然而,长时间面对屏幕不可避免地给眼睛带来伤害,如眼疲劳、干燥甚至近视等问题。因此,市场对能够缓解眼疲劳的照明产品的需求日益增长。这类护眼照明产品通常采用无频闪、无紫外线辐射等技术,旨在减少对眼睛的潜在危害,有效保护视力健康,并降低眼疾的发生率。随着护眼台灯的不断创新进步,

一文详解go底层原理之垃圾回收

1 前置知识 1.1 三色回收法 三色回收法在gov1.5版本时是主流的gc方式 简单介绍一下流程: 暂停程序执行流程(开启STW)将新创建的对象全部标记为白色从根节点开始遍历,把遍历到的第一层全部改为灰色遍历一次灰色集合,将灰色集合引用对象变为黑色重复上述步骤,知道没有灰色对象清除白色对象结束STW 1.2 STW 上述1.1所说的STW就是指的stop the world,简单的说

Android raw,assets目录源使文件格式使用

播放raw目录下的mp3文件: MediaPlayer mediaPlayer1;mediaPlayer1 = MediaPlayer.create(this, R.raw.boot); //文件路径 /raw/boot.mp3mediaPlayer1.start();mediaPlayer1.stop(); 读取assets目录下图片资源文件: <Im

HSV颜色空间和RGB颜色空间相互转换C语言实现

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。 色调H 用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色

Apache Spark3.0什么样?一文读懂Apache Spark最新技术发展与展望

简介: 阿里巴巴高级技术专家李呈祥带来了《Apache Spark 最新技术发展和3.0+ 展望》的全面解析,为大家介绍了Spark在整体IT基础设施上云背景下的新挑战和最新技术进展,同时预测了Spark 3.0即将重磅发布的新功能。 2019阿里云峰会·上海开发者大会于7月24日盛大开幕,在本次峰会的开源大数据专场上,阿里巴巴高级技术专家李呈祥带来了《Apache Spark 最新技术发展和