一文看懂图像格式 RAW、RGB、YUV、Packed/Unpacked、Bayer、MIPI、Planar、Semi |
您所在的位置:网站首页 › yuv444和yuv422区别 › 一文看懂图像格式 RAW、RGB、YUV、Packed/Unpacked、Bayer、MIPI、Planar、Semi |
目录 一、通用属性 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,那么就没有占位。 为方便大尺寸图像存储、传输,常用压缩的方法进行。 对于isp而言,常见压缩算法有FLC(Fixed Length Compression)、AFBC(Arm Frame Buffer Compression),JPEG等。 下文所讲内存分布均指非压缩格式,因为压缩后的内存分布由算法决定。 二、RAWRAW的含义是“未经处理加工”。 RAW图像是CCD/CMOS等sensor直接采集到的图像,是光信号转化为电信号时的电平高低的原始记录。 1. Bayer格式RAW一般采用Bayer格式(单个像素为R/G/B光强信息)进行排列,由于人眼对绿色更加敏感,因此增加对绿光的采样。主要有四种排序: RGGBBGGRGRBGGBRG举例一个像素是8*8的sensor,BGGR格式的RAW图像: 要么你可能会问,一个像素只有一种颜色R/G/B,那我们看到的图像比如第一个像素不一定是只有B。因为后面会插值计算出每个pixel的其他分量!以降低功耗。 2. 分类 RAW8:1 pixel 8 bitsRAW10Unpacked:1 pixel 2 Bytes(16bits,有6bit没用)RAW10Packed:1 pixel 10 bitsRAW12Unpacked/RAW12PackedRAW14Unpacked/RAW14PackedRAW16......RAW格式很大,往往需要压缩处理存入DDR。 3. MIPI RAWMIPI RAW要按照MIPI RAW的存储规则来存储。举例来说,对于MIPI RAW10,5个Byte(40bits)就可以存4个像素的数据(4*10bits)。 每个像素由三原色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) 四、YUVYUV是用一个亮度分量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 * URGB转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*hYUV422,2个Y共用一套UV,数据个数2*w*hYUV444,不共用,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 UUNV12(属于YUV420 Semi-Planar) 总数据个数w*h+0.5*w*h=1.5*w*h YYYY YYYY UVUVNV21(属于YUV420 Semi-Planar) 总数据个数w*h+0.5*w*h=1.5*w*h YYYY YYYY VUVUI422(属于YUV422 Planar) 总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h YYYY YYYY UUUU VVVVYV16(属于YUV422 Planar) 总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h YYYY YYYY VVVV UUUUNV16(属于YUV422 Semi-Planar) 总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h YYYY YYYY UVUV UVUVNV61(属于YUV422 Semi-Planar) 总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h YYYY YYYY VUVU VUVUYUVY(属于YUV422 Interleaved) 总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h YUVY YUVY YUVY YUVYVYUY(属于YUV422 Interleaved) 总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h VYUY VYUY VYUY VYUYUYVY(属于YUV422 Interleaved) 总数据个数w*h+0.5*w*h+0.5*w*h=2*w*h UYVY UYVY UYVY UYVYI444(属于YUV444 Planar) 总数据个数w*h*3 YYYY YYYY UUUU UUUU VVVV VVVVYV24(属于YUV444 Planar) 总数据个数w*h*3 YYYY YYYY VVVV VVVV UUUU UUUUNV24(属于YUV444 Semi-Planar) 总数据个数w*h*3 YYYY YYYY UVUVUVUV UVUVUVUVNV42(属于YUV444 Semi-Planar) 总数据个数w*h*3 YYYY YYYY VUVUVUVU VUVUVUVUYUV 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等等。 不断更新,还在路上...... |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |