当前位置: 首页 > article >正文

告别HDR格式混乱:用Python代码实战HLG与PQ曲线互转(附完整代码)

告别HDR格式混乱用Python代码实战HLG与PQ曲线互转附完整代码在视频处理领域HDR高动态范围技术已经成为提升视觉体验的关键要素。然而HLGHybrid Log-Gamma和PQPerceptual Quantizer这两种主流HDR标准之间的转换问题却让不少开发者头疼。本文将带你深入理解这两种曲线的核心差异并通过可落地的Python代码实现它们之间的相互转换。1. HDR技术基础与核心概念HDR技术的核心在于更宽广的亮度范围和更丰富的色彩表现。要理解HLG与PQ的转换首先需要掌握几个关键术语OETF光电转换函数将场景中的线性光信号转换为非线性电信号EOTF电光转换函数将非线性电信号转换为显示器输出的线性光信号OOTF光光转换函数连接场景光与显示光的映射关系# 常用常量定义 a_2020 0.2627 # BT.2020标准中的RGB转YUV系数 b_2020 0.6780 c_2020 0.0593HLG与PQ的根本区别在于它们的应用场景和设计理念特性HLGPQ设计目标广播电视数字影院/高端显示设备亮度处理相对亮度自适应显示能力绝对亮度固定10000nit标准元数据需求不需要需要典型应用广播电视、流媒体电影制作、专业显示2. 色彩空间转换基础在HDR处理中YUV与RGB色彩空间之间的转换是基础操作。以下是BT.2020标准下的转换实现import numpy as np import cv2 def RGB2YUV_bt2020(R, G, B): BT.2020 RGB转YUV Y a_2020 * R b_2020 * G c_2020 * B Cb (B - Y) / 1.8814 Cr (R - Y) / 1.4747 # 量化到10bit范围 Y (219 * Y 16) * 4 Cb (224 * Cb 128) * 4 Cr (224 * Cr 128) * 4 return np.uint16(Y), np.uint16(Cb), np.uint16(Cr) def YUV2RGB_bt2020(Y, U, V): BT.2020 YUV转RGB Y (Y/4 - 16)/219 Cb (U/4 - 128)/224 Cr (V/4 - 128)/224 R Y 1.4747 * Cr G Y - (0.2627 * 1.4747 / 0.6780) * Cr - (0.0593 * 1.8814 / 0.6780) * Cb B Y 1.8814 * Cb return np.clip(R, 0, 1), np.clip(G, 0, 1), np.clip(B, 0, 1)注意实际工程中需要考虑色度下采样如4:2:0的处理上述代码假设输入已经是正确采样格式。3. PQ曲线核心算法实现PQ曲线由SMPTE ST 2084标准定义其核心是EOTF和逆EOTF的实现# PQ曲线相关常量 m1 2610 / (4096 * 4) m2 2523 * 128 / 4096 c1 3424 / 4096 c2 2413 * 32 / 4096 c3 2392 * 32 / 4096 def pq_EOTF(E_p): PQ电光转换函数从电信号到光信号 E_p np.float32(E_p) E_i np.power(E_p, 1/m2) e_i E_i - c1 E_0 np.maximum(e_i, 0) deno c2 - c3 * E_i Y_i np.power(E_0 / deno, 1/m1) return Y_i def pq_inverse_EOTF(Y): PQ逆电光转换函数从光信号到电信号 Y np.float32(Y) Y_m1 np.power(Y, m1) num c1 c2 * Y_m1 den 1 c3 * Y_m1 E_p np.power(num / den, m2) return E_p4. HLG曲线核心算法实现HLG标准由BBC和NHK联合开发其核心是OETF和逆OETF# HLG相关常量 hlg_a 0.17883277 hlg_b 0.28466892 hlg_c 0.55991073 hlg_tsd 1/12 # 过渡点 def hlg_OETF(E): HLG光电转换函数 E np.float32(E) mask E hlg_tsd E_p np.where(mask, np.sqrt(3 * E), hlg_a * np.log(12 * E - hlg_b) hlg_c) return E_p def hlg_inverse_OETF(E_p): HLG逆光电转换函数 E_p np.float32(E_p) mask E_p 0.5 E np.where(mask, np.power(E_p, 2) / 3, (np.exp((E_p - hlg_c) / hlg_a) hlg_b) / 12) return E5. HLG与PQ互转实战5.1 PQ转HLG完整流程def pq_to_hlg(R_pq, G_pq, B_pq, display_peak1000): 将PQ信号转换为HLG信号 参数 R_pq, G_pq, B_pq: PQ编码的RGB值0-1范围 display_peak: 显示设备峰值亮度单位nit 返回 R_hlg, G_hlg, B_hlg: HLG编码的RGB值 # 步骤1PQ EOTF获取显示线性光 Rd pq_EOTF(R_pq) Gd pq_EOTF(G_pq) Bd pq_EOTF(B_pq) # 步骤2亮度归一化假设母带为1000nit scale display_peak / 1000 Rd np.minimum(Rd * scale, 1.0) Gd np.minimum(Gd * scale, 1.0) Bd np.minimum(Bd * scale, 1.0) # 步骤3计算显示亮度并应用逆OOTF YD 0.2627 * Rd 0.6780 * Gd 0.0593 * Bd gamma 1.2 * np.sqrt(1000 / display_peak) YD_gamma np.power(YD, (1 - gamma) / gamma) Rs Rd * YD_gamma Gs Gd * YD_gamma Bs Bd * YD_gamma # 步骤4应用HLG OETF R_hlg hlg_OETF(Rs) G_hlg hlg_OETF(Gs) B_hlg hlg_OETF(Bs) return R_hlg, G_hlg, B_hlg5.2 HLG转PQ完整流程def hlg_to_pq(R_hlg, G_hlg, B_hlg, display_peak1000): 将HLG信号转换为PQ信号 参数 R_hlg, G_hlg, B_hlg: HLG编码的RGB值0-1范围 display_peak: 目标PQ显示设备峰值亮度单位nit 返回 R_pq, G_pq, B_pq: PQ编码的RGB值 # 步骤1HLG逆OETF获取场景线性光 Rs hlg_inverse_OETF(R_hlg) Gs hlg_inverse_OETF(G_hlg) Bs hlg_inverse_OETF(B_hlg) # 步骤2计算场景亮度并应用OOTF Ys 0.2627 * Rs 0.6780 * Gs 0.0593 * Bs gamma 1.2 * np.sqrt(1000 / display_peak) Ys_gamma np.power(Ys, gamma - 1) Rd Rs * Ys_gamma Gd Gs * Ys_gamma Bd Bs * Ys_gamma # 步骤3亮度反归一化 scale 1000 / display_peak Rd np.minimum(Rd * scale, 1.0) Gd np.minimum(Gd * scale, 1.0) Bd np.minimum(Bd * scale, 1.0) # 步骤4应用PQ逆EOTF R_pq pq_inverse_EOTF(Rd) G_pq pq_inverse_EOTF(Gd) B_pq pq_inverse_EOTF(Bd) return R_pq, G_pq, B_pq6. 工程实践中的常见问题与解决方案在实际项目中实现HDR格式转换时开发者常会遇到以下几个典型问题数值溢出处理PQ曲线的亮度范围理论上可达10000nit但实际显示设备可能只有1000nit解决方案在转换过程中加入clip操作确保数值在合理范围内def safe_pq_eotf(E_p): 带溢出保护的PQ EOTF实现 E_p np.clip(E_p, 0, 1) # 确保输入在0-1范围内 return pq_EOTF(E_p)色彩空间混淆确保所有计算在正确的色彩空间通常是BT.2020中进行避免错误地将BT.709色彩空间用于HDR内容性能优化技巧使用查表法LUT加速曲线计算利用GPU加速矩阵运算def create_pq_lut(): 创建PQ曲线的查找表加速计算 lut np.zeros(1024, dtypenp.float32) for i in range(1024): E_p i / 1023.0 lut[i] pq_EOTF(E_p) return lut pq_lut create_pq_lut() def fast_pq_eotf(E_p): 使用LUT加速的PQ EOTF idx np.uint16(E_p * 1023) return pq_lut[idx]元数据处理PQ内容通常伴随静态元数据如MaxFALL、MaxCLL转换时需要适当处理或生成这些元数据7. 完整工作流示例以下是一个完整的YUV格式HDR视频帧的转换流程def convert_yuv_pq_to_hlg(yuv_frame, width, height): 将YUV420格式的PQ视频帧转换为HLG # 分离YUV分量 Y yuv_frame[0:height, 0:width] U yuv_frame[height:heightheight//2, 0:width//2] V yuv_frame[heightheight//2:, 0:width//2] # YUV转RGB R, G, B YUV2RGB_bt2020(Y, U, V) # PQ转HLG R_hlg, G_hlg, B_hlg pq_to_hlg(R, G, B) # RGB转YUV Y_hlg, U_hlg, V_hlg RGB2YUV_bt2020(R_hlg, G_hlg, B_hlg) # 重新打包YUV帧 hlg_frame np.zeros_like(yuv_frame) hlg_frame[0:height, 0:width] Y_hlg hlg_frame[height:heightheight//2, 0:width//2] U_hlg hlg_frame[heightheight//2:, 0:width//2] V_hlg return hlg_frame提示实际视频处理中建议使用FFmpeg等专业工具处理YUV格式的读取和写入上述代码仅展示核心转换逻辑。在实现完整视频转换工具时还需要考虑以下工程细节帧缓存管理多线程处理内存优化色彩空间转换的精度控制

相关文章:

告别HDR格式混乱:用Python代码实战HLG与PQ曲线互转(附完整代码)

告别HDR格式混乱:用Python代码实战HLG与PQ曲线互转(附完整代码) 在视频处理领域,HDR(高动态范围)技术已经成为提升视觉体验的关键要素。然而,HLG(Hybrid Log-Gamma)和PQ&…...

Delphi二进制迷宫破解:IDR交互式重构器的逆向工程革命

Delphi二进制迷宫破解:IDR交互式重构器的逆向工程革命 【免费下载链接】IDR Interactive Delphi Reconstructor 项目地址: https://gitcode.com/gh_mirrors/id/IDR 在逆向工程的世界里,Delphi编译的程序犹如一座座精心设计的迷宫——结构复杂、入…...

五分钟完成Python环境配置,用Taotoken调用大模型API

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 五分钟完成Python环境配置,用Taotoken调用大模型API 对于希望快速体验不同大模型能力的Python开发者而言,通…...

从Claude Code到AI编程全家桶:Cursor、OpenClaw、Codex、Gemini等主流工具深度横评

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...

华为、华三、思科、锐捷网络设备远程登录配置

目录 一、华为Stelnet登录配置 二、华三Stelent登录配置 三、思科SSH登录配置 四、锐捷SSH登录配置 一、华为Stelnet登录配置 #查看SSH状态# [Server]dis ssh server status SSH Version : 2.0 SSH authentication timeout (Seconds) : 60 SSH authentication retries …...

