RAW、RGB 、YUV三种图像格式理解

news2024/11/24 20:09:11

文章目录

    • 1. 背景
    • 2. 相关概念
      • 2.1 颜色与色彩空间
      • 2.2 RAW图像
      • 2.3 RGB图像
      • 2.4 YUV图像
    • 3. 分类简图

RAW、RGB 、YUV三种图像格式理解

1. 背景

在工作中,经常听到用来描述图像格式的RAW,RGB与YUV,但一直没有系统的进行了解,处于局部认知的理解下,现在将相关理解记录。

2. 相关概念

2.1 颜色与色彩空间

  • 颜色
    • 颜色是人眼感知到的现象,它是由光波的频率和强度所决定的,仅仅存在于人的眼睛和大脑中,因此为了方便描述颜色,引入了色彩空间。
  • 色彩空间
    • 色彩空间(Color Space)是用于描述、定义和组织颜色的一种方法,它是一个三维坐标系,其中每个坐标都代表一种颜色。在计算机图形学中,色彩空间被广泛应用于调整、转换和操纵颜色。在色彩空间中,经常使用的三种坐标是 RGB(红色、绿色、蓝色)。
      • RGB:常用于在显示器或电视屏幕上显示颜色,使用红、绿和蓝三种原色来组合出各种颜色,是一种加法颜色模型。

色彩空间

2.2 RAW图像

  • RAW

    • RAW 图像是指图像传感器数字图像,这种图像未经过任何处理,未压缩和未降噪,保留了其原始数据,以便后续的数字后期制作和处理。
  • 采集过程

    • 环境光/补光灯照在物理表面形成反射 –> 镜头汇聚光线 –> 图像传感器彩色滤镜阵列(CFA)将单色光照在光电二极管 –> 光电转换 –> ADC采集,其他模块转换排列为 设置的 bayer格式的RAW。

RAW 一般是使用 bayer 格式进行排列,每个像素实际只包含单种特定颜色 的光的强度(比如单个像素只能为R/G/B亮度信息)。

彩色滤镜CFA

由于人眼对于绿色更加敏感,所以加重了其在感光点的权重,Bayer格式中的G分量都是B、R分量的两倍。

  • bayer 序格式按照排列组合,一共分为4种:

    排列1排列2排列3排列4
    RG
    GB
    BG
    GR
    GR
    BG
    GB
    RG

在这里插入图片描述

2.3 RGB图像

RGB 图像是一种数字图像格式,其名称既指代了该图像格式所使用的颜色空间(红、绿、蓝),也指代了图像本身,其中包含了红、绿、蓝三色通道的像素值。

在 RGB 空间中的颜色可以通过各种亮度级别的三种原色进行表示,通常使用 8 位整数值(0-255)来描述每个通道的亮度级别。因此,成像设备所成功捕捉到的颜色信息可以进行比较精确的映射和表示。

常用的 RGB 格式包括颜色通道的信息位数、每种颜色可以表示的颜色数量和典型应用场景等。

RGB 格式颜色通道信息位数可表示的颜色数量典型应用场景
RGB888每种通道均为 8 位16,777,216数字图像处理、计算机游戏、电影和摄影等
RGB565R: 5位, G: 6位, B: 5位65,536嵌入式应用、机器视觉、数字标志等
RGBA8888R,G,B 各 8 位,A 通道为 8 位16,777,216图像编辑、视觉效果、移动应用等
RGB332每个通道均为 3 位,共 8 位256简单图形、低成本设备、老式显示器等

注意,这里列出的应用场景只是典型的用途,实际应用还要根据具体情况进行选择。

2.4 YUV图像

YUV 图像是一种将图像亮度(Y)和颜色(U、V)分离的数字图像格式,常用于视频编码和数字图像处理的领域。下面介绍一下常见的 YUV 采样与排列方式。

  1. YUV 采样方式

在 YUV 图像格式中,针对颜色信息的采样方式有以下几种:

  • 4:4:4:Y、U、V 三个分量的采样比例均为 1:1,没有任何采样压缩,图像质量最高,但是处理的数据量也最大,需要更多的存储和传输带宽。

  • 4:2:2:Y 分量的采样比例为 1:1,U、V 分量的采样比例为 1:2,即在水平方向上每两个 Y 像素对应一个 UV 像素,垂直方向上不进行压缩,可支持更多的压缩算法和更高的编码效率。

  • 4:2:0:Y 分量的采样比例为 1:1,U、V 分量的采样比例为 1:2,即在水平和垂直方向上每两个 Y 像素对应一个 UV 像素。是很多视频编解码标准的默认格式之一,可在较小的数据量和带宽开销下,实现较高的编解码效率。

  • 4:1:1:Y 分量的采样比例为 1:1,U、V 分量的采样比例为 1:4,即在水平方向上每四个 Y 像素对应一个 UV 像素,垂直方向上不进行压缩,在一些比较老旧的视频编解码标准中可能会使用。

  1. YUV 排列方式

