[论文阅读] 空间熵图像增强算法(Spatial Entropybased Contrast Enhancement in DCT)

news2025/1/23 6:11:38

[论文阅读] 空间熵图像增强算法(Spatial Entropybased Contrast Enhancement in DCT)

最近看到了一篇介绍传统图像增强算法的文章:基于空间熵的对比度增强算法 - 知乎 (zhihu.com),从里面看到效果还不错,如下所示,因而详细看了下。
在这里插入图片描述

首先在网上找到了这篇文章及代码,如下:
文章:Spatial Entropy-Based Global and Local Image Contrast Enhancement, [paper],[code]

同时还找到了另外一篇博客来介绍这篇文章:基于空间熵的全局和局部图像对比度增强 - BrianX - 博客园 (cnblogs.com)。
这2篇博客介绍说明的差不多,说的都很详细,但个人觉得没有把这篇算法的本质说清楚,下面说说我对这个算法的理解。

1. 算法原理

算法主要可以分为2个步骤:

  1. 全局直方图均衡
  2. 局部对比度增强
1.1 全局直方图均衡

这篇文章中的全局直方图均衡与一般的全局直方图均衡有点不一样。

一般的全局直方图均衡是统计整幅图像的直方图来进行的,它会增强整幅图像中出现的更多的灰度,这样会使得增强后的图像出现一些问题,如对于大片平坦区域,增强后可能会出现失真,对一般全局直方图均衡可详见这里:一文搞懂直方图均衡_直方图均衡算法-CSDN博客。

那这篇文章中的算法使用什么方法来改善这些问题了?

  • 一是使用分块统计来替代全局统计,改善全局出现最多像素的影响:文章中将图像均匀的分割成K=M*N块,K<=graylevel(对于8位的图像,graylevel=256),然后对每块单独统计直方图,得到二维直方图H,H的大小是graylevel*K,每行是一个灰阶在每个块中出现的次数(概率),每列是每块的直方图。
  • 二是使用熵对比度来替代出现次数作为权重,改善出现少的像素权重:文章中将二维直方图中的每一行,也就是每个灰度,计算一个熵,得到每个灰度的熵Sk,即文中公式3,使用每个灰度的熵与其他所有灰度熵的和的比值fk,即文中公式4,来替代次数作为权重。

来看下文章中给的一个例子:
在这里插入图片描述
图中,a为原图,b为全局直方图均衡结果,c为使用文中方法结果。可以看到,全局直方图均衡对直方图中出现比较多的灰度增强较多,而对出现较少的灰度则有一定的抑制,使得增强后的图像存在问题,而文章中的方法则好很多。

在这里插入图片描述
上面图像可以更直观的反映出二者区别。从左到右,从上到下,依次标号为1-8,左边4幅图像,1(增强后直方图)、2(CDF,映射曲线)、5(增强结果)、6(直方图)为全局直方图均衡结果,右边4幅图像,3(CDF,映射曲线)、4(增强后直方图)、7(熵对比度fk)、8(增强结果)为文章中结果。

可以看到,文章中方法对直方图中出现较多的灰度没有过度增强,没有出现增强太过的问题。

1.2 局部对比度增强

文章中的局部对比都增强方法比较简单,利用了DCT变换的性质,对DCT变换后的系数乘以一个大于1的数,这个数是第一步里面自适应算出来的一个数,详见文中公式12,即使用fk计算出来熵的r次幂。关于图像DCT可以查看:图像处理中的DCT变换 - 知乎 (zhihu.com)
在这里插入图片描述
上图为文章中的一个例子,c为文章中方法均衡后的结果,d是DCT细节增强后的结果。

2. 原理拆解

下面尝试分析下算法原理的本质。

2.1 全局直方图均衡

首先来看下文章每个灰度的熵(详细了解熵,可以戳这里:详解机器学习中的熵、条件熵、相对熵和交叉熵 - 遍地胡说 - 博客园 (cnblogs.com))。

熵可以用来表示数据的混乱程度(确定性),概率越均匀,熵越大,概率越不均匀,熵越小。

对应于图像中的每个灰度,在每个块中出现的次数越平均,其熵Sk越大;在每个块中出现的次数越不平均,其熵Sk越小。熵Sk最大为 − 1 K ∗ l o g ( 1 K ) -\frac{1}{K}\ast log\left( \frac{1}{K} \right) K1log(K1),K为图像分成的块数,按文章中的方法,K一般在256左右,当K=256时,Sk最大为0.0313。

