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

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

绝大部分内容来自:刘斯宁,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结束。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis 面试问题 (更新中 ing)

目录 reids 是做什么的为什么那么快有哪些使用场景redis有哪些 数据结构redis 有哪些底层数据结构为什么设计 sds一个 字符串 存储多大容量 stream为什么设计 streamstream 消费者消息丢失stream 消息私信问题 持久化机制redis 持久化机制,优缺点,怎么用…

全解析阿里云Alibaba Cloud Linux镜像操作系统

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

【python入门】day12:bug及其处理思路

bug的常见类型 粗心 / 没有好习惯 思路不清 lst[{rating:[9.7,2062397],id:1292052,type:[犯罪,剧情],title:肖申克的救赎,actors:[蒂姆罗宾斯,摩根弗里曼]},{rating:[9.6,1528760],id:1291546,type:[剧情,爱情,同性],title:霸王别姬,actors:[张国荣 ,张丰毅 , 巩俐 ,葛优]},{r…

.NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法

在.NET 6中,微软官方建议把 System.Drawing.Common 迁移到 SkiaSharp 库。因为System.Drawing.Common 被设计为 Window 技术的精简包装器,因此其跨平台实现欠佳。 SkiaSharp是一个基于谷歌的Skia图形库(Skia.org)的用于.NET平台的…

目标检测损失函数:IoU、GIoU、DIoU、CIoU、EIoU、alpha IoU、SIoU、WIoU原理及Pytorch实现

前言 损失函数是用来评价模型的预测值和真实值一致程度,损失函数越小,通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段,如果我们想让预测值无限接近于真实值,就需要将损失值降到最低…

flink on yarn任务启停脚本(实现一键读取ck启动,保存ck停止)

1.问题描述 flink同步任务,长期任务过多,某个任务停止保存checkpoint或者savepoint后,修改代码,使用命令行读取检查点重新启动需要人工去hdfs上找寻检查点保存位置。任务过多管理起来很不方便。 鉴于此,使用脚本编写了…

kotlin基础——重载

重载算术运算符 重载二元算术运算 使用operator定义plus()方法后,可以直接使用号求和 data class Point(val x: Int, val y: Int) {operator fun plus(other: Point): Point {return Point(x other.x, y other.y)} } val p1 Point(1, 2) val p2 Point(3, 4) …

Spark三:Spark SQL

Spark SQL 数据的分析方式、数据分类和SparkSQL适用场景、数据抽象(DataFrame, DataSet, RDD),SparkSQL读取数据和处理数据的两种风格:SQL风格和DSL风格 学习链接 https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、数据分…

【GNN】经典GNN的数学原理之美

目录 引言 背景 图神经网络 节点 消息传递 聚合 更新 整合在一起 使用邻接矩阵 GNN层堆叠 以节点分类为例训练GNN。 训练和测试数据 1、Transductive 2、Inductive 反向传播和梯度下降 流行图神经网络总结 1、消息传递神经网络 2、图卷积 3、图注意力网络 …

旧硬盘插电脑上显示要初始化怎么办?了解原因和解决方案

在使用旧的硬盘插入电脑时,有时会遇到需要进行初始化的情况。这种情况可能是由于多种原因引起的,而初始化硬盘将会导致所有数据丢失,给用户造成不便和损失。因此,本文将介绍解决旧硬盘需要初始化的问题的方法,并提供一…

毕业设计:基于机器学习xgboost lgbm adaboost 的空气质量预测pm2.5‘, ‘so2‘, ‘no2‘ 完整代码数据-可直接运行

项目详细视频讲解介绍: 基于机器学习xgboost lgbm adaboost 的空气质量预测-完整代码数据可直接运行_哔哩哔哩_bilibili 数据展示: 运行结果展示: 项目代码: from sklearn import preprocessing import random from sklearn.model_selection import train_test_split fr…

软件测试第二部分:白盒测试

概念与定义 白盒测试:侧重于系统或部件内部机制的测试,类型分为分支测试(判定节点测试)、路径测试、语句测试。 控制流分析(基于程序结构):控制流分析是一类用于分析程序控制流结构的静态分析技术,目的在于…

ModuleNotFoundError: No module named ‘numpy.testing.decorators‘

文章目录 报错信息报错原因解决方案 关注公众号:『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或➕v:codebiubiubiu滴滴我 报错信息 ModuleNotFoundError: No module named numpy.testing.decorators 报错原因 新版本已经去…

面试算法88:爬楼梯的最少成本

题目 一个数组cost的所有数字都是正数,它的第i个数字表示在一个楼梯的第i级台阶往上爬的成本,在支付了成本cost[i]之后可以从第i级台阶往上爬1级或2级。假设台阶至少有2级,既可以从第0级台阶出发,也可以从第1级台阶出发&#xff…

pip install 安装模块包位置及设置Anaconda为默认版本python

01问题 pycharm运行代码找不到模块包pip install不知道安装到哪里了jupyter使用不同版本python 02产生原因 安装了多个版本pythonanaconda本身也带有python 03解决办法 (1)查看当前默认python版本 打开运行窗口Winr; 输入cmd回车; 输入python回车…

初识Web服务器

一、web服务器 1、什么是web服务器? web服务器就是web项目的容器,我们将开发好的web项目部署到web容器中,才能使用网络中的用户通过浏览器进行访问。 一张图带你了解web服务器有啥作用: 在我的电脑上有一个已经做好的项目&#…

linux centos 添加临时ip

### 1.添加ip ip addr add IP/mask dev 网络设备 例:ip addr add 172.104.210.247/24 dev ens5f1 ### 2.启动网卡 ip link set up 网络设备 例:ip link set up ens3f0 ### 3.设置默认路由 ip route add default via GATEWAY 例:ip route add …

python3ide手机安卓版下载,python3下载手机安卓版

大家好,给大家分享一下python3ide手机安卓版下载,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 大家好,给大家分享一下python3ide安卓版官网下载,很多人还不知道这一点。下面详细解释一下python编程代码…

C#编程-描述内存分配

描述内存分配 分配给变量的内存通过两种方式引用:值类型和引用类型。内置数据类型,诸如int、char和float都是值雷兴国。当您声明int变量时,编译器会分配一个内存块以保持该整数值。请思考以下语句: int Num 50;上述语句为保存值…

手机怎么边看视频边记笔记或备忘录?

在这个信息爆炸的时代,我们经常需要通过看培训视频、听网课来不断充实自己。但是,手机屏幕那么小,如何才能在做笔记的同时,又不错过视频的每一个细节呢? 以前,我总是为此头疼。一手拿着手机看视频&#xf…