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

clahe算法基本实现

一、背景介绍

        图像算法处理中,经常需要遇到图像对比度调整的情况,CLAHE(Contrast Limited Adaptive Histogram Equalization)则是一种基于直方图,使用非常普遍的图像对比度调整算法。

        关于这个算法的介绍有很多,基本原理这些,我就不做过多讲解了,可以参考如下这些文章:

刘斯宁:Image Enhancement - CLAHE 基本原理讲解

CLAHE的实现和研究-阿里云开发者社区 实现代码讲解

二、实现流程

        1、输入图像进行图像分块,块分得越细,图像对比度调整效果相对越好,但副作用也越明显。

        2、统计每个块的图像直方图信息,并生成均衡化直方图H。

        3、根据设置的限制参数强度,对直方图信息进行重新分配:

                a、设置一个阈值T,将均衡化后直方图,从H[0]到H[255]上依此遍历,把大于阈值T的都全部减去,并统计一共减去了多少像素sub_pixel。

                b、计算mean_pixel = sub_pixel / 256,然后将H[0]到H[255]上,都全部加上mean_pixel的值。

                比如T=3000, H[0]=500,H[128]=20000,计算后mean_pixel=346。

        那个根据调整,第一步时候H[0]保持不变,H[128]被强行截断为3000;第二步时候,H[0]=846, H[128]=3346,通过这种方式将均衡化后直方图进行了重新分配,避免了直方图部分区域聚集的像素值太多,导致最终均衡化后图像对比度特别大和亮度变化特别严重的情况。

        调整前和调整后直方图对比,可以参考如下图所示:

 

        因此容易理解到:阈值T的设置对算法效果影响较大,当T足够小的时候,算法结果和原图一模一样,当T足够大的时候,算法结果和直方图均衡化一模一样。

三、代码实现

1、效果演示

        左边为输入图,右边为结果图像:

 

        从上面图像上也可以看到,Clahe算法也存在很多明显缺陷:

                1、局域块效应(局域块异常亮或者黑,即便使用了插值,依然和周围过度不太自然)

                2、结果图像噪声放大。

                3、结果图像相对于输入,整体亮度出现明显变化等。

        为了改善这些缺陷,也引申出了很多相关的优化算法,比如局域块选择自适应的的阈值T,局域直方图和全局直方图融合,局域直方图和邻域直方图融合等

2、复现代码

        文章:CLAHE的实现和研究-阿里云开发者社区 提供了完整的代码实现的,我这里在他基础上做了点稍微整理,方便归档笔记:ImageQualityEnhancement/ltm/clahe at master · yulinghan/ImageQualityEnhancement · GitHub

http://www.xdnf.cn/news/4914.html

相关文章:

  • Linux 环境通过 tar 多线程压缩和解压
  • 护城河理论——AI与思维模型【100】
  • 5级李克特量表:量化态度的黄金标准
  • 生信服务器如何安装cellranger|生信服务器安装软件|单细胞测序软件安装
  • ndarray数组掩码操作,True和False获取数据
  • vue3: pdf.js5.2.133 using typescript
  • Windows 10 无法启动或黑屏的修复指南(适用于更新失败或磁盘故障)
  • javascript 补充的一些知识点
  • HarmonyOS学习——ArkTS与TS的关系
  • ArcScroll: 弧形滑动控件
  • 初等数论--欧拉函数积性的证明
  • Uniapp Android/IOS 获取手机通讯录
  • 【Linux】自定义shell的编写
  • vllm的技术核心、安装流程和使用教程,以及注意事项
  • 自主独立思考,帮我创造新的方法:vue3 script setup语法中,组件传递值我觉得有些复杂,帮我创造一种简单的方法容易写的方法?
  • 使用Java实现HTTP协议服务:从自定义服务器到内置工具
  • 数据加密方式(对称加密/非对称加密 /数字签名/证书)
  • vue项目的创建
  • 字符串---Spring字符串基本处理
  • 耳机插进电脑只有一边有声音怎么办 解决方法分享
  • 第十六届蓝桥杯B组第二题
  • 什么是分布式光伏系统?屋顶分布式光伏如何并网?
  • 高质量老年生活:从主动健康管理到预防医学的社会价值
  • 在 Spring Boot 中选择合适的 HTTP 客户端
  • 2025年社交APP安全防御指南:抵御DDoS与CC攻击的实战策略
  • NLP基础
  • 支付宝 SEO 优化:提升小程序曝光与流量的完整指南
  • Kotlin中Lambda表达式和匿名函数的区别
  • RabbitMQ消息的重复消费问题如何解决?
  • jenkins 启动报错