因而,在文章中,熵是用来表示每个灰度在图像中分布的均匀程度,分布越均匀,熵越大;分布越不均匀,熵越小。

在这里插入图片描述
上图为示例中有鸭子(可能不是)的图像对应的直方图hist、熵Sk、及熵的对比度fk。从图中可以看到,每个灰度的熵Sk与直方图中对应的概率没有很明显的关系,可以看到,灰度的熵Sk不会因为其概率很大而很大,概率很小而很小,这样可以避免使用灰度直方图的问题。

再来看看熵对比度fk。从上图中可以看到,熵对比度fk与熵Sk几乎是一样的。看看其计算公式可能就明白了,fk=Sk/(S-Sk),S为所有灰度熵Sk的和,S远大于Sk,相当于fk=Sk/S。

由于灰度的熵Sk变化相对较小,由其计算CDF来作为映射曲线就相对平滑,可以看到上面例子中,映射曲线差不多就是一条直线,类似于线性拉伸。

对代码中提供的图像进行了测试,发现其映射曲线基本都类似线性拉伸。整体上,文章的全局直方图均衡有类似线性拉伸的作用。

2.2 局部对比度增强

局部对比度增强就比较简单,使用DCT变换对细节增强,就不再详细说明了,主要是计算系数,下面是不同的alpha的结果。

在这里插入图片描述
上图中,左边alpha=1.2,右边alpha=1.8。alpha越大对细节增强越明显,如图中下方树枝。

而文章中方法,使用第一步中计算出来的fk来计算 α = ( ∑ k = 1 K ( f k l o g 2 ( f k ) ) ) γ \alpha=\left( \sum_{k=1}^{K}{\left( f_{k}log_{2} \left( f_{k} \right) \right)} \right)^{\gamma} α=(k=1K(fklog2(fk)))γ。由于fk分布相对比较均匀,因而计算出来的alpha可能都差不多。

统计了代码中提供的测试图像,计算出来的alpha基本都为1.6x。整体上,alpha的变化范围可能比较小。

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

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

相关文章

【8】证书公钥替换

0x01 问题描述 存在一个前置系统&#xff0c;数据包有登录信息。登录需要填入用户名&#xff0c;证书上传&#xff0c;私钥。如图&#xff1a; 提供数据包如下&#xff1a; POST /api/certLogin HTTP/1.1 Host: 192.168.11.153 Connection: keep-alive Content-Length: 934…

LLM之RAG实战(二十七)| 如何评估RAG系统

有没有想过今天的一些应用程序是如何看起来几乎神奇地智能的&#xff1f;这种魔力很大一部分来自于一种叫做RAG和LLM的东西。把RAG&#xff08;Retrieval Augmented Generation&#xff09;想象成人工智能世界里聪明的书呆子&#xff0c;它会挖掘大量信息&#xff0c;准确地找到…

vue项目设置的端口号运行后会自动加一问题解决

vue项目设置的端口号运行后会自动加一问题解决 主要原因是之前运行项目后没有完全的关闭服务&#xff0c;导致再次运行项目端口号被占用&#xff0c;自动加一&#xff01; 问题解决 打开任务管理器&#xff0c;在进程中找到node相关进程&#xff0c;右键结束任务

【Java EE初阶二十一】http的简单理解(二)

2. 深入学习http 2.5 关于referer Referer 描述了当前页面是从哪个页面跳转来的&#xff0c;如果是直接在地址栏输入 url(或者点击收藏夹中的按钮) 都是没有 Referer。如下图所示&#xff1a; HTTP 最大的问题在于"明文传输”,明文传输就容易被第三方获取并篡改. …

React之拖动组件的设计(一)

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…

【Vuforia+Unity】AR04-地面、桌面平面识别功能

不论你是否曾有过相关经验&#xff0c;只要跟随本文的步骤&#xff0c;你就可以成功地创建你自己的AR应用。 官方教程Ground Plane in Unity | Vuforia Library 这个功能很棒&#xff0c;但是要求也很不友好&#xff0c;只能支持部分移动设备&#xff0c;具体清单如下&#xf…

2024牛客寒假算法基础集训营5 -- EF soyorin的数组操作

题目大意&#xff1a; 思路解析&#xff1a; 我们可以发现偶数情况下&#xff0c;我们可以无限做 k n的操作&#xff0c;这样一定会让数组变为非降序数组。 但是奇数情况下&#xff0c;最后一个数没有办法发生变化&#xff0c;所以我们只能统计怎样在保证i--n为非降序情况下最…

