Opencv实验合集——实验五:高动态范围

1.概念

高动态范围成像(HDRI 或 HDR)是一种用于成像和摄影的技术,可以再现比标准数字成像或照相技术更大的动态光度范围。虽然人眼可以适应各种光线条件,但大多数成像设备每通道使用 8 位,因此我们仅限于 256 级。当我们拍摄现实世界场景的照片时,明亮区域可能会过度曝光,而暗区域可能曝光不足,因此我们无法使用单次曝光捕捉所有细节。 HDR 成像适用于每通道使用 8 位以上(通常为 32 位浮点值)的图像,从而允许更宽的动态范围。

获得 HDR 图像的方法有很多种,但最常见的方法是使用不同曝光值拍摄的场景照片。要结合这些曝光,了解相机的响应函数是有用的,并且有估算它的算法。合并 HDR 图像后,必须将其转换回 8 位以在通常的显示器上查看。此过程称为色调映射。当场景或相机的物体在镜头之间移动时会出现额外的复杂性,因为应该注册和对齐具有不同曝光的图像。

在本教程中,我们展示了 2 种算法(Debevec,Robertson),用于从曝光序列生成和显示 HDR 图像,并演示了一种称为曝光融合(Mertens)的替代方法,该方法产生低动态范围图像,不需要曝光时间数据。此外,我们估计相机响应函数(CRF),这对许多计算机视觉算法具有重要价值。

首先简单了解一下什么是HDR图像和LDR图像

 HDR(High Dynamic Range)图像是一种能够捕捉和表示比标准图像(LDR,Low Dynamic Range)更广泛亮度范围的图像。HDR 图像可以包含来自不同曝光的多个图像,以便在亮度较低和较高的区域都能保留细节。

LDR(Low Dynamic Range)图像是一种在亮度范围上有限的图像,通常表示为每个像素的颜色值在一个相对较小的范围内,例如0到255。与HDR图像相比,LDR图像的主要特点是亮度范围较窄。

总的来说,HDR图像是专业化图像,具备类似曝光时间,曝光度等指标,LDR图像是日常实验或看到的图像,0-255像素,HDR就类似于高级摄像机拍东西,LDR就类似于普通手机拍东西

2.有关的函数方法

1.将曝光序列合并成一个HDR图像

cv2.createMergeDebevec() 是 OpenCV 中用于创建 Debevec 曝光融合器的函数。这个函数返回一个 cv2.MergeDebevec 对象。Debevec 曝光融合是一种用于生成高动态范围(HDR)图像的技术,通过合并拥有不同曝光时间的图像来捕获大范围的亮度信息。

cv2.createMergeRobertson() 是 OpenCV 中用于创建 Robertson 曝光融合器的函数。这个函数返回一个 cv2.MergeRobertson 对象。Robertson 曝光融合是一种用于生成高动态范围(HDR)图像的技术,类似于Debevec方法,但在考虑噪声方面表现更好。

2.范围映射

cv2.createTonemap 用于创建一个色调映射器(Tonemap),该映射器被用于将高动态范围(HDR)图像映射到低动态范围(LDR)图像。

tonemap.process 方法然后将 HDR 图像应用于该映射器,生成一个 LDR 图像。

cv2.createTonemap(gamma) 创建一个色调映射器对象。gamma 参数指定了伽马值,用于调整图像的对比度。伽马值越大,对比度越低,图像越亮。

tonemap.process(hdr): 将 HDR 图像 hdr 应用到色调映射器上。这一步将 HDR 图像转换为 LDR 图像,以便在标准显示器上显示。在这个过程中,色调映射器可以执行一些算法来调整图像的亮度、对比度和颜色饱和度等,以在 LDR 显示上获得更好的效果。

3.Mertens 曝光融合

Mertens 曝光融合是一种用于生成高动态范围(HDR)图像的技术,通过合并拥有不同曝光时间的图像来捕获大范围的亮度信息。这种方法的优势之一是在融合时采用了对比度增强的方法,以生成自然外观的HDR图像。

而且是一种合并曝光图像的替代算法,我们不需要曝光时间。我们也不需要使用任何色调图算法,因为 Mertens 算法已经给出了[0..1]范围内的结果。

示例代码:

import cv2
import numpy as np# Loading exposure images into a list
img_fn = [r"C:\Users\xiaoou\Desktop\picture/sun1.jpg", r"C:\Users\xiaoou\Desktop\picture/sun2.jpg", r"C:\Users\xiaoou\Desktop\picture/sun3.jpg"]
img_list = [cv2.imread(fn) for fn in img_fn]
img_list = [cv2.resize(img,(500,500)) for img in img_list]
exposure_times = np.array([1,0.3,0.012], dtype=np.float32)#设置曝光时间imagemerge_debevec = cv2.createMergeDebevec()
hdr_debevec = imagemerge_debevec.process(img_list, times=exposure_times.copy())#处理对应的图片和曝光时间
merge_robertson = cv2.createMergeRobertson()
hdr_robertson = merge_robertson.process(img_list, times=exposure_times.copy())tonemap1 = cv2.createTonemap(gamma=5.6)
res_debevec = tonemap1.process(hdr_debevec.copy())
tonemap2 = cv2.createTonemap(gamma=4.6)
res_robertson = tonemap2.process(hdr_robertson.copy())merge_mertens = cv2.createMergeMertens()#简化了很多条件,在未知图片曝光时间的情况下可以使用
res_mertens = merge_mertens.process(img_list)# Convert datatype to 8-bit and save
res_debevec_8bit = np.clip(res_debevec*255, 0, 255).astype('uint8')#将浮点数转化为0-255的数,这样就变成LDR,可以实现展示
res_robertson_8bit = np.clip(res_robertson*255, 0, 255).astype('uint8')
res_mertens_8bit = np.clip(res_mertens*255, 0, 255).astype('uint8')cv2.imshow('res_debevec_8bit', res_debevec_8bit)
cv2.imshow('res_robertson_8bit', res_robertson_8bit)
cv2.imshow('res_mertens_8bit', res_mertens_8bit)
cv2.waitKey(0)

效果展示:

原图:

结果图:

德普外阁(Debevec):

罗伯逊(Robertson):

 

梅特内斯·福森(Mertenes Fusion):

本次实验主要展示了计算摄影中的高动态范围,主要任务还是将不同曝光度的照片进行一个结合,本次小编实验的图片是小编自己拍摄的,所以忘记了曝光时间,通过假定设置去进行实验,但是还是因为曝光时间设置不好的问题,还是觉得最后一个 Mertenes 方法更自然更好看一点。

详情了解高动态范围 - 维基百科,自由的百科全书 (wikipedia.org)

如有错误或遗漏,希望小伙伴批评指正!!!! 

希望这篇博客对你有帮助!!!!

实验四:Opencv实验合集——实验四:图片融合-CSDN博客

实验六:Opencv实验合集——实验六:模板匹配-CSDN博客

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

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

相关文章

Bifrost 中间件 X-Requested-With 系统身份认证绕过漏洞复现

0x01 产品简介 Bifrost是一款面向生产环境的 MySQL,MariaDB,kafka 同步到Redis,MongoDB,ClickHouse等服务的异构中间件 0x02 漏洞概述 Bifrost 中间件 X-Requested-With 存在身份认证绕过漏洞,未经身份认证的攻击者可未授权创建管理员权限账号,可通过删除请求头实现身…

Linux的重定向

Linux中的重定向是将程序的输入流或输出流从默认的位置改变到指定的位置。可以使用特殊的符号来实现重定向操作。(文中command代表命令) (1)重定向命令列表 命令 说明 command > file …

【单调栈】LeetCode1776:车队

作者推荐 【贪心算法】【中位贪心】.执行操作使频率分数最大 涉及知识点 单调栈 题目 在一条单车道上有 n 辆车,它们朝着同样的方向行驶。给你一个长度为 n 的数组 cars ,其中 cars[i] [positioni, speedi] ,它表示: positi…

iTOP-RK3568开发板实时系统编译,Preemption系统/Xenomai系统编译,获取Linux源码包

1 获取 Linux 源码包 编译环境说明: 本手册使用的是迅为提供的编译环境 ubuntu20.04,在网盘资料“iTOP-3568 开发板\03_ 【iTOP-RK3568 开发板】指南教程\05_NPU 开发配套资料\03_RKNN_Toolkit2 环境搭建\01 课程用到的资料\01_初始 Ubuntu20 虚拟机”…

这5个A 视频生成工具你需要了解

任何人都可以很快成为下一个斯科塞斯或斯皮尔伯格,而无需任何电影制作经验。 这是许多人工智能视频生成工具背后的公司做出的承诺。但如今这些文本转视频工具有多好呢?他们是否有足够的能力制作一部高质量、成熟的电影? 在本文中&#xff0…

java_web_电商项目

java_web_电商项目 1.登录界面2.注册界面3. 主界面4.分页界面5.商品详情界面6. 购物车界面7.确认订单界面8.个人中心界面9.收货地址界面10.用户信息界面11.用户余额充值界面12.后台首页13.后台商品增加14.后台用户增加15.用户管理16.源码分享1.登录页面的源码2.我们的主界面 1.…

【yolov8系列】 yolov8 目标检测的模型剪枝

前言 最近在实现yolov8的剪枝,所以有找相关的工作作为参考,用以完成该项工作。 先细读了 Torch-Pruning,个人简单记录了下 【剪枝】torch-pruning的基本使用,有框架完成的对网络所有结构都自适应剪枝是最佳的,但这里没…

