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

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.dtcms.com/a/180485.html

相关文章:

  • websocketd 10秒教程
  • 图上思维:基于知识图的大型语言模型的深层可靠推理
  • Excel提取单元格特定符号左右两边内容
  • OPENSSL-1.1.1的使用及注意事项
  • (pnpm)引入 其他依赖失败,例如‘@element-plus/icons-vue‘失败
  • 矩阵短剧系统:如何用1个后台管理100+小程序?深度解析多端绑定技术
  • vue搭建+element引入
  • 2025数维杯数学建模A题完整论文模型代码:空中芭蕾
  • 霸王茶姬微信小程序自动化签到系统完整实现解析
  • 使用Kotlin Flow实现Android应用的响应式编程
  • 小刚说C语言刷题—1004阶乘问题
  • LeetCode 1722. 执行交换操作后的最小汉明距离 题解
  • OpenCV 中用于支持 华为昇腾(Ascend)AI 芯片后端 的模块CANN
  • uni-app,小程序中的addPhoneContact,保存联系人到手机通讯录
  • mac 电脑如何打开剪切板
  • B站pwn教程笔记-9
  • 什么是信号完整性?
  • O2OA(翱途)开发平台系统安全-用户登录IP限制
  • 【Qt】之【Bug】点击按钮(ui->pushButton)触发非本类设置的槽函数
  • temu采购自养号全流程解析:从账号搭建到安全下单的技术闭环
  • 【5分钟学Docker】Docker快速使用
  • 计算机网络:深度解析基于链路状态的内部网关协议IS-IS
  • springmvc实现文件上传
  • 为什么消息队列系统不像数据库系统那样可以配置读写分离?
  • 【css】css统一设置变量
  • 03 mysql 连接
  • Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析
  • 掌握单元测试:提升软件质量的关键步骤
  • MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解
  • idea spring boot 打包成可执行的 JAR包