ELK Stack 日志平台搭建

前言 最近在折腾 ELK 日志平台&#xff0c;它是 Elastic 公司推出的一整套日志收集、分析和展示的解决方案。 专门实操了一波&#xff0c;这玩意看起来简单&#xff0c;但是里面的流程步骤还是很多的&#xff0c;而且遇到了很多坑。在此记录和总结下。 本文亮点&#xff1a;…

洛谷 P1028 [NOIP2001 普及组] 数的计算

说明&#xff08;6&#xff09; 求出后五个加本身得到总方案 参考代码and代码解读

redis复习笔记06(小滴课堂)

分布式锁核心知识介绍和注意事项 基于Redis实现分布式锁的几种坑 综合伪代码&#xff1a; 运行&#xff1a;

压缩感知常用的测量矩阵

测量矩阵的基本概念 在压缩感知&#xff08;Compressed Sensing&#xff0c;CS&#xff09;理论中&#xff0c;测量矩阵&#xff08;也称为采样矩阵&#xff09;是实现信号压缩采样的关键工具。它是一个通常为非方阵的矩阵&#xff0c;用于将信号从高维空间映射到低维空间&…

电商+支付双系统项目------实现电商系统中分类模块的开发!

本篇文章主要介绍一下这个项目中电商系统的分类模块开发。电商系统有很多模块&#xff0c;除了分类模块&#xff0c;还有用户模块&#xff0c;购物车模块&#xff0c;订单模块等等。上一篇文章已经讲了用户模块&#xff0c;这篇文章我们讲讲项目中的分类模块。 有的人可能会很…

解决docker中运行的jar包连不上前端程序

目录 检查端口映射 查看容器的 IP 地址 检查容器网络设置 防火墙和网络策略 前端程序配置 跨域资源共享 (CORS) 日志查看 连接问题通常涉及到网络配置和端口映射。确保你在 Docker 中运行的 JAR 包可以被前端程序访问&#xff0c;可以采取以下步骤来解决问题&#xff1a…

职业技能鉴定服务中心前端静态页面(官网+证书查询)

有个朋友想做职业技能培训&#xff0c;会发证书&#xff0c;证书可以在自己网站可查。想做一个这样的网站&#xff0c;而且要特别土&#xff0c;一眼看上去像xxx官方网站&#xff0c;像jsp .net技术开发的网站。用htmlcssjquery还原了这样子一个前端页面&#xff0c;这里分享给…

操作系统导论-课后作业-ch19

1. 本书在第6章中有过介绍&#xff0c;gettimeofday函数最多精确到us&#xff0c;并且大致精确&#xff08;并不完全精确&#xff09;&#xff0c;需要多迭代几次减少误差&#xff0c;循环次数太多也会导致结束时间小于开始时间&#xff08;即回滚&#xff09;的现象&#xff…

LInux-信号1

文章目录 前言一、信号是什么&#xff1f;二、学习步骤使用kill -l命令查看信号列表可以看到有那么多信号&#xff0c;那么进程是如何识别这么多信号的呢&#xff1f; 使用kill命令终止进程信号的捕捉kill函数raise函数abort函数 Core dump如何查看自己的核心转储功能是否被打开…

【云原生】持续集成持续部署

本文主要总结CI/CD的流程&#xff0c;不会详细介绍每个知识点。 啥是集成&#xff1f;啥是部署&#xff1f; 集成&#xff0c;就是把应用程序、相关环境、配置全局打包放在一个容器中的操作。部署就不解释了。 CI/CD 如果是自己手动部署的话&#xff0c;流程应该是这样的&am…

Open CASCADE学习|计算全局属性

对于一个系统全局属性有&#xff1a; 质量(mass) 质心(mass center) 惯性张量(matrix of inertia) 关于一个轴的矩(moment about an axis) 关于一个轴的惯性半径(radius of gyration about an axis) 惯性的主属性&#xff0c;比如主轴(principal axis)&#xff0c;主矩(pr…

算法-搜索二维矩阵 II

1、题目来源 240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; 2、题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#x…

Linux:Jenkins:GitLab+Maven+Jenkins的部署——离线包rpm版

Linux&#xff1a;Jenkins&#xff1a;GitLabMavenJenkins的部署&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136157018?spm1001.2014.3001.5501这个是原版文章&#xff0c;均是使用的在线情况&#xff0c;但是不排除会有离线部署&am…