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

基于MATLAB典型去雾算法代码

1.3.1 Rentinex理论

Retinex(视网膜“Retina”和大脑皮层“Cortex”的缩写)理论是一种建立在科学实验和科学分析基础上的基于人类视觉系统(Human Visual System)的图像增强理论。该算法的基本原理模型最早是由Edwin Land(埃德温•兰德)于1971年提出的一种被称为的色彩的理论,并在颜色恒常性的基础上提出的一种图像增强方法。Retinex 理论的基本内容是物体的颜色是由物体对长波(红)、中波(绿)和短波(蓝)光线的反射能力决定的,而不是由反射光强度的绝对值决定的;物体的色彩不受光照非均性的影响,具有一致性,即Retinex理论是以色感一致性(颜色恒常性)为基础的。

根据Edwin Land提出的理论,一幅给定的图像S(x,y)分解成两幅不同的图像:反射物体图像R(x,y)和入射光图像L(x,y),其原理示意图如图8.3-1所示。

http://s8.sinaimg.cn/middle/4ca086fcgb86c36fe6177&690

 

对于观察图像S中的每个点(x,y),用公式可以表示为:
                          S(x,y)=R(x,y)×L(x,y)                   (1.3.1)

实际上,Retinex理论就是通过图像S来得到物体的反射性质R,也就是去除了入射光L的性质从而得到物体原本该有的样子。

1.3.2  基于Retinex理论的图像增强的基本步骤

步骤一: 利用取对数的方法将照射光分量和反射光分量分离,即:

S'(x, y)=r(x, y)+l(x, y)=log(R(x, y))+log(L(x, y));

步骤二:用高斯模板对原图像做卷积,即相当于对原图像做低通滤波,得到低通滤波后的图像D(x,y),F(x, y)表示高斯滤波函数:

D(x, y)=S(x, y) *F(x, y);

步骤三:在对数域中,用原图像减去低通滤波后的图像,得到高频增强的图像G(x, y):

 G(x,y)=S'(x, y)-log(D(x, y)) ;

步骤四:对G(x,y)取反对数,得到增强后的图像R(x, y):

 R(x, y)=exp(G(x, y));

步骤五:对R(x,y)做对比度增强,得到最终的结果图像。

例程1.3.1

****************************************************************************************

clear;

close all;

% 读入图像

I=imread('wu.png');

% 取输入图像的R分量

R=I(:,:,1);

[N1,M1]=size(R);

% R分量进行数据转换,并对其取对数

R0=double(R);

Rlog=log(R0+1);

% R分量进行二维傅里叶变换

Rfft2=fft2(R0);

% 形成高斯滤波函数

sigma=250;

F = zeros(N1,M1);

for i=1:N1

       for j=1:M1

        F(i,j)=exp(-((i-N1/2)^2+(j-M1/2)^2)/(2*sigma*sigma));

       end

end

F = F./(sum(F(:)));

% 对高斯滤波函数进行二维傅里叶变换

Ffft=fft2(double(F));

% R分量与高斯滤波函数进行卷积运算

DR0=Rfft2.*Ffft;

DR=ifft2(DR0);

% 在对数域中,用原图像减去低通滤波后的图像,得到高频增强的图像

DRdouble=double(DR);

DRlog=log(DRdouble+1);

Rr=Rlog-DRlog;

% 取反对数,得到增强后的图像分量

EXPRr=exp(Rr);

% 对增强后的图像进行对比度拉伸增强

MIN = min(min(EXPRr));

MAX = max(max(EXPRr));

EXPRr = (EXPRr-MIN)/(MAX-MIN);

EXPRr=adapthisteq(EXPRr);

% 取输入图像的G分量

G=I(:,:,2);

[N1,M1]=size(G);

% G分量进行数据转换,并对其取对数

G0=double(G);

Glog=log(G0+1);

% G分量进行二维傅里叶变换

Gfft2=fft2(G0);

% 形成高斯滤波函数

sigma=250;

