RGB图像编码

一.简介

  • RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。

二.原理

  • RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于三者亮度之总和,越混合亮度越高,即加法混合中心三色最亮的叠加区为白色,加法混合的特点:越叠加越明亮。
  • 红、绿、蓝三个颜色通道每种色各分为256阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。当三色灰度数值相同时,产生不同灰度值的灰色调,即三色灰度都为0时,是最暗的黑色调;三色灰度都为255时,是最亮的白色调。
  • RGB是最常见的一种方案。但是,它缺乏与早期黑白显示系统的良好兼容性。因此,有时需要将RGB转换成YUV颜色空间,以维持兼容,再根据需要换回RGB格式。

三.RGB格式分类

  1. RGB555:另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。内存中RGB各个分量的排列顺序:X R R R R R G G G G G B B B B B (X表示不用,可以忽略)
  2. RGB565:使用16位表示一个像素,这16位中的5位用于R,6位用于G,5位用于B。内存中RGB各个分量的排列顺序:R R R R R G G G G G G B B B B B
  3. RGB24:使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR
  4. RGB32:使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用(ARGB32就是带Alpha通道的RGB24),内存中RGB各分量的排列顺序为:BGRA BGRA BGRA

YUV图像编码

一.简介原理

  • YUV与RGB一样,YUV 是一种彩色编码系统,主要用在视频、图形处理流水线中(pipeline)。相对于 RGB 颜色空间,设计 YUV 的目的就是为了编码、传输的方便,减少带宽占用和信息出错。一组YUV渲染屏幕上的一个像素,控制屏幕用色彩的形式将事物表现出来,其中Y表示像素中的亮度,英文是Luminance,U表示色度,英文是Chrominance,V表示浓度或饱和度,英文是Chroma。这是一种压缩后的颜色表示方法,占用更少的物理空间,且对颜色的表现失真不明显,所以现在非常常用,很多视频在播放时都是使用这种形式展现的。

二.分类

分这些类型主要原因是:

  • 人的眼睛对色度和饱和度不是特别敏感,所以一定程度上丢失一部分UV并不影响我们分辨颜色,所以为了节省存储空间,在存储时就故意丢掉部分UV分量,用两个Y分量共用一组UV分量,这种形式就是4:2:2,或用四个Y分量共用一组UV,这种形式就是4:2:0了。而这种表示形式就成为抽样格式;
    主要的抽样(subsample)格式有YCbCr4:4:4、YCbCr4:2:2、YCbCr4:2:0和YCbCr4:1:1。YUV的表示法称为A:B:C表示法:

    1. 4:4:4表示完全取样。
    2. 4:2:2表示2:1的水平取样,垂直完全采样。
    3. 4:2:0表示2:1的水平取样,垂直2:1采样。
    4. 4:1:1表示4:1的水平取样,垂直完全采样。
  • 宏观存储方式:宏观上,YUV有两种存储方式:planar、packed。
  • planar:从字面意思上来看,planar是平面的意思,平面比较平整,对应到存储方式上就是把YUV三种分量分别存储,以I420为例,存储方式为:YYYYYYYYUUVV,简单明了,先把Y存完,再存U,再存V,这种在解析时很方便
  • packed:从字面意思来看,packed是打包的意思,打包就不一定是平整的了,对应到存储方式上就是把YUV三种分量交叉存储,以YUY2为例,存储方式为:Y0U0Y1V0 Y2U1Y3V1,这种方式在解析时就会比较麻烦

三.YUV格式分类

与RGB格式相似的存储格式:YUV 4:4:4,其数据存储方式:YUV YUV YUV

  1. YU12/I420: 顺序存储,先存储完所有的Y分量,再存U,再存V:YYYYYYYYUUVV。这种在解析时很方便
  2. YV12:与YU12差不多,区别是先存储V分量再存储U分量:YYYYYYYYVVUU
  3. NV12:先存储全部的Y分量,然后UV分量交叉存储: YYYYYYYYUVUV
  4. NV21(安卓相机标准图片格式):与NV12相似,区别是V分量在前:YYYYYYYYVUVU

以上四种均为4:2:0类型,下面说几种4:2:2的:

  1. YUV422P: planar格式存储,该格式存储方式与I420是一样的,唯一的区别是UV分量的数量不同,I420中四个Y共用一组UV,而该格式中两个Y共用一组UV,就是说UV分量相对于I420在数量上多了一倍:YYYYUUVV
  2. YUYV/YUY2: packed格式存储,每两个Y分量共用一组UV分量,存储顺序是YUYV YUYV
  3. YVYU: 该格式与YUYV相似,只是存储时UV分量顺序不同而已,存储顺序是YVYU YVYU
  4. UYVY:该格式也是4:2:2类型,存储顺序是:UYVY UYVY

图像文件格式

