图像处理 -- 自适应色调映射(ATM)整理

自适应色调映射(ATM)技术文档

简介

自适应色调映射(Adaptive Tone Mapping, ATM)是一种用于调整图像或视频中亮度和对比度的技术,以适应不同的显示环境和设备,从而提供最佳的视觉体验。ATM的主要作用是改善图像在高动态范围(HDR)和低动态范围(SDR)显示设备上的视觉效果,使得图像的明暗部分都能清晰呈现。

作用

  1. 提升图像对比度:通过调整图像的亮度和对比度,增强图像的细节表现,尤其是在高亮和阴影部分。
  2. 改善视觉体验:使得图像在不同的显示设备上都能有良好的视觉表现,适应不同的环境光照条件。
  3. 保护视觉感受:避免在观看图像或视频时出现过亮或过暗的情况,保护观众的视觉感受。
  4. 动态调整:根据图像内容的变化实时调整色调映射参数,以适应动态变化的场景。

用法

自适应色调映射通常用于图像处理软件、视频播放器、摄影和电影制作等领域。使用ATM技术时,可以通过以下步骤进行:

  1. 获取图像或视频数据:从输入设备(如相机)或文件中获取图像或视频数据。
  2. 分析图像亮度分布:对图像或视频的亮度分布进行分析,确定高亮和阴影部分的比例。
  3. 计算色调映射曲线:根据亮度分布和显示设备的特性,计算适合的色调映射曲线。
  4. 应用色调映射:将计算得到的色调映射曲线应用到图像或视频数据中,调整其亮度和对比度。
  5. 输出调整后的图像或视频:将调整后的图像或视频输出到显示设备或保存为文件。

实现方式

以下是一个简化的自适应色调映射算法的实现步骤,使用Python和OpenCV库进行演示:

import cv2
import numpy as npdef adaptive_tone_mapping(image, clip_hist_percent=1):# 转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 计算直方图hist = cv2.calcHist([gray], [0], None, [256], [0, 256])# 计算累计直方图hist_size = len(hist)accumulator = [float(hist[0])]for i in range(1, hist_size):accumulator.append(accumulator[i-1] + float(hist[i]))# 找到直方图的最大值maximum = accumulator[-1]# 设置剪切直方图百分比clip_hist_percent *= (maximum / 100.0)clip_hist_percent /= 2.0# 寻找剪切后的直方图最大和最小值min_gray = 0while accumulator[min_gray] < clip_hist_percent:min_gray += 1max_gray = hist_size - 1while accumulator[max_gray] >= (maximum - clip_hist_percent):max_gray -= 1# 计算alpha和beta值alpha = 255 / (max_gray - min_gray)beta = -min_gray * alpha# 应用色调映射auto_result = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)return auto_result# 读取图像
image = cv2.imread('input.jpg')# 应用自适应色调映射
result = adaptive_tone_mapping(image)# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Adaptive Tone Mapped Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

原理

图像亮度分布分析

首先,需要对输入图像或视频帧的亮度分布进行分析。这通常通过计算图像的直方图来完成。直方图表示不同亮度值的像素数量分布,能够直观地反映图像的亮度特性。

动态范围调整

由于图像可能包含非常亮的区域和非常暗的区域,直接显示可能导致一些细节丢失。通过分析直方图,可以确定图像的亮度范围,然后根据这个范围动态调整图像的对比度。通常,会设置一个剪切直方图百分比来忽略极端亮度值,以便更好地调整中间亮度区域的对比度。

色调映射曲线计算

根据图像的亮度范围,计算适合的色调映射曲线。这条曲线用于将原始图像的亮度值映射到新的亮度值,从而提升图像的视觉效果。常见的色调映射曲线包括线性、对数和伽马曲线等。选择哪种曲线以及具体参数的设置通常取决于图像的特性和显示设备的需求。

应用色调映射

将计算得到的色调映射曲线应用于图像或视频数据中,调整其亮度和对比度。通过映射曲线,原始图像的每个像素亮度值都会被转换为新的亮度值,从而改善整体视觉效果。

动态调整

在视频处理或实时图像处理应用中,自适应色调映射通常是一个动态的过程。随着图像内容的变化,色调映射曲线会实时更新,以适应不同的场景。这种动态调整确保了不同场景下都能获得最佳的视觉体验。

详细原理说明