在 YUV 图像格式中,针对采样后的 Y、U、V 分量的排列方式有以下几种:

  • Planar:将 Y、U、V 三个分量单独存放在不同的内存区域中,每个分量都是独立的一维数组,三个数组都存储着相同的宽度和高度。

  • Packed:将 Y、U、V 三个分量数据以一种交叉存储的方式来存放,三个分量紧密地排列在内存中,常见的排列方式有 YYUV、YVYU、UYVY 等。

  • Semi-Planar:将 U、V 两个色度分量合并在一起作为一个独立的数组 VU(或者 UV),与亮度分量 Y 组成一个二维数组,常见的排列方式有 YUV420、YUV422 等。

  • Interleaved:将 RGB 24 位像素格式进行 YUV 转换后得到的 YUV422_YUYV 格式,即 YUV 分量以交错方式存储在内存中,Y 和 U、V 之间依次交替进行存储。

总之,对于 YUV 图像格式,常见的采样方式包括 4:4:4、4:2:2、4:2:0 和 4:1:1 等,常见的排列方式包括 Planar、Packed、Semi-Planar 和 Interleaved 等。根据不同的应用场景和编解码标准的需求,通常会选择不同的采样和排列方式。

下面是YV12(YUV420)格式简图以及内部排布图:
在这里插入图片描述

3. 分类简图

在这里插入图片描述

分类简图图片来自网络,如有侵权,联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/579261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis实战之实现共同关注

Redis实战之实现共同关注 一 需求 二 实现 package com.hmdp.service.impl;import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.…

用ChatGPT一分钟自动产出一份高质量PPT

如何用ChatGPT一分钟自动产出一份高质量PPT,节约时间摸鱼呢?废话少说,直接上案例。 一.用ChatGPT做一下提问,这里我用的小程序万事知天下,根据自己PPT的需求,制作chatgpt的prompt就行了。 请帮我创建一个以…

Spring Security 核心解读(一)整体架构

Spring Security 整体架构 前提整体架构Servlet 整体的过滤器模型Security 过滤器链自定义过滤器 实际开发解决方案一个替代cookie认证的filter其他组件,后续抽时间再整理整理 前提 开源项目一手文档基本都在github,标准文档基本都在官网。 最好的文档就…

在Centos Stream 9上Docker的实操教程 - Docker的常用命令

在Centos Stream 9上Docker的实操教程 - Docker的常用命令 Docker启动类命令Docker镜像命令镜像列表 docker images镜像查找 docker search拉取镜像 docker pull删除镜像 docker rmi查看占用信息 docker system df容器创建新镜像 docker commit 容器命令启动容器 docker run查看…

【历史上的今天】4 月 27 日:Tumblr 上线;施乐推出了 Star 工作站;第一台安德伍德打字机诞生

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 4 月 27 日,在 1791 年的今天,摩斯电码的共同发明者、电报发明者塞缪尔摩斯(Samuel Morse)诞生。摩斯最开始是一…

基于springboot + vue 的学生成绩管理系统

基于springboot vue实现的学生成绩管理系统 主要模块: 1)学生模块:我的成绩、成绩统计、申述管理、修改密码 2)教师模块:任务管理、对学生班级任务安排、班级学生的成绩查看、申述管理 3)管理员模块&…

Vue自定义插件的使用