毕业设计精选【芳心科技】12V锂电池充放电管理系统

实物效果图:实现功能:1.通过电流传感器,电压传感器检测电池电压电流。 2.通过ds18b20温度传感器检测电池温度 3.超温,超压时控制电池停止放电或充电4.利用安时积分法估算剩余电量电量显示要求能实时监控5.控制充放电用一个继电器控…...

FPGA设计避坑指南:Vivado里那些红色和橙色的时钟交互框到底意味着什么?

FPGA设计避坑指南:Vivado里那些红色和橙色的时钟交互框到底意味着什么? 在FPGA设计的世界里,时钟信号就像城市交通系统中的红绿灯,协调着数据流的行进节奏。而当多个时钟域交汇时,就如同多个交通系统试图相互对接——如…...

NGA论坛优化脚本完整指南:5分钟打造高效浏览体验

NGA论坛优化脚本完整指南:5分钟打造高效浏览体验 【免费下载链接】NGA-BBS-Script NGA论坛增强脚本,给你完全不一样的浏览体验 项目地址: https://gitcode.com/gh_mirrors/ng/NGA-BBS-Script 如果你经常在NGA论坛上冲浪,那么这款NGA论…...

c#软件开发学习笔记--数据类型

c#软件开发学习笔记 一、 数据类型1.基本类型(值类型) 值类型存储在栈中,变量保存的值的本身,赋值是拷贝一份新数据 byte(字节) bit(位) 1byte 8bit byte(1字节) byte b 10; //0 - 255short(2字节) short s 100;…...

