AE (4)_ 直方图调整的理论

news2024/9/22 5:22:00

#灵感# 在短暂的高通平台调试中,很看重直方图调整的理解。后来其它平台,不怎么调整这个了。但还是记录一下。 我个人还是倾向 招式简单,但应用到极致。

绝大部分内容来自:刘斯宁,Image Enhancement - CLAHE - 知乎 (zhihu.com)

穿插个人的部分理解。

目录

英文解释:

对比度:

简单---对比度拉伸:

升级---直方图均衡化 HE:

直方图均衡的局限:

改进---自适应直方图均衡化(AHE):

高通平台的直方图调整---好像不一样:

另个平台的直方图-----只是参与亮度计算:


英文解释:

A histogram is a type of graph that has wide applications in statistics. Histograms provide a visual interpretation of numerical data by indicating the number of data points that lie within a range of values. These ranges of values are called classes or bins. The frequency of the data that falls in each class is depicted by the use of a bar.

翻译过来就是,直方图是统计学中广泛使用的一类图表,它以可视化的形式呈现统计数据,能够显示数据点在给定的数值区间内的分布情况

以常用的8位精度图像为例,直方图的X轴为0~255,共256个桶,每个桶刚好覆盖1个像素值,直方图的Y轴表示每个桶盛纳了多少个像素。

对比度:

图像对比度指一幅图像中最亮的白和最暗的黑之间灰度反差的大小。差异越大代表对比越大,否则对比越小。一种常用的定量度量方法是Michelson对比度,定义为

当一幅图像最白和最黑像素灰度都是128时,图像对比度最低,C=0。

当一幅图像最白像素灰度=255,最黑像素灰度=0时,图像对比度最高,C=1.0。

当一幅图像最白像素灰度=140,最黑像素灰度=80时,图像对比度C=0.27。-----自己算个例子√

当一幅图像最白像素灰度=140,最黑像素灰度=60时,图像对比度C=0.4。

--------------------所以最白和最黑的差距越大时,图像对比度会越大。

图像的直方图集中在中间的几个桶,图像看起来灰蒙蒙的,英语中使用dull(阴沉的;低沉的;无光泽的;萧条的;隐约的;不鲜明的;隐隐约约的;不清晰的;令人生厌的;不明亮的) 描述这种效果。

相反,如果黑白像素的跨度较大,则图像富有通透感,英语中使用clarity(清楚;(画面、物质或声音的)清晰,清澈;)描述这种效果。

简单---对比度拉伸:

将一个灰蒙蒙的图像,拉伸直方图,使画面更通透。

基本思想是用一个下图所示分段线性函数(Piece-Wise Linear, PWL Function)对像素亮度进行映射。------------线性的、分段、3个函数

 

局限:对比度拉伸适合处理低动态(LDR)图像,这类图像的特点是直方图的跨度较小,存在向两极拉伸的空间。对于高动态(HDR)图像,直方图跨度已经很大,对比度拉伸没有操作的空间,

升级---直方图均衡化 HE:

均衡化被认为是提升图像对比度最为有效的方法,它的基本思想是用数学方法重新调整像素的亮度分布(和拉伸差不多),使调整后的直方图具有最大的动态范围,每个桶(bin/bucket)盛纳的像素数量几乎相等------这样就会使图像的灰度级增加,从而可达到图像对比度整体增强的效果。

直方图均衡的方法是dy=p(x)dx,意义是将源直方图dx宽度所盛纳的p(x)dx个像素映射到目标直方图的dy宽度中,映射前后像素数量不变,密度发生变化,分布更均匀。如下图所示。

右侧图的中部、亮部区域的像素分布更加均匀。

对直方图拉伸和均衡两种方法的效果做比较:

-----------------(此图直方图均衡后,好像效果也没那么好)

直方图均衡的局限:

当原图的直方图比较集中时,这意味着原图实际上只出现了少数几个颜色值,如果对原图进行拉伸操作,则这些颜色之间的距离就会变大,直方图上留下了更多空洞,这样,原本比较接近的颜色在拉伸后的图上会出现显著的差异,图像出现颜色分层现象(banding),或者叫分色现象。

------------右图出现很多异常颜色

对齐问题:

直方图均衡的一个重要特征是把原图中最亮的像素对齐到预设的最大值(比如8bit图是255)。当原图中颜色比较丰富时,这个操作一般问题不大。但是当原图中所有像素都是一个值(例如8,这对应一幅纯黑的图像,可能是拍摄于夜间),则均衡之后所有像素都被映射到255,图像变成了纯白的。于是,直方图均衡相当于无脑改变了原图的色调。----------比如下图的映射,改变了色调