以下是自适应色调映射的具体原理示例:

  1. 获取图像的亮度直方图:通过计算灰度图像的直方图,了解图像中不同亮度值的分布情况。

  2. 剪切直方图百分比:为了避免极端亮度值对映射结果的影响,通常会剪切直方图的极端部分。例如,忽略最高和最低1%的亮度值。

  3. 计算映射参数

    • 最小灰度值 (min_gray):累计直方图达到剪切阈值的第一个灰度值。
    • 最大灰度值 (max_gray):累计直方图达到最大值减去剪切阈值的第一个灰度值。
    • 映射曲线参数:通过最小和最大灰度值计算线性映射的 α \alpha α(增益)和 β \beta β(偏移)参数。
  4. 应用映射曲线:使用线性变换公式将原始图像的亮度值映射到新的亮度范围:
    new_value = α × old_value + β \text{new\_value} = \alpha \times \text{old\_value} + \beta new_value=α×old_value+β
    其中, α \alpha α β \beta β 通过以下公式计算:
    α = 255 max_gray − min_gray \alpha = \frac{255}{\text{max\_gray} - \text{min\_gray}} α=max_graymin_gray255
    β = − min_gray × α \beta = -\text{min\_gray} \times \alpha β=min_gray×α

通过以上步骤,自适应色调映射能够有效地提升图像的视觉效果,改善图像的亮度和对比度,适应不同的显示设备和环境。

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

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

相关文章

linux系统——route路由命令

route路由对linux内的ip路由表进行操作 计算机间的数据通信是通过网络来实现的&#xff0c;路由就是从源主机到目标主机的转发过程 路由分为静态路由与动态路由&#xff0c;linux中的均为静态路由&#xff0c;动态路由由交换机路由器自动分配规则而来

[word] word悬挂缩进怎么设置? #经验分享#职场发展#经验分享

word悬挂缩进怎么设置&#xff1f; 在编辑Word的时候上方会有个Word标尺&#xff0c;相信很多伙伴都没使用过。其实它隐藏着很多好用的功能&#xff0c;今天就给大家分享下利用这个word标尺的悬挂缩进怎么设置&#xff0c;一起来看看吧&#xff01; 1、悬挂缩进 选中全文&…

Linux Mint 默认禁用未经验证的 Flatpak 软件包

Linux Mint 默认禁用未经验证的 Flatpak 软件包 Linux Mint 新政策 Linux Mint 项目宣布了一项新政策&#xff0c;即默认禁用那些未经官方验证的 Flatpak 软件包&#xff0c;以增强用户的安全保障。 当用户选择启用未经验证的 Flatpak 软件包时&#xff0c;Linux Mint 的软…

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发

JAVA开发的一套&#xff08;智造制造领航者云MES系统成品源码&#xff09;saas云MES制造执行系统源码&#xff0c;全套源码&#xff0c;支持二次开发 1990年11月&#xff0c;美国先进制造研究中心AMR&#xff08;Advanced Manufacturing Research&#xff09;就提出了MES&#…

SP16139 CODCHESS - Naya Shatranj (New Chess) 题解

题目传送门 解题思路 这道题目其实不难&#xff0c;我们可以打表找规律。 当 n 1 n1 n1 时 A 赢。 当 n 2 n2 n2 时 B 赢。 当 n 3 n3 n3 时 A 赢。 当 n 4 n4 n4 时 B 赢。 …… 由此可见&#xff0c;当 n n n 为奇数时&#xff0c;A 赢&#xff0c;否则 B 赢…

Linux守护进程揭秘-无声无息运行在后台

在Linux系统中&#xff0c;有一些特殊的进程悄无声息地运行在后台&#xff0c;如同坚实的基石支撑着整个系统的运转。它们就是众所周知的守护进程(Daemon)。本文将为你揭开守护进程的神秘面纱&#xff0c;探讨它们的本质特征、创建过程&#xff0c;以及如何重定向它们的输入输出…

AI初识--LLM、ollama、llama都是些个啥?

LLM全称&#xff08;large language model&#xff09;也就是大语言模型 什么是Ollama&#xff0c;它与Llama是什么关系&#xff1f; Ollama是一个开源的 LLM&#xff08;大型语言模型&#xff09;服务工具&#xff0c;用于简化在本地运行大语言模型&#xff0c;降低使用大语…

赶紧收藏!2024 年最常见 20道分布式、微服务面试题(二)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道分布式、微服务面试题&#xff08;一&#xff09;-CSDN博客 三、请解释CAP定理&#xff0c;并讨论其在实际应用中的意义。 CAP定理是分布式系统理论中的一个重要概念&#xff0c;由计算机科学家Eric Brewer在200…