通过 Vue 实例绑定方法: 在 plugins.js 文件中创建 filter 过滤器,定义一个只返回前四个字符的方法。 export default {install(Vue){// 定义过滤器Vue.filter(mySlice,function(value){return value.slice(0,4);})} } 由于我们之前在 main.js 文件中引入…

六级备考20天|CET-6|翻译练习|真题·红楼梦|8:50~9:08+11:33~12:00

目录 1 中文 2 英文​ 3 解析 4 订正 ​ 1 中文 漏翻译:具有很强的艺术感染力! 2 英文 3 解析 tell 讲述 tragic love story 悲剧性爱情故事 own painful personal experience 自己痛苦的个人经历 major/minor characters 主要/次要人物 be viv…

SSH爆破攻击及应急响应/事件处置

提示:本文是我做的笔记,有问题可以留言 目录 前言一、什么是SSH?二、开始前的准备1.扫描2.准备爆破3.准备ssh登录登陆后的准备nc反弹 应急响应/事件处置1.查看网络连接情况2.查看守护进程3.删除,结束异常后门4.修改密码 总结 前言…

day40_servlet

今日内容 零、 复习昨日 一、注解 二、改造项目 三、请求转发 四、重定向 零、 复习昨日 一、注解(Annotation) 注解,又称为注释.它是给程序看的注释. JDK1.5后才出现的,作用是为了提高开发效率的,如何做到?(一个注解可以简化很多很多代码…) 常见注解: Override 1.1 自定义注…

Linux基础开发工具之软件包管理器

目录 前言 1.什么是软件包 2.软件下载的三种方式 3. Linux软件生态 4. 使用yum安装软件 5.yum源的相关介绍 总结: 前言 Linux作为一款操作系统,其自然也和我们其他的操作系统一样需要安装对应得软件去满足我们的需求,因此为了更好的下载…

ICV报告: ADAS SoC市场规模将在2024年迎来较大突破

随着先进驾驶辅助系统(ADAS)的出现和对于自动驾驶的追求,汽车行业正在经历快速转型。这些技术进步的核心是ADAS SoC,它是实现多个功能集成于单一平台的关键组件。ADAS SoC已经成为智能汽车的重要驱动因素,彻底改变了安…

ArduPilot开源代码之H743+BMI270x2+ChibiOS配置适配

ArduPilot开源代码之H743BMI270x2ChibiOS配置适配 1. 源由2. 配置适配2.1 bootloader配置2.2 flight controller配置 3. 4.3.6固件编译Step 1: 获取源代码Step 2: 准备编译环境Step 3: 复制配置文件Step 4: 编译bootloaderStep 5: 编译飞控 4. 基础配置4.1 机型配置4.2 IMU校准…

通过python采集lazada商品详情数据接口,支持多站点。

为了采集Lazada商品详情,您可以使用Python的网络爬虫库(例如BeautifulSoup、Scrapy等)来获取页面内容。以下是基本步骤: 安装所需的Python库(例如requests、BeautifulSoup等)。使用requests库发送GET请求并…

C/C++开发,libiec61850库学习及运用

目录 一、libiec61850库下载编译 1.1 下载 1.2 linux编译: 1.3 win编译 二、案例编译测试 2.1 CMakeLists.txt调整(server_example_goose) 2.2 模型static_model.h/static_model.cpp生成 2.3 案例编译(server_goose) 2.4 客户端编译 2.5 运行测试 一、libiec61850…

SAP-MM 条件类型字段解析

01、“定价类型”:定义此条件类型的代码和描述,代码不能重复,描述可更改,根据实际需要,条件类型可定制; 02、“存取顺序”:表示此条件类型在定价时,要到存取顺序号定义的条件表中读…

学C的第二十二天【深度剖析数据在内存中的存储:1. 数据类型介绍;2. 整型在内存中的存储】

相关代码gitee自取:C语言学习日记: 加油努力 (gitee.com) 接上期:学C的第二十一天【初阶测评讲解:1. 计算递归了几次;2. 判断 do while 循环执行了几次;3. 求输入的两个数的最小公倍数;4. 将一句话的单词进…

day39_servlet

今日内容 零、复习昨日 一、接收请求 二、处理响应 三、综合案例 零、复习昨日 见晨考 一、接收请求 浏览器发出请求,经过web.xml映射匹配,找到Servlet对应的方法(doGet/doPost),接收请求数据,可以接收请求中的请求行,请求头,请求正文,具体流程如下 浏览器发出请求 …

OpenAI ChatGPT API + FaskAPI SSE Stream 流式周转技术 以及前端Fetch 流式请求获取案例

先填坑,一贯习惯 nginx如果要支持SSE,要调整一些参数 conf配置文件,AI给的,具体自己没搭,应该是正确的 nginx worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_typ…

Ubuntu下编译运行MicroPython Unix版本

文章目录 github拉取源码更新模块编译运行 github拉取源码 到Github(https://github.com/micropython/micropython)上下载源码 终端输入,如果提示识别不到gh命令,就sudo apt-get install gc安装一下。 再根据提示在终端里登录自己的github账号。 再次…