另外还会产生噪声问题,如果一个区域的像素分布大体是均匀的,但是图像中带有一些噪声,则HE变换函数会把原图中很窄的x值分布映射到整个y值空间,这同时也就放大了原图中的噪声。

改进---自适应直方图均衡化(AHE):

将图像分成若干个区域(tile),比如8x8=64个tile,直方图均衡的基本单位不再是整个图像,而是对每个小区域做直方图均衡。AHE 更适合于用来改善图像的局部对比度,以及增强图像边缘信息,但是并没有解决直方图均衡会放大图像噪声的问题。

-------------每一小块图像统计一个各自专属的分布函数,这样有利于更好地处理图像数据的局部细节,但是由于图像被等分为几块分别处理,这会导致算法的时间复杂度提高不少,降低了图像处理效率。    并且还有另一个缺点,由于AHE算法是对每个像素块独立进行处理映射,也就是块与块之间并没有做一个过渡处理,这样会导致一个问题现象,那就是图像呈现出来的效果就像是被切割成了几个块。
 

限制对比度+自适应直方图均衡 CL AHE:

削峰填谷,把我们认为多余的概率平均分摊给其它像素,使亮度增益相对均匀地散布到所有像素上,而不是让某一个颜色突然地对齐到最大亮度。【分析那个黑图像被对齐到全白的例子。如果用CLAHE来处理这个黑图,我们可以拍脑袋规定直方图每个bin的频数不能超过总像素数的50%,超过的部分要被均摊到各个bin中。】

以下图为例,由于CLAHE 人为削减了最亮像素的频数(比如不超过10%),所以CLAHE图的亮区得到了抑制,而暗区的亮度得到了明显的提升。

----------------------------------------------无脑的HE均衡化。-------------分区均衡化 + 增益分布均匀。

 original histogram                                  HE histogram                                CLAHE histogram

高通平台的直方图调整---好像不一样:

按下述取target 的方案,高通的直方图调整是整体的亮度,不能兼顾:亮部压制+ 暗处提亮。

另个平台的直方图-----只是参与亮度计算:

将直方图划分区域,判断画面过曝情况,然后进行target 调整。也无法做到亮处+暗处的调整。

通过high level 计算出高亮的highCut, highCut越大则表示过曝区越多,则降低曝光,

直到把highCut收敛到highCutTarget结束。

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

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

相关文章

图论算法(数学建模)算法以后更新

无权值,无向,当成1就行 有向 有向赋权 顶点度的概念 Dijkstra算法 Dijkstra算法能求-一个顶点到另一-顶点最短路径。它是由Di jkstra于1959年提出的。实际它能出始点到其它所有顶点的最短路径Dijkstra算法是一种标号法:给赋权图的每一一个顶点记一个数&a…

特斯拉难挽倒退?比亚迪为中国汽车市场改写历史

对于电动汽车这个新兴产业,特斯拉长期以来一直处于领头羊的位置,近年来也面临诸多测试。去年底欧洲报道特斯拉在瑞典遭遇罢工冲击,运营陷入诸多困扰,实在出人意料。更让人讶异的是,年终宣布新王者比亚迪在全球销量首次…

【前端设计】文字聚光灯

欢迎来到前端设计专栏&#xff0c;本专栏收藏了一些好看且实用的前端作品&#xff0c;使用简单的html、css语法打造创意有趣的作品&#xff0c;为网站加入更多高级创意的元素。 案例 文字聚光灯效果可以用于网站标题 html <!DOCTYPE html> <html lang"en&quo…

Unity组件开发--短连接HTTP

1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…

SSM框架学习笔记01 | 注解开发

文章目录 1. 注解形式定义bean2.纯注解开发3.bean管理4. 依赖注入5. 第三方bean管理总结 1. 注解形式定义bean Compoenet ControllerServiceRepository 配合代码块 <context:component-scan /> 使用 2.纯注解开发 Configuration ComponentScan AnnotationConfigApplicati…

【开源】基于JAVA的教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…

国科大计算机体系结构期末考试——更新中

题型一、第二章的画图 给一个逻辑表达式&#xff0c;画出晶体管级别的电路图 cmos电路的基本电路&#xff1a; 与非门的功能是对多个输入信号进行逻辑与操作&#xff0c;然后对结果进行取反。 或非门的功能是对多个输入信号进行逻辑或操作&#xff0c;然后对结果进行取反。 …

链表:两个一组,反转链表

1、针对单链表&#xff0c;当我们进行操作时&#xff0c;如果需要进行反转或者进行其他操作时&#xff0c;有链表断开的情况&#xff0c;不妨考虑下使用辅助指针来记录断开后的链表位置&#xff0c;将需要处理的数据处理好后&#xff0c;可以使用此辅助指针找到链表的位置 #in…

