昏暗场景增强-低照度增强-弱光增强(附代码)

在这里插入图片描述

引言

  • 随着现代科技的发展,图像采集设备已经渗透到生活的方方面面,然而在昏暗场景、低照度或弱光条件下,图像的质量往往受到严重影响,表现为亮度不足、对比度低下、色彩失真以及细节丢失等问题。
  • 这类图像对于人眼识别和计算机视觉算法的准确性和稳定性都构成了巨大挑战。因此,低照度图像增强技术的研究与应用日益受到关注,旨在提高图像的视觉质量和有效信息含量。

传统图像增强方法

  • 早期的低照度图像增强方法主要包括直方图均衡化、伽马校正、对比度拉伸等

  • 其中,直方图均衡化通过对像素灰度值分布进行重新分配,提高了图像的整体亮度和动态范围

  • 伽马校正则利用非线性变换调整图像的亮度曲线;而对比度拉伸则是通过改变图像的灰度级分布,增强图像的明暗对比。

Retinex理论及其应用

Retinex理论作为一种模拟人类视觉系统的图像增强方法,通过分离图像的反射分量和光照分量,有效地消除了光照变化对图像色彩和纹理的影响。其衍生出的单尺度Retinex、多尺度Retinex等算法在低照度图像增强方面取得了一定成效,但也存在噪声放大、边缘模糊等问题。

深度学习在低照度图像增强中的突破

近年来,深度学习在低照度图像增强领域的应用取得了显著成果。基于卷积神经网络(CNN)的端到端学习框架,可以从大量训练样本中学习低照度图像与正常光照条件下的映射关系。如Deep Retinex Network (DRN)、Low-Light Image Enhancement using Deep Learning (LLNet)、Zero-DCE等深度学习模型,不仅能够提升图像的整体亮度,还能较好地保留和恢复图像的细节信息以及色彩真实感。

未来趋势与挑战

虽然深度学习在低照度图像增强方面的表现已取得长足进步,但仍面临一些挑战,如过度增强导致的噪声放大、如何更好地结合先验知识以及实时性需求等。此外,考虑到低照度图像增强在无人驾驶、安防监控、医疗影像等诸多领域的广泛应用前景,未来的研究应继续探索更为高效、鲁棒且适用于嵌入式系统的轻量化模型。

图像增强流程

以下是一个简化的Retinex算法流程概述:

图像处理

对输入图像进行多尺度的高斯模糊处理。

光照估计

计算每个尺度下模糊图像与原图像的比率或者对数差分,以估算各个尺度下的光照强度。

反射分量恢复

通过去除光照分量的影响,得出图像的反射分量,该分量能更好地反映物体本身的固有色和纹理。

图像增强

对得到的反射分量进行适当的调整和量化,以增强图像的对比度和颜色饱和度,同时保持图像整体的平衡和自然。

输出增强图像

将处理后的反射分量图像作为最终增强后的输出

代码

ata_path = 'data'
img_list = os.listdir(data_path)
if len(img_list) == 0:print('Data directory is empty.')exit()with open('config.json', 'r') as f:config = json.load(f)for img_name in img_list:if img_name == '.gitkeep':continueimg = cv2.imread(os.path.join(data_path, img_name))img_msrcr = retinex.MSRCR(img,config['sigma_list'],config['G'],config['b'],config['alpha'],config['beta'],config['low_clip'],config['high_clip'])img_amsrcr = retinex.automatedMSRCR(img,config['sigma_list'])img_msrcp = retinex.MSRCP(img,config['sigma_list'],config['low_clip'],config['high_clip']        )    shape = img.shapecv2.imshow('Image', img)cv2.imshow('retinex', img_msrcr)cv2.imshow('Automated retinex', img_amsrcr)cv2.imshow('MSRCP', img_msrcp)cv2.waitKey()

总结

总结而言,昏暗场景、低照度及弱光环境下的图像增强是一个持续发展的研究领域,它融合了传统图像处理技术与深度学习方法,致力于在各种光照条件下提供高质量的图像,以满足日益增长的实际应用需求。随着算法和技术的不断演进,我们期待未来的低照度图像增强技术能够带来更加卓越的图像质量提升效果。

在这里插入图片描述
最后,见主页左下方推广,👇👇

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

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

相关文章

【NR技术】 3GPP支持无人机的关键技术以及场景

1 背景 人们对使用蜂窝连接来支持无人机系统(UAS)的兴趣浓厚,3GPP生态系统为UAS的运行提供了极好的好处。无处不在的覆盖范围、高可靠性和QoS、强大的安全性和无缝移动性是支持UAS指挥和控制功能的关键因素。与此同时,监管机构正在调查安全和性能标准以及…