for i=1:N1

       for j=1:M1

        F(i,j)=exp(-((i-N1/2)^2+(j-M1/2)^2)/(2*sigma*sigma));

       end

end

F = F./(sum(F(:)));

% 对高斯滤波函数进行二维傅里叶变换

Ffft=fft2(double(F));

% G分量与高斯滤波函数进行卷积运算

DG0=Gfft2.*Ffft;

DG=ifft2(DG0);

% 在对数域中,用原图像减去低通滤波后的图像,得到高频增强的图像

DGdouble=double(DG);

DGlog=log(DGdouble+1);

Gg=Glog-DGlog;

% 取反对数,得到增强后的图像分量

EXPGg=exp(Gg);

% 对增强后的图像进行对比度拉伸增强

MIN = min(min(EXPGg));

MAX = max(max(EXPGg));

EXPGg = (EXPGg-MIN)/(MAX-MIN);

EXPGg=adapthisteq(EXPGg);

% 取输入图像的B分量

B=I(:,:,3);

[N1,M1]=size(B);

% B分量进行数据转换,并对其取对数

B0=double(B);

Blog=log(B0+1);

% B分量进行二维傅里叶变换

Bfft2=fft2(B0);

% 形成高斯滤波函数

sigma=250;

for i=1:N1

       for j=1:M1

        F(i,j)=exp(-((i-N1/2)^2+(j-M1/2)^2)/(2*sigma*sigma));

       end

end

F = F./(sum(F(:)));

% 对高斯滤波函数进行二维傅里叶变换

Ffft=fft2(double(F));

% B分量与高斯滤波函数进行卷积运算

DB0=Gfft2.*Ffft;

DB=ifft2(DB0);

% 在对数域中,用原图像减去低通滤波后的图像,得到高频增强的图像

DBdouble=double(DB);

DBlog=log(DBdouble+1);

Bb=Blog-DBlog;

EXPBb=exp(Bb);

% 对增强后的图像进行对比度拉伸增强

MIN = min(min(EXPBb));

MAX = max(max(EXPBb));

EXPBb = (EXPBb-MIN)/(MAX-MIN);

EXPBb=adapthisteq(EXPBb);

% 对增强后的图像RGB分量进行融合

I0(:,:,1)=EXPRr;

I0(:,:,2)=EXPGg;

I0(:,:,3)=EXPBb;

% 显示运行结果

subplot(121),imshow(I);

subplot(122),imshow(I0);

相关文章:

基于MATLAB典型去雾算法代码

1.3.1 Rentinex理论 Retinex(视网膜“Retina”和大脑皮层“Cortex”的缩写)理论是一种建立在科学实验和科学分析基础上的基于人类视觉系统(Human Visual System)的图像增强理论。该算法的基本原理模型最早是由Edwin Land&#xf…...

FrankenPHP实践

目录 1. 说明 2. 程序修改 3. 性能测试 4. 配置 4.1 Docker化部署 4.2 泛域名和证书设置 4.3 相关命令 5. 要点: 6. 参考 1. 说明 Frankenphp是一个先进的,结合了高性能Caddy服务器的PHP环境框架,它允许用户只需要少量改动&#xff…...

嵌入式硬件电子电路设计(一)开关电源Buck电路

目录 Buck电路基本结构 1. 开关闭合(SW 闭合) 2. 开关断开(SW 断开) 3. 开关控制和占空比 MP1584电路分析 其他Buck芯片的电路参考 Buck电路基本结构 下图是简化之后的BUCK电路主回路。下面分析输出电压的产生K闭合后&…...

