HDR转SDR实践之旅(三)YUV420转YUV公式

2023-11-21 05:10

本文主要是介绍HDR转SDR实践之旅(三)YUV420转YUV公式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

YUV420是什么

HDR转SDR的第一步是解码出10位YUV纹理,但是YUV会转成YUV420存储,渲染之前需还原成原始的YUV,本篇文章讲的就是如何用公式高效实现YUV420转YUV。如果你觉得有所收获,来给HDR转SDR开源代码点个赞吧,你的鼓励是我前进最大的动力。

yuv420vsyuv.png

人眼对Y亮度通道比起UV色度通道来更敏感,降低UV采样对图像影响不大从而减小视频大小,如上图所示左边是亮度通道,中间是色度通道,右边是亮度通道和色度通道合成的实际图像,第二行的YUV420色度通道减小采样后实际图像就变成右边的图像,实际操作中因为色度通道周围像素之间的差异很小,YUV420的实际图像和YUV的实际图像看起来差不多。

image.png

如上图所示UV通道横竖方向只采样一半数据,四个Y共用一对UV。颜色相同的YUV属于同一组,如下图所示上下左右的Y1、Y2、Y5、Y6共用U1、V1,而不是连续一行的Y1、Y2、Y3、Y4,这就是所谓两个方向采样一半的意思。根据UV存储顺序不一样,YUV420有四种格式i420、YV12、NV12、NV21,YUV420是从YUV中转换出来的,自然也能转换回去,常规方案是把YUV420的YUV通道拆成3个图像(Y图像U图像V图像)再组装成YUV,这种方式比较耗时其实可以省去YUV拆图像的步骤直接用YUV420算出YUV,注意以下公式针对YUV420的二维图像(一维图像同理)。

image.png

四种YUV420的区别

四种YUV420只是UV存储顺序不同,其他都一样。

YUV420格式存储区别
i420Y+U+VYUV3个通道都是分开的,U在V前面
YV12Y+V+UYUV3个通道都是分开的,V在U前面
NV12Y+UVY通道是分开的,UV通道都是混合的,U在V前面
NV21Y+U+VY通道是分开的,UV通道都是混合的,V在U前面

YUV420转YUV公式

四种YUV420公式推导过程,如果看的时候糊涂不要沮丧,记住一个核心转换原则就是公式根据YUV420和YUV图像的位置关系推导,看不懂的时候可以根据画的YUV420和YUV图像自己推导。

i420转YUV

i420先放完所有U再放所有V(记法就是Y+U+V),U不一定占满整一行,如下图所示最后一个U9在整一行的中间,这也是为什么不直接用网上常见示意图解释的原因。

Pasted Graphic 2.png

那么如何从i420图像转换出YUV图像呢?

定义: i420(x,y) 表示i420图像,YUV(x,y)表示YUV图像,x是横坐标,y是纵坐标,坐标从0开始计算

已知 i420(x,y),求YUV(x,y)

如下图所示YUV(5,2)就是粉红色方块的位置Y18U6V6

image.png

Y(5,2):i420(5,2)=Y18

U(5,2):i420(5,6)=U6

V(5,2):i420(2,8)=V6

实际操作过程中没有颜色可以直观来看,最终需要使用转换公式,其实就是算出YUV的 ( x , y ) (x,y) (x,y)坐标在i420图像中的对应位置。
$$
Y(x,y)=i420(?,?)\

U(x,y)=i420(?,?)\

V(x,y)=i420(?,?)\
$$
i420转YUV公式推理过程:

image.png

Y1-Y17红色线框横竖坐标采样一半得到是6个蓝色线框,与之对应U1-U6蓝色线框也刚好是6个,这说明U位于所有U的个数等于Y横竖坐标采样一半的个数。个数和坐标的关系很简单,横坐标就是个数除以宽的余数,纵坐标就是个数除以宽的商。U在所有YUV的个数还要在所有U的个数加上偏移量,U要加上偏移量 W ∗ H W * H WH(前面所有Y的个数),V同理也要加上偏移量 W ∗ H ∗ 5 / 4 W * H * 5 / 4 WH5/4(前面所有Y的个数加上所有U的个数)。

7d5ce1ac1f4f4359a39c5221f240e267_tplv-k3u1fbpfcp-zoom-1.jpg

注意:

  1. i表示UV在各自通道第几个,U和V求的时候加上偏移量就是求UV在整个i420图像第几个
  2. 除2不保留小数的,不要以为除2再乘2没有变化

YV12转YUV

YV12就是i420的UV位置换了换,记法就是Y+V+U,V在前所以是YV12而不是YV21

Pasted Graphic 4.png

公式不复述了,如下图

Pasted Graphic 9.png

NV12转YUV

Pasted Graphic 7.png

NV12的UV混在一起排列的其中U在前,记法就是Y+UV

image.png

上图红色的线长度相等,绿色的线长度刚好一半,这说明N12中U的横坐标和对应4个Y的第一个Y横坐标相等,U的纵坐标是Y纵坐标的一半加上YUV的高,V和U的关系就是横坐标加1就行

image.png
注意: 除2不保留小数的,不要以为除2再乘2没有变化

NV21转YUV

NV21就是NV12的UV位置换了换,记法就是Y+VU

Pasted Graphic 8.png

公式不复述了,如下图

Pasted Graphic 12.png

问题思考

下面3个问题留给大家思考

1.YUV420为什么叫YUV420,其中的0是什么意思?

2.怎么解决YUV420对齐中产生的绿边问题?

3.上述公式如何简化?

系列文章

  • HDR转SDR实践之旅(一)流程总结
  • HDR转SDR实践之旅(二)解码10位YUV纹理
  • HDR转SDR实践之旅(三)YUV420转YUV公式
  • HDR转SDR实践之旅(四)YUV转RGB矩阵推导
  • HDR转SDR实践之旅(五)色域转换BT2020转BT709
  • HDR转SDR实践之旅(六)传递函数与色差矫正
  • HDR转SDR实践之旅(七)Gamma、HLG、PQ公式详解
  • HDR转SDR实践之旅(八)色调映射
  • HDR转SDR实践之旅(九)HDR开发资源汇总
  • HDR转SDR实践之旅(十)SDR转HDR逆色调映射探索

这篇关于HDR转SDR实践之旅(三)YUV420转YUV公式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

springboot整合swagger2之最佳实践

来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。 一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 SpringBoot集成 pom <!--swagge