局部直方图均衡化去雾算法

目录

1. 引言

2. 算法流程

3. 代码

4. 去雾效果


1. 引言

        局部直方图算法是一种基于块的图像去雾方法,它将图像分割为若干个块,并在每个块内计算块的局部直方图。通过对各个块的直方图进行分析和处理,该算法能够更好地适应图像中不同区域的光度差异和雾霾密度变化,从而提高去雾效果。然而,局部直方图算法在处理边缘区域和细节丰富的区域时存在一定的挑战,容易导致边缘锐化和细节损失。

        局部直方图算法是在全局直方图算法的基础上进行改进而成的。该算法通过将图像划分为多个局部区域,并对每个局部区域进行直方图分析,从而实现对图像的局部去雾处理。与全局直方图算法相比,局部直方图算法更能够保留图像的细节信息,并在复杂场景下取得更好的去雾效果。但该算法的计算复杂度相对较高,对计算资源的要求也较大。

2. 算法流程

        1.首先,将原始图像划分为多个重春的滑动窗口,窗口的尺寸可以根据需要进行选择。

        2.对于每个窗口,分别对其RGB通道进行直方图均衡化,通过增加像素值的分布范围来增强图像的对比度。

        3.将经过局部直方图均衡化处理后的每个窗口重新整合到新的图像中,得到一张经过局部直方图均衡化去雾处理后的图像。

3. 代码

import cv2
import numpy as npdef clahe_dehaze(img, clip_limit=2.0, tile_grid_size=(8, 8)):# 转换为YCrCb色彩空间ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)# 分离通道channels = list(cv2.split(ycrcb))# 创建CLAHE对象clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)# 对Y通道进行CLAHEchannels[0] = clahe.apply(channels[0])# 合并通道ycrcb = cv2.merge(channels)# 转换回BGR色彩空间result = cv2.cvtColor(ycrcb, cv2.COLOR_YCrCb2BGR)return result# 读取图像
im = cv2.imread('xue_foggy.png')
if im is None:raise FileNotFoundError("The image file was not found. Please check the path.")# 使用CLAHE进行图像去雾
eq = clahe_dehaze(im)# 显示原始图像和处理后的图像
cv2.imshow('Original Image', im)
cv2.imshow('CLAHE Dehazed Image', eq)
cv2.waitKey(0)
cv2.destroyAllWindows()# 保存处理后的图像
cv2.imwrite('img_clahe_dehazed.png', eq)

4. 去雾效果

        从效果对比图看出局部直方图均衡化算法可以显著改善雾天图像的对比度,提升视觉效果。通过对图像的局部区域应用直方图均衡化,能够有效处理不同区域的对比度变化。

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

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

相关文章

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-16讲 EPIT定时器

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

js是单线程还是多线程,为什么是线程而不是进程

JavaScript 在浏览器环境中主要是单线程的,而在 Node.js 环境中,虽然 JavaScript 代码本身仍然是在单线程中执行的,但 Node.js 底层利用了多线程来处理 I/O 操作等异步任务。 下面我会解释为什么 JavaScript 在浏览器环境中主要是单线程&…

再谈Google I/O 2024:开发者必看亮点

在2024年Google I/O大会上,谷歌发布了许多令人兴奋的新技术和工具。本文将重点介绍其中的三大亮点:新一代TPU、Gemma模型以及Firebase GenKit。这些工具和技术对于开发者来说,将会带来前所未有的便利和强大功能。 新一代TPU:Tril…

centOS7.9 DNS配置

1.DNS规划 dns.sohu.com192.168.110.111Awww.sohucom192.168.110.112Aoa.sohu.com 192.168.110.113A 2.安装 bind yum install -y bind bind-utils 3. 编辑主配置文件 vim /etc/named.conflisten- on port 53 { any; }; allow- query { any; }; 4.配置区域文件 …

在MySQL数据库中的视图和事务。

视图 view 临时表 作用:优化多表查询的效率 可以将经常使用的连接查询结果使用视图进行保存,避免多次重复的笛卡尔积运算 MySQL数据库在多表查询的时候会自动进行笛卡尔积运算。 如果将来经常要用到某一个多表查询的结果就可以使用视图将这个结果…

若依框架二次开发指南:从基础到高级定制

若依框架(RuoYi)作为一个基于Spring Boot和MyBatis的快速开发平台,其强大的功能和灵活的架构设计使其成为企业级应用开发的理想选择。然而,随着业务需求的不断变化,原生的若依框架可能需要进行一定程度的定制和扩展。本…

前端面试题日常练-day30 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末。 1. 在Vue中,以下哪个选项用于根据条件渲染多个元素? a) v-if b) v-bind c) v-model d) v-for 2. Vue中,以下哪个选项用于在计算属性中处理异步操作&#xff1f…

图生视频 学习笔记