一.图像文件最常用的几种图片格式

  1. BMP
    位图(全称:BitMaP)
    一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。
    由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。
    典型的BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。
    BMP 是 Windows 位图可以用任何颜色深度(从黑白到 24 位颜色)存储单个光栅图像。Windows 位图文件格式与其他 Microsoft Windows 程序兼容。它不支持文件压缩,也不适用于 Web 页。 从总体上看,Windows 位图文件格式的缺点超过了它的优点。BMP 文件适用于 Windows 中的墙纸。
    优点:BMP 支持 1 位到 24 位颜色深度;BMP 格式与现有 Windows 程序(尤其是较旧的程序)广泛兼容。使用普遍,结构简单。缺点: BMP 不支持压缩,图片一般不会失真,这会造成文件非常大。
  2. JPEG
    联合照片专家组(全称:Joint Photographic Expert Group),文件后辍名为".jpg"或".jpeg",是最常用的图像文件格式。
    由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,把人肉眼难以察觉的图像色彩删除,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。而且 JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1到40:1之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。但缺点就是此格式压缩后的图片无法还原。
    JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
  3. GIF
    图形交换格式(全称:Graphics Interchange Format),是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。几乎所有相关软件都支持它。
    GIF图像文件的数据是经过压缩的,采用了"可变长度等压缩算法"。所以GIF的图像深度从lbit到8bit,也即GIF最多支持256种色彩的图像。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像。原理是:把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可形成动画。
    GIF解码较快,因为采用隔行存放的GIF图像,在边解码边显示的时候可分成四遍扫描。第一遍扫描虽然只显示了整个图像的八分之一,第二遍的扫描后也只显示了1/4,但这已经把整幅图像的概貌显示出来了。在显示GIF图像时,隔行存放的图像会给您感觉到它的显示速度似乎要比其他图像快一些,这是隔行存放的优点;另外,GIF不支持Alpha透明通道。
  4. PNG
    便携式网络图形(全称:Portable Network Graphics),是网上接受的最新图像文件格式。PNG支持动态图片和背景透明,与GIF相似,它能够提供长度比GIF小30%的无损压缩图像文件,能处理的色数最大可达280兆色;它同时提供24位和48位真彩色图像支持以及其他诸多技术性支持,有取代GIF的趋势,但很多web浏览器不支持。
    此处谈到了真彩色,解释一下:
    真彩色是指图像中的每个像素值都分成红、绿、蓝三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为真彩色。例如用RGB 5∶5∶5表示的彩色图像,R,G,B各用5位,用R,G,B分量大小的值直接确定三个基色的强度,这样得到的彩色是真实的原图彩色。简单来说,就是所有的色彩被细分的意思,跟分辨率的大小表现形式差不多。
    16位色的发色总数是65536色,也就是2的16次方;
    24位色被称为真彩色,它可以达到人眼分辨的极限,发色数是1677万多色,也就是2的24次方。
    32位色就并非是2的32次方的发色数,它其实也是1677万多色,不过它增加了256阶颜色的灰度,为了方便称呼,就规定它为32位色。少量显卡能达到36位色,它是24位发色数再加512阶颜色灰度。
    48位色彩位数意味着可以捕获到281万亿种色彩。
  5. RAW
    RAW中文解释是“原材料”或“未经处理的东西”。RAW文件包含了原图片文件在传感器产生后,进入照相机图像处理器之前的一切照片信息。用户可以利用PC上的某些特定软件对RAW格式的图片进行处理。RAW是TIFF和JPEG的平衡:既保证了照片的画质和颜色,又节省储存空间。
  6. TIFF格式
    TIFF(Tag Image File Format标签图像文件格式)是Mac中广泛使用的图像格式。它的特点是图像格式复杂,存贮信息多,正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常由利于原稿的复制,但兼容性较差。目前在Mac和PC机上移植TIFF文件也十分便捷,因此TIFF现在也是微机上使用最广泛的图像格式之一。很多地方将TIFF格式用于印刷。

二. 图像数据存储/输出的格式:RAW DATA、RGB和YUV

  • 什么是RGB?
    RGB是红绿蓝三原色的意思,R=Red、G=Green、B=Blue。

  • 什么是YUV/YCbCr/YPbPr?
    亮度信号经常被称作Y,色度信号是由两个互相独立的信号组成。视颜色系统和格式不同,两种色度信号经常被称作U和V或Pb和Pr或Cb和Cr。这些都是由不同的编码格式所产生的,但是实际上,他们的概念基本相同。在DVD中,色度信号被存储成Cb和Cr(C代表颜色,b代表蓝色,r代表红色)
    对于需要经常进行YUV与RGB相互转换,公式如下(RGB取值范围均为0-255):
    Y = 0.299R + 0.587G + 0.114B
    U = -0.147R - 0.289G + 0.436B
    V = 0.615R - 0.515G - 0.100B
    R = Y + 1.14V
    G = Y - 0.39U - 0.58V
    B = Y + 2.03U

  • 什么是RAW DATA格式?
    CCD或CMOS在将光信号转换为电信号时的电平高低的原始记录,单纯地将没有进行任何处理的图像数据,即摄像元件直接得到的电信号进行数字化处理而得到的。

  • 模组相关小知识:
    支持YUV/RGB 格式的模组,一般会在模组上集成 ISP(Image Single Processor图像单处理器),经过A/D 转换过的原始数据经过 ISP 处理生成 YUV 标准格式传到 BB。一般来说,这种设计适用于低像素 Camera 的要求,会在主板上省去一个 DSP,可降低成本。在调试过程中,YUV/RGB 格式的摄像头,其所有参数都可在 kernel 层通过寄存器来控制。调试一般由 sensor的原厂支持。
    支持 RawData 格式的模组,由于感光区域的需求,不会再模组内集成 ISP 以最大程度的增大感光区域的面积,提高照片质量。模组把原始的数字信号传给 BB 上的 DSP 进行处理,MTK 自带的 DSP 一般包含 ISP、JPEG encoder和DSP控制芯片。在调试的时候图像的效果需要MTK在HAL层的参数进行支持。