服务器故障与管理口与raid

一&#xff0c;服务器常见故障 1&#xff0c;系统不停重启进入不了系统 排查是否是硬件故障&#xff0c;系统盘是否损坏&#xff08;硬盘灯红色&#xff0c;黄色&#xff0c;绿色&#xff09; 查看系统第一启动项是那种方式(硬盘 网络网卡 光驱 U盘) bios 是否双系统&#x…

使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv-ui开发脚手架

使用命令行方式搭建uni-app Vue3 Typescript Pinia Vite Tailwind CSS uv-ui开发脚手架 项目代码以上传至码云&#xff0c;项目地址&#xff1a;https://gitee.com/breezefaith/uniapp-vue3-ts-scaffold 文章目录 使用命令行方式搭建uni-app Vue3 Typescript Pinia V…

C# ReaderWriterLock类学习

前言 今天这篇文章我们来学习一下ReaderWriterLock类&#xff0c;ReaderWriterLock类定义了实现单写程序和多读程序语义的锁。这个类主要用于文件操作&#xff0c;即多个线程可以读取文件&#xff0c;但只能用一个线程来更新文件。使用ReaderWriterLock类时&#xff0c;任意数…

并发(9)

目录 50.AQS的核心思想是什么&#xff1f; 51.AQS有哪些核心方法&#xff1f; 52.AQS定义什么样的资源获取方式&#xff1f; 53.AQS底层使用了什么样的设计模式&#xff1f; 54.什么是可重入&#xff0c;什么是可重入锁&#xff1f;他用来解决什么问题&#xff1f; 55.Ree…

wireshark抓包分析HTTP协议,HTTP协议执行流程,

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取「HTTP协议」的数据包&#…

超自动化助力企业财务转型升级

在快节奏的财务规划与分析环境中&#xff0c;传统的预算方法虽长期以来一直是企业制定有效决策的支柱&#xff0c;但已不足以驾驭当今复杂的商业环境。不断的经济变化、市场的不确定性以及利益相关者的需求增加促使企业寻求更敏捷的解决方案。如今&#xff0c;部分企业开始尝试…

关键字、标志符、变量、基本数据类型

1、关键字 1.1、定义 定义&#xff1a;被JAVA语言赋予了特殊含义&#xff0c;用作专门用途的字符串&#xff08;或单词&#xff09; 特点&#xff1a;全部关键字都是小写字母 上源码&#xff1a; 代码中定义类的关键字class&#xff0c;定义一个订单控制器类 ​​​​​​​…

try catch 应该在 for 循环里面还是外面

正文 首先 &#xff0c; 话说在前头&#xff0c; 没有什么 在里面 好 和在外面好 或者 不好的 一说。 本篇文章内容&#xff1a; 使用场景 性能分析 个人看法 1. 使用场景 为什么要把 使用场景 摆在第一个 &#xff1f; 因为本身try catch 放在 for循环 外面 和里面 …

7N65-ASEMI高压NPN型MOS管7N65

编辑&#xff1a;ll 7N65-ASEMI高压NPN型MOS管7N65 型号&#xff1a;7N65 品牌&#xff1a;ASEMI 连续漏极电流(Id)&#xff1a;4A 漏源电压(Vdss)&#xff1a;650V 栅极阈值电压&#xff1a;30V 单脉冲雪崩能量&#xff1a;150mJ 集电极电流&#xff08;脉冲&#xff…

【分布式微服务专题】SpringSecurity快速入门

目录 前言阅读对象阅读导航前置知识笔记正文一、Spring Security介绍1.1 什么是Spring Security1.2 它是干什么的1.3 Spring Security和Shiro比较 二、快速开始2.1 用户认证2.1.1 设置用户名2.1.1.1 基于application.yml配置文件2.1.1.2 基于Java Config配置方式 2.1.2 设置加密…

初识Linux shell

Linux初探 Linux系统可以划分为4个部分&#xff1a; Linux内核&#xff1a;Linux系统的核心&#xff0c;控制着系统的所有硬件和软件&#xff0c;在必要时分配硬件&#xff0c;并根据需要执行软件。 内核主要功能&#xff1a; 系统内存管理&#xff1a;内核通过硬件上称为交换…

Proxifier下载安装

一、下载地址 官网&#xff1a; https://www.proxifier.com/ 下载链接 https://www.proxifier.com/distr/ProxifierSetup.exe 因为这个跳转直接下载的&#xff0c;我放沙箱里试了一下 二、安装 安装就是同意协议&#xff0c;选择安装位置&#xff0c;因为是正版&#xff0c;他…