C++进阶之路---继承(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、继承与友元 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员。 class Student; class Per…

leetcode 热题 100_除自身以外数组的乘积

题解一: 前缀 / 后缀数组:某元素除自身以外的乘积,也就是其全部前缀元素乘积 * 全部后缀元素乘积,因此我们可以构造前缀数组和后缀数组,分别存储前i个元素的成绩和后i个元素的乘积,再将i-1前缀乘积 * i1后缀…

SpringBoot整合Redis实现分布式锁

SpringBoot整合Redis实现分布式锁 分布式系统为什么要使用分布式锁? 首先,分布式系统是由多个独立节点组成的,这些节点可能运行在不同的物理或虚拟机器上,它们通过网络进行通信和协作。在这样的环境中,多个节点可能同…

Java数组常用操作

创建数组 int[] a {1,2,3};int[] a new int[]{1,2,3};int[] a new int[3];ArrayList<Integer> arr new ArrayList<>(); 添加元素 arr.add(99); //将99加入到数组末尾arr.add(3,99); //将99加入到指定索引3处访问元素 int c1 c[1]; int arr1 arr.get(1); …

方阵的特征值与特征向量

目录 特征值 & 特征向量 相关性质 特征值 & 特征向量 相关性质

BlackHole

BlackHole 文章目录 BlackHole一、关于 BlackHole功能描述 二、安装、卸载安装方式一&#xff1a;下载安装器方式二&#xff1a;使用 Homebrew 安装 卸载方式一&#xff1a;使用卸载器方式二&#xff1a;手动卸载 三、用户使用指南1、Logic Pro X2、GarageBand3、Reaper4、录制…

MRI基础--k空间

k空间定义 k空间是表示 MR 图像中空间频率的数字数组。 k空间物理意义 k 空间的单元通常显示在主轴 kx 和 ky 的矩形网格上。 k 空间的 kx 和 ky 轴对应于图像的水平 (x) 和垂直 (y) 轴。然而,k 轴表示 x 和 y 方向上的空间频率而不是位置。 k 空间中的各个点 (kx,ky) 与图像…

聊一聊日常开发中如何优雅的避免那无处不在的空指针异常

在Java编程语言中&#xff0c;NullPointerException&#xff08;简称NPE&#xff09;是一种常见的运行时异常&#xff0c;当程序试图访问或操作一个还未初始化&#xff08;即值为null&#xff09;的对象引用时&#xff0c;Java虚拟机就会抛出NullPointerException。如果我们在日…

【技术】基于Github Pages搭建个人博客静态网页

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 文章目录 一、技术基础二、新建特殊仓库三、上传网页文件四、Github Pages设置 个人网页作为仅服务个人的网页&#xff0c;一…

【打工日常】使用docker部署IT运维管理平台CAT

​一、CAT介绍 CAT是一个专为 IT 运维从业者打造的一站式解决方案平台&#xff0c;包含资产管理、工单、工作流、仓储等功能模块。 本项目是celaraze/chemex重构版&#xff0c;原项目chemex名称弃用&#xff1b;CAT采用全新架构设计&#xff0c;大量提升使用体验的细节&#xf…

Trie巧妙解决前后缀问题,3045. 统计前后缀下标对 II

目录 一、题目 1、题目描述 2、接口描述 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 ​Python3 c 一、题目 1、题目描述 给你一个下标从 0 开始的字符串数组 words 。 定义一个 布尔 函数 isPrefixAndSuffix &#xff0c;它接受两个字符串参数 str…

JavaWeb笔记 --- 二、Maven

二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies&#xff1a;依赖 依赖范围

java-ssm-jsp-大学生互动交流网站设计与实现

java-ssm-jsp-大学生互动交流网站设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

STM32基础--构建自己的固件库

CMSIS 标准及库层次关系 因为基于 Cortex 系列芯片采用的内核都是相同的&#xff0c;区别主要为核外的片上外设的差异&#xff0c;这些差异却导致软件在同内核&#xff0c;不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微控制器软件的兼容性问题&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件&#xff0c;用于根据指定日期范围创建日期滑动选择器。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

java及特性的简单介绍

简介&#xff1a; 印度尼西亚有一个盛产咖啡的岛屿java&#xff0c;中文名翻译为爪哇&#xff0c;给这种新语言起码java 寓意端上一杯热咖啡。 特性&#xff1a; 1.面向对象 2.与平台无关 3.稳定安全 4.多线程 面向对象 1.面向对象语言关注的是对象&#xff0c;而不关注过程 2…

Redis缓存穿透-缓存雪崩-缓存击穿

什么叫缓存穿透? 模拟一个场景: 前端用户发送请求获取数据,后端首先会在缓存Redis中查询,如果能查到数据,则直接返回.如果缓存中查不到数据,则要去数据库查询,如果数据库有,将数据保存到Redis缓存中并且返回用户数据.如果数据库没有则返回null; 这个缓存穿透的问题就是这个…

linux安装todesk

xunilToDesk远程桌面软件-免费安全流畅的远程连接电脑手机ToDesk远程控制软件是一款稳定流畅的远程控制电脑手机连接软件,可远程桌面办公,远程协助运维.采用端对端加密,让每一次远程访问都安全可靠。https://www.todesk.com/linux.htmlToDesk远程控制软件是一款稳定流畅的远程控…

【考研数学】李林《880》vs 李永乐《660》完美使用搭配

没有说谁一定好&#xff0c;只有适不适合自身情况&#xff0c;针对自身弱点选择性价比才最高。 两者侧重点不同&#xff0c;660适合强化前期&#xff0c;弥补基础的不足&#xff0c;880适合强化后期&#xff0c;题型全面&#xff0c;提高我们对综合运用知识的能力。 选择习题…