java项目之协力服装厂服装生产管理系统的设计与实现(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的协力服装厂服装生产管理系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: …...

Java虚拟机的历程(jvm01)

Java虚拟机的历程(jvm01) Java虚拟机(JVM)作为Java语言的核心技术之一,自诞生以来经历了多次迭代与演变。不同的虚拟机在性能、功能以及适用场景上各有侧重。本文将介绍Java虚拟机发展历程中的一些重要虚拟机&#xf…...

[代码随想录Day4打卡] 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II 总结

24. 两两交换链表中的节点 题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 重点: 明确具体交换怎么做。交换其中1,2…...

java项目之校园周边美食探索及分享平台(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 校园周边美食…...

支持 Mermaid 语言预览,用通义灵码画流程图

想像看图片一样快速读复杂代码和架构?通义灵码上新功能:智能问答支持 Mermaid 语言的预览模式,即支持代码逻辑可视化,可以把每段代码画成流程图,像脑图工具一样画出代码逻辑和框架。 操作步骤:选中代码块&a…...

cangjie仓颉程序设计-数据结构(四)

文章目录 ArrayListLinkedListHashSetHashMapTreeMap 本专栏还在持续更新: Cangjie仓颉程序设计-个人总结 这是双子专栏: 仓颉编程cangjie刷题录 这些数据结构都在std.collection.*中。暂时官方包还没有stack, queue等数据结构。服了 import std.coll…...

Redis中储存含LocalDateTime属性对象的序列化实现

目录 1.问题1 向Redis中存入序列化对象 1.1引入 : 1.2解决方案: 1.2.1首先引入依赖 1.2.2然后在RedisConfig中进行配置 1.3 介绍下ObjectMapper 1.3.1 ObjectMapper 1.3.2 objectMapper.registerModule(new JavaTimeModule()); 1.3.3 GenericJackson2Js…...

蚁剑的介绍和使用

蚁剑介绍 蚁剑(AntSword)是一个开源的跨平台网站管理工具,主要用于渗透测试和安全研究。它提供了一个图形化界面,方便用户管理和操作被攻陷的网站。 安装教程: github官网:https://github.com/AntSwordPro…...

C++之多态的深度剖析(2)

前言 在前面内容中,我们对多态进行了基本的了解,对其中的虚函数进行着重的介绍,本节内容我们将进一步对多态的底层进行观察了解看看它是如何实现的。 多态如何实现 从底层的角度Func函数中ptr->BuyTicket(),是如何作为ptr指向P…...

一篇文章 介绍 shiro反序列化漏洞

shiro反序列化漏洞 Shiro-550反序列化漏洞(CVE-2016-4437) 漏洞简介 shiro-550主要是由shiro的RememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加…...

pyav保存视频

目录 imageio替代pyav imageio替代pyav import imageio import numpy as np import torch# 创建一个随机的图像张量,形状为 (N, C, H, W) # 这里 N 30(帧数),C 3(通道数),H 64(…...

.bixi勒索病毒来袭:如何防止文件加密与数据丢失?

导言 在网络威胁剧烈的今天,勒索病毒已成为企业和个人面临的重大安全挑战,其中虫洞勒索病毒习得高强度的加密手段和急剧传播的特性引起关注。一旦感染,就会加密关键数据并索要赎金,导致数据无法访问并带来巨大的财务损失。更为严…...

MySQL安装配置教程

以下是 MySQL 在 Windows 系统下的安装配置教程: 1. 下载 MySQL 访问 MySQL 官方网站(https://dev.mysql.com/downloads/mysql/),根据您的操作系统版本(32 位或 64 位)选择合适的 MySQL 安装包。一般建议下载社区版(Community Server),它是免费且功能丰富的版本。2. …...

Pandas进行数据查看与检查

在数据分析的工作流中,数据的初步查看与检查是非常重要的步骤。通过这一步,可以快速了解数据的结构、属性以及一些关键的统计信息,确保数据符合预期,或者发现数据中的潜在问题。 借助 pandas 库中的常用方法,如 DataFrame.head()、DataFrame.tail()、DataFrame.info() 和…...

‌MySQL中‌between and的基本用法‌、范围查询

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段,包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…...

[ 问题解决篇 ] 解决远程桌面安全登录框的问题

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...

13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析

LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器&#xff1f; 1.迭代器…...