图像文件格式与数据存储/传输格式详解相关推荐

  1. TCP数据包协议格式详解

    出一个专栏把通信协议搞一下吧,万物互联的根本呀. IP 版本4位:4(二进制0100)表示IPv4,6(二进制0110)表示IPv6 报头长度(单位4byte):因为选项长度不确定,取值范围是5-15 ...

  2. python存储-Python数据存储之 h5py详解

    1.Python数据存储(压缩) (1)numpy.save , numpy.savez , scipy.io.savemat numpy和scipy内建的数据存储方式. (2)cPickle + g ...

  3. COAP数据包协议格式详解

    Ver:版本编号,占2bit,固定01 T:报文类型,占2bit,CON=00,NON=01,ACK=10,RST=11 CON--需要被确认的请求,如果CON请求被发送,那么对方必须做出响应. NO ...

  4. UDP数据包协议格式详解

    源端口目的端口:是0-65535任何数字,在收到请求时系统会为客户端动态分配,0-1023为知名端口号 报文长度(单位4byte):表示udp报头+udp数据总长度,有别于tcp,也没有选项 UDP报 ...

  5. Pcap 数据包捕获格式详解

    Pcap 是 Packet Capture 的英文缩写,是一种行业标准的网络数据包捕获格式.如果你是网络开发人员,那么通常会使用 Wireshark.Tcpdump 或 WinDump 等网络分析器捕 ...

  6. GB28181 PS流传输格式详解

    1.PS流传输格式预览 1.视频关键帧的封装 RTP + PS header + PS system header + PS system Map + PES header +h264 data 2. ...

  7. 数据存储方式_详解西门子S7-200PLC的数据区

    (一)数字量输入和输出映象区 1.输入映象寄存器(数字量输入映象区)(I) 数字量输入映象区是S7-200CPU为输入端信号状态开辟的一个存储区.输入映像寄存器的标识符为I,在每个扫描周期的开始,CP ...

  8. Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...

  9. 数据包在网络中的传输过程详解

    我们当今使用电子设备都离不开网络,通过网络我们可以聊天.玩游戏.看电影都操作. 网络的本质就是交换数据. 本文我们就来看下数据是如何在网络中传输的. 计算机网络模型 现在有两种计算机网络模型,分别为O ...

最新文章

  1. 《虚拟化与云计算》读书感(三)数据中心的概述
  2. 开始写博客,毕业一年的收获
  3. 数组排序c语言函数_C语言如何写出返回数组最大最小值之差的函数(C primer plus 10-5)...
  4. c++设计模式编程基础
  5. html5有foreach吗,JavaScript中的map()和forEach()有什么区别?
  6. SSIS常用的包—大量插入任务(Bulk Insert task)
  7. php云和骑士哪家好,PHP云人才系统与骑士cms人才系统对比点评
  8. 牛客练习赛69 解方程
  9. 央视315曝光SDK事件,应用开发者如何避坑?
  10. 贝叶斯参数估计的理解及其在电商算法中的应用
  11. 安装MATLAB R2012B遇到问题(需要继续安装以下一个或多个产品: MATLAB 8.0 (不可用) 您必须选择已至少安装这些),已决解!...
  12. PCB SQL SERVER 枚举分割函数(枚举值分解函数)
  13. v割与邮票孔_pcb板V割和邮票孔的区别
  14. 学习webpack系列之四 ---- (学习开发环境)
  15. 一种定位激光在摄像头画面中位置的方法(附安卓源码)
  16. KVM 虚拟化技术(理论详解+实战)
  17. Internet浏览器,C:\fakepath路径问题
  18. 一文搞懂单片机驱动8080LCD
  19. java黄金矿工完整源代码_黄金矿工funcode版(源码加实验报告)
  20. ajax上传图片文件

热门文章

  1. Java使用WebDriver模拟登陆(Chrome)
  2. 使用Zuul构建微服务网关(红莲业火)
  3. Auto.js 教程 高级教程 界面 技术 技巧
  4. 一款强大的Android网络渗透软件dsploit
  5. 乌合之众—131不同群体的分类及其特点
  6. 【BDTC2016】D-uni FounderCEO查理:数据敏捷性,数据时代的云架构
  7. 前端基础-JavaScript(行为层)
  8. 一个黑客的自白:教主20岁赚2000万
  9. openmv可以自己画板子做
  10. 【论文写作】之LaTeX中插入Visio图文件