国产主流软硬件厂商生态分析

国产领域主流厂商汇总 信创&#xff0c;即信息技术应用创新&#xff0c;由“信息技术应用创新工作委员会”于2016年3月4日发起&#xff0c;是专注于软硬件关键技术研发、应用与服务的非营利性组织。作为科技自强的关键力量&#xff0c;信创在我国信息化建设中占据核心地位&…

外部mysql导入

利用这个命令&#xff1a; mysql -u username -p database_name < file.sql 然后就这样。成功导入。

定个小目标之每天刷LeetCode热题(12)

这是一道简单题&#xff0c;使用位运算中的异或运算即可&#xff0c;异或运算有以下性质&#xff1a; 1、任何数异或 0 结果仍然是原来的数&#xff0c;即 a⊕0a 2、任何数和其自身做异或运算&#xff0c;结果是 0 所以我们只需要让数组里的所有元素进行异或运算得到的结果就…

springboot防止表单重复提交

第一种方法&#xff1a;单个防止 在Spring Boot应用中使用Redis来防止表单的重复提交&#xff0c;可以通过以下几个步骤来实现&#xff1a; 步骤 1: 添加依赖 确保你的项目中添加了Spring Boot Starter Data Redis和Spring Boot Starter Web依赖。在pom.xml文件中添加以下依…

探索风电机组:关键软件工具全解析

探索风电机组&#xff1a;关键软件工具全解析 随着可再生能源市场的迅猛发展&#xff0c;风电作为一种重要的可再生能源&#xff0c;其相关技术和工具也越来越受到重视。风电机组的设计、仿真、优化及运维等方面&#xff0c;都需要依靠一系列专业软件工具来实现。这些软件涵盖…

Netty中的ByteBuf使用介绍

ByteBuf有三类&#xff1a; 堆缓存区&#xff1a;JVM堆内存分配直接缓冲区&#xff1a;有计算机内存分配&#xff0c;JVM只是保留分配内存的地址信息&#xff0c;相对于堆内存方式较为昂贵&#xff1b;复合缓冲区&#xff1a;复合缓冲区CompositeByteBuf&#xff0c;它为多个B…

VS2019创建c++动态链接库dll与调用方法

VS2019创建c动态链接库dll与调用方法 1.点击文件-》新建-》项目&#xff0c;输入dll,选择具有导出项的(DLL)动态链接库 2.输入一个文件名&#xff1a;dll2 头文件.h 3.添加加减法函数&#xff1a; // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的…

题解web

1.[LitCTF 2023]Follow me and hack me 1&#xff09;进入题目环境&#xff0c;提示get传参&#xff0c;post传参 2&#xff09;看看源码&#xff0c;也没啥 3&#xff09;直接用hackbar&#xff0c;传入对应参数即可得到FLAG 3&#xff09;但是扫描出来它后端还有东西&#x…

linux-磁盘空间显示指令

在Linux中&#xff0c;要查看磁盘空间并输出详细报告&#xff0c;你可以使用df&#xff08;disk filesystem&#xff09;命令。通过添加不同的选项&#xff0c;你可以定制df命令的输出&#xff0c;以获取更详细的信息。 以下是一些常用的df命令选项&#xff0c;以及它们如何帮…

Vue 学习笔记 总结

Vue.js 教程 | 菜鸟教程 (runoob.com) 放一下课上的内容 Vue练习 1、练习要求和实验2的用户注册一样&#xff0c;当用户输入后&#xff0c;能在下方显示用户输入的各项内容&#xff08;不需要实现【重置】按钮&#xff09; 2、实验报告中的实验小结部分来谈谈用JS、jQuery和…

大模型怎么评价未来

以下内容都是腾讯元宝大模型回答的结果&#xff0c;不代表个人的意见。 目录 腾讯元宝APP自我介绍主要功能用户体验技术特点用户评价腾讯元宝APP自我评价技术细节功能特点与其他大模型比较怎么选择人工智能模型选择人工智能模型的步骤考虑因素评估和优化模型未来大模型的发展…

618数码产品有什么推荐?四大2024“宝藏”数码产品推荐!

随着618购物节的热情逐渐升温&#xff0c;你是否在繁多且诱人的商品海洋中迷失方向&#xff0c;难以找到那最心仪的宝贝&#xff1f;团团在此特别为你精心挑选了一系列经过亲身体验的优质好物。这些推荐不仅时尚前沿&#xff0c;更贴合你的日常生活需求&#xff0c;确保实用与品…