VBA之Word应用:利用代码统计文档中的书签个数

《VBA之Word应用》(版权10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后通过实…

10kV站所柜内运行状态及环境指标监测管理平台

背景: 10kV站所柜内运行状态及环境指标监测管理平台对分布在不同位置的动力设备、环境监测设备和安保设备进行遥测、遥信采集,对各设备的运行状态进行实时监控,同时就相关监测数据展开记录与处理,第一时间向相关人员发出通知&…

【算法】红黑树

一、红黑树介绍 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来&am…

HTML---CSS美化网页元素

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.div 标签&#xff1a; <div>是HTML中的一个常用标签&#xff0c;用于定义HTML文档中的一个区块&#xff08;或一个容器&#xff09;。它可以包含其他HTML元素&#xff0c;如文本、图像…

15 使用v-model绑定单选框

概述 使用v-model绑定单选框也比较常见&#xff0c;比如性别&#xff0c;要么是男&#xff0c;要么是女。比如单选题&#xff0c;给出多个选择&#xff0c;但是只能选择其中的一个。 在本节课中&#xff0c;我们演示一下这两种常见的用法。 基本用法 我们创建src/component…

Word的兼容性问题很常见,禁用兼容模式虽步不是最有效的,但可以解决兼容性问题

当你在较新版本的Word应用程序中打开用较旧版本的Word创建的文档时&#xff0c;会出现兼容性问题。错误通常发生在文件名附近&#xff08;兼容模式&#xff09;。兼容性模式问题&#xff08;暂时&#xff09;禁用Word功能&#xff0c;从而限制使用较新版本Word的用户编辑文档。…

Nginx快速入门:安装目录结构详解及核心配置解读(二)

0. 引言 上节我们讲解了nginx的应用场景和安装&#xff0c;本节继续针对nginx的各个目录文件进行讲解&#xff0c;让大家更加深入的认识nginx。并通过一个实操案例&#xff0c;带大家来实际认知nginx的核心配置 1. nginx安装目录结构 首先nginx的默认安装目录为&#xff1a;…

【深度学习】语言模型与注意力机制以及Bert实战指引之一

文章目录 统计语言模型和神经网络语言模型注意力机制和Bert实战Bert配置环境和模型转换格式准备 模型构建网络设计模型配置代码实战 统计语言模型和神经网络语言模型 区别&#xff1a;统计语言模型的本质是基于词与词共现频次的统计&#xff0c;而神经网络语言模型则是给每个词…

2023大湾区汽车创新大会暨IEEE自动驾驶国际标准研讨会成功举办

2023年12月15日-12月16日&#xff0c;由IEEE ADWG工作组主席孙栋博士、杨子江博士共同主持的2023大湾区汽车创新大会平行主题论坛-IEEE自动驾驶国际标准研讨会在深圳坪山成功举办。图灵奖获得者Joseph Sifakis、英伟达仿真生态总监German Ros、ASAM标准组织CEO Marius Dupuis、…

云原生之深入解析Kubernetes集群发生网络异常时如何排查

一、Pod 网络异常 网络不可达&#xff0c;主要现象为 ping 不通&#xff0c;其可能原因为&#xff1a; 源端和目的端防火墙&#xff08;iptables, selinux&#xff09;限制&#xff1b; 网络路由配置不正确&#xff1b; 源端和目的端的系统负载过高&#xff0c;网络连接数满…

Re解析(正则表达式解析)

正则表达式基础 元字符 B站教学视频&#xff1a; 正则表达式元字符基本使用 量词 贪婪匹配和惰性匹配 惰性匹配如下两张图&#xff0c;而 .* 就表示贪婪匹配&#xff0c;即尽可能多的匹配到符合的字符串&#xff0c;如果使用贪婪匹配&#xff0c;那么结果就是图中的情况三 p…

CTF网络安全大赛是干什么的?发展史、赛制、赛程介绍,参赛需要学什么?

CTF&#xff08;Capture The Flag&#xff09;是一种网络安全竞赛&#xff0c;它模拟了各种信息安全场景&#xff0c;旨在提升参与者的网络安全技能。CTF 赛事通常包含多种类型的挑战&#xff0c;如密码学、逆向工程、网络攻防、Web 安全、二进制利用等。 发展史 CTF 的概念…

LLM大语言模型(二):Streamlit 无需前端经验也能画web页面

目录 问题 Streamlit是什么&#xff1f; 怎样用Streamlit画一个LLM的web页面呢&#xff1f; 文本输出 页面布局 滑动条 按钮 对话框 输入框 总结 问题 假如你是一位后端开发&#xff0c;没有任何的web开发经验&#xff0c;那如何去实现一个LLM的对话交互页面呢&…