当前位置: 代码网 > 科技>电脑产品>内存 > 一文看懂图像格式 RAW、RGB、YUV、Packed/Unpacked、Bayer、MIPI、Planar、Semi-Planar、Interleaved

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

2024年08月01日 内存 我要评论
本文详细分析各种图像格式(RAW、RGB、YUV)的分类、内存分布。

目录

一、通用属性

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要按照mipi raw的存储规则来存储。举例来说,对于mipi raw10,5个byte(40bits)就可以存4个像素的数据(4*10bits)。

三、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(属于yuv420 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(属于yuv420 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(属于yuv422 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(属于yuv422 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(属于yuv422 interleaved)

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

vyuy vyuy
vyuy vyuy

  uyvy(属于yuv422 interleaved)

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

uyvy uyvy
uyvy uyvy

i444(属于yuv444 planar)

总数据个数w*h*3

yyyy
yyyy
uuuu
uuuu
vvvv
vvvv

yv24(属于yuv444 planar)

总数据个数w*h*3

yyyy
yyyy
vvvv
vvvv
uuuu
uuuu

nv24(属于yuv444 semi-planar)

总数据个数w*h*3

yyyy
yyyy
uvuvuvuv
uvuvuvuv

 nv42(属于yuv444 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等等。

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com