告别拓展坞!实测Spacedesk无线投屏:Win10/Win11到iPad的延迟、画质与触控体验全解析

Spacedesk无线投屏实战评测:Win11与iPad Pro的协作新范式 当iPad Pro的Liquid视网膜显示屏遇上Windows系统的生产力工具,能否摆脱线材束缚实现无缝协作?Spacedesk这款免费无线投屏软件正在重新定义多屏工作场景。作为深度体验过各类投屏方案的…...

基于 Transformer 架构的翻译模型实践 - 主流分词器(Tokenizer)的对比

基于 Transformer 架构的翻译模型实践 - 主流分词器(Tokenizer)的对比 flyfish 参考 https://github.com/shaoshengsong/ pytorch -transformer-en-zh-translation-demo对hello不同的分词方案可以分为单个字符【h,e,l,…...

CARTGen-IR: Synthetic Tabular Data Generation for Imbalanced Regression——基于CART的表格数据不平衡回归合成采样方法

一、研究问题与背景 1.1 问题定义 不平衡回归:在连续目标变量中,极端值(高值或低值)样本稀少,导致模型偏向预测平均值,忽略重要极端情况。 应用场景:极端天气预测、海面温度异常、药物敏感性检…...

【从零学Vibe Coding】第一章:Vibe Coding 到底是什么?

第一章:Vibe Coding 到底是什么? 先说结论 Vibe Coding 不是"不写代码",而是"先用自然语言描述意图,再让 AI 生成代码,人类负责判断、修正和推进结果"。 这个词在 2025 年突然出圈,不…...

【从零学Vibe Coding】前言:为什么要写这份教程

前言:为什么要写这份教程 一切从一个画面开始 2025 年,你大概率刷到过这样的画面: 有人对着 AI 说一句"帮我做个记账 App"十几分钟后,页面已经能点、能跳、能保存数据评论区一半人在惊呼"程序员要失业了"另…...

QEMU理解与分析系列(16):QEMU启动方式分析

QEMU启动方式分析启动流程RISC-V specific│┌──────────────────┼──────────────────┐▼ ▼ ▼┌──────────────┐ ┌──────────────┐ ┌───────────…...

GNSS模块教程:大夏龙雀 DX-GP21,从硬件接线到 NMEA 数据解析

在物联网、无人机、精准农业等场景中,高精度定位是核心需求。深圳大夏龙雀科技的 DX-GP21 作为一款多模多频 GNSS 模块,支持北斗、GPS、Galileo 等多系统联合定位,定位精度<1.0m,兼具低功耗、小尺寸特性,性…...

【Java+AI】Java正在悄然“杀死“Python的AI霸权——虚拟线程与GraalVM如何重写企业级AI推理规则

——尘一不染 为什么说Java才是企业AI的未来?一场迟到的技术平反 副标题:当你还在用Python调参时,成熟的企业已经在用Java构建生产级AI推理引擎了 开篇:那些年,我们对Java的误解有多 每次技术大会,只要…...

COMSOL电磁超声仿真避坑指南:从‘域不适用’报错到结果收敛的完整调试流程

COMSOL电磁超声仿真避坑指南:从‘域不适用’报错到结果收敛的完整调试流程 电磁超声仿真作为多物理场耦合的典型应用场景,其复杂性往往让即使有一定COMSOL基础的用户也频频"踩坑"。当你在深夜盯着屏幕上鲜红的"域不适用"报错&#x…...

Taotoken多模型聚合在批量内容生成任务中的稳定性观察

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken多模型聚合在批量内容生成任务中的稳定性观察 1. 任务背景与挑战 在涉及大规模、长时间运行的内容生成任务中&#xff0c…...

高级音频解密技术实现:ncmdump模块化架构解析与自动化工作流

高级音频解密技术实现:ncmdump模块化架构解析与自动化工作流 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 在数字音乐版权保护日益严格的今天,网易云音乐的NCM加密格式为用户带来了设备兼容性的技术挑战。n…...

[具身智能-824]:人的大脑,如何实现高实时、多模态联合、发现表象背后的各种规律和层层叠叠的不同层次的语义的?