目录 免费文生视频模型还支持4K分辨率——Viva open-sora 潞晨科技 图生视频Runway Pika 文生视频、图生视频 免费文生视频模型还支持4K分辨率——Viva 1、文生视频 2、图生视频 3、视频4K高清 4、区域重绘 5、自动扩图 6、区域抠图 作者:C叔聊历史 https:…

Visual Studio中MP编译参数

MP通常与OpenMP(Open Multi-Processing)关联,它是用于多平台共享内存并行编程的一个API。 在编译C或C代码时使用OpenMP,通常需要特定的编译参数来启用这一功能。对于GCC和G编译器,这些参数包括: -fopenmp…

Java虚拟机原理(上)-揭秘Java GC黑匣子-知其所以然,从此不再捆手捆脚

对于Java开发者来说,GC(垃圾回收器)就如同一个神秘的黑匣子,它在背后不知疲倦地运作,却也时常给我们带来诸多疑惑和挫折。今天,就让我们切开这个黑匣子,深入解析Java GC的工作原理,助你了解其中的奥秘&…

SpringBoot anyline

1、定义通用处理 public interface ClickHouseBaseService extends IService<DataRow> {/*** 根据sql查询数据库&#xff0c;返回集合对象** param sql 执行sql* return {link DataSet} 数据集*/DataSet querys(String sql);/*** 根据sql查询数据库&#xff0c;返回单个…

云手机在软件测试中的作用,为软件测试工程师减负

针对每家企业来说&#xff0c;对于即将上线的软件进行测试这一步骤是不可忽视的&#xff0c;这决定产品上线后的质量和口碑&#xff1b; 传统的的真机测试可能面临设备大量的采购&#xff0c;管理和维护的成本提高&#xff0c;现在不少企业都开始用云手机来代替真机&#xff0…

24.zabbix高可用

环境准备 准备三台机器 主机名字IP地址软件环境zabbix-server01192.168.111.70httpdphpkeepalivedsshpasszabbix serveragentzabbix-server02192.168.111.71httpdphpkeepalivedsshpasszabbix serveragentzabbix-agent192.168.111.80zabbix agentmysql VIP规划&#xff1a;19…

AWS计算之Batch

AWS Batch是亚马逊提供的一项批量计算服务&#xff0c;旨在帮助用户高效地处理大规模的计算工作负载。AWS Batch可以自动调度、运行和监控批处理作业&#xff0c;用户无需管理底层的计算资源&#xff0c;可以专注于编写和提交作业。AWS Batch提供了灵活的配置选项&#xff0c;包…

《Ai-企业知识库》-讨论、构思01

阿丹&#xff1a; 经过几天的Ai学习&#xff0c;开始对于整个大模型&#xff0c;开始有清晰的认知了。开始准备上手操作&#xff0c;编程自己去写一些东西了。 什么是会话AI? 一个计算机程序&#xff0c;允许人类使用各种输入方法&#xff0c;如语音&#xff0c;文字&#x…

使用STM32F103读取TF卡并模拟U盘:使用标准库实现

使用STM32F103读取TF卡并模拟U盘&#xff1a;使用标准库实现 STM32F103是一款流行的ARM Cortex-M3微控制器&#xff0c;在嵌入式系统中广泛应用。本文将介绍如何使用STM32F103读取TF卡&#xff0c;并将其模拟成U盘&#xff0c;让电脑可以读取TF卡的内容。我们将使用标准库&…

Spring常见问题

如何理解spring属于低侵入式设计&#xff1f; 在代码中不需要写明具体依赖对象&#xff0c;在运行时进行自动注入&#xff0c;降低了组件的耦合依赖的是接口&#xff0c;而接口的实现类具有拓展性 Spring IOC 实现了什么功能&#xff0c;谈谈你对IOC的理解。 负责创建对象&…

【云原生】K8s管理工具--Kubectl详解(一)

一、陈述式管理 1.1、陈述式资源管理方法 kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口kubectl 是官方的 CLI 命令行工具&#xff0c;用于与 apiserver 进行通信&#xff0c;将用户在命令行输入的命令&#xff0c;组织并转化为apiserver 能识…

Elasticsearch集群和Logstash、Kibana部署

1、 Elasticsearch集群部署 服务器 安装软件主机名IP地址系统版本配置ElasticsearchElk10.3.145.14centos7.5.18042核4GElasticsearchEs110.3.145.56centos7.5.18042核3GElasticsearchEs210.3.145.57centos7.5.18042核3G 软件版本&#xff1a;elasticsearch-7.13.2.tar.gz 示…

ubuntu18 安装python3.8

在Ubuntu 18.04上安装Python 3.8可以通过以下步骤完成&#xff1a; 1.更新包列表和已安装的包&#xff1a; sudo apt update sudo apt upgrade 2.安装依赖项&#xff1a; sudo apt install -y software-properties-common 3.添加Python 3.8的PPA&#xff08;个人包归档&am…