人脑实现:高实时响应 多模态融合 深挖底层规律 多层级语义解析 完整原理一、先总述核心机制人脑不是串行流水线,是并行分布式神经集群架构依靠分层神经通路 并行同步处理 经验记忆锚定 潜意识预推理,天然完成:毫秒级高实时、…...

【C++】类和对象( 类的定义、实例化、 this指针、 C++和C语言实现Stack对比)

小编主页详情<-请点击 小编gitee代码仓库<-请点击 本文主要介绍了类和对象&#xff08; 类的定义、实例化、 this指针、 C和C语言实现Stack对比&#xff09;&#xff0c;内容全由作者原创&#xff08;无AI&#xff09;&#xff0c;并带有配图帮助博友们更好的理解&#x…...

杰理微蓝牙芯片AC696系列入门

1.文章背景 此篇文章以ac696n_soundbox_sdk_v1.7.0版本进行入门讲解&#xff1a; 写这篇文章的目的是因为自己在尝试入门杰理微的时候遇到了好多的问题点&#xff0c;想尝试用买到的开发板来驱动一颗LED闪烁却一直没有按自己想象的逻辑成功跑出效果&#xff0c;在网上到处翻找手…...

电脑截图工具深度测评:PixPin、Snipaste、兔灵截图(Utools插件)

日常办公、写教程、做笔记&#xff0c;截图是高频刚需。Windows自带截图简陋&#xff0c;截图功能有限&#xff0c;精准标注、长截图、OCR识别等需求&#xff0c;需要专业工具来满足。 本文实测3款「免费无广告、口碑拉满」的截图工具&#xff1a;PixPin、Snipaste、兔灵截图&a…...

一条 SQL 干掉 8 秒卡顿,只因改了一个索引

一条 SQL 干掉 8 秒卡顿,只因改了一个索引 上周五晚上十一点,线上告警突然炸了,用户反馈下单接口卡成 PPT。打开慢查询日志一看,一条最普通的订单查询 SQL 居然跑了 8 秒多。当时我脑子里只有一个念头:这条 SQL 我上周才写的,测试环境明明只要 200 毫秒啊。排查了一整晚,…...

【Java入门|集合全解析:List、Set与Map详解】

Java集合Java集合分为单列集合和双列集合&#xff0c;也就是 Collection 和 Map 。顾名思义&#xff0c; Collection 一个位置上仅存放一个元素&#xff1b; Map 一个位置上有两个元素&#xff08;分为键和值&#xff09;。 Map 和 Collection 下又分别衍生出多种集合种类&…...

晶振参数深度解读与替代选型实战(55.2MHz 工业级无源晶振案例)

前言作为嵌入式 / 硬件 FAE&#xff0c;日常工作中晶振的参数解读、客户需求替代是高频场景。最近遇到一个典型的工业级宽温晶振客户需求&#xff0c;参数里藏着很多新手容易踩的坑&#xff0c;比如 “负频率” 的误解、负载电容不匹配、宽温范围忽略等问题。本文以客户的55.2M…...

Android 开发问题:It‘s possible to extract method returning XXX from a long surrounding...

在 Android 开发中&#xff0c;Android Studio 出现如下提示信息 Its possible to extract method returning TakeCardRecordListDTO from a long surrounding method# 解读可以从长方法中提取返回“TakeCardRecordListDTO”的方法问题原因这段提示是提取方法重构策略&#xff…...

推客系统开发|企业私域裂变刚需,低成本自动获客变现

公域投流成本居高不下、流量转化疲软&#xff0c;当下多数商家、企业都在转型私域运营。推客系统凭借低成本裂变、自动化运营、高留存等优势&#xff0c;成为企业盘活自有流量、实现自主拓客的核心工具。一、专属定制开发&#xff0c;适配各类业态支持个性化定制&#xff0c;自…...

别再只问哪个大模型更强了,2026年真正决定AI Agent上限的,是向量引擎

别再只问哪个大模型更强了&#xff0c;2026年真正决定AI Agent上限的&#xff0c;是向量引擎 这两年做AI的人&#xff0c;最容易掉进一个坑。 每天盯着模型榜单看。 今天这个模型会写代码了。 明天那个模型会看视频了。 后天又有一个模型说自己推理能力更强了。 看久了以后&…...