OpenCV使用python实现限制对比度的自适应直方图均衡化

本文介绍了一种图像处理技术——限制对比度的自适应直方图均衡化。该方法通过设置对比度阈值,避免噪声放大,改善图像质量。文中详细解释了其工作原理,并提供了Python实现代码。

前面讲到的自适应直方图均衡化的实现方法首先是将图像划分成不重叠的区域块,让后对每个块分别进行直方图均衡化处理。如果在图像有噪声的情况下这样处理,在每个被分割的小区域块中的噪声就会被放大。

为了避免噪声对图像均衡化的影响,这里使用了限制对比度的自适应直方图均衡化来处理图像的直方图均衡化。

限制对比度的直方图均衡化的处理方式是先为直方图设置一个阈值,该阈值为限制对比度值,超过该阈值的值会被裁剪,然后裁剪的部分会均匀的分布到其他值上,这样就重构了直方图,接下来就可以用重构后的直方图来进行接下来的均衡化操作了。

下面是限制对比度的操作示例图,我这边用excel图来进行展示:

05f184fd2c2e846726b544de139c635f19f75fa3

1529d43bc9f638a00c9411bb93bba448f3fb94b8

阈值为40时,超出阈值的为50这个直方图区域,将多出的50-40=10的部分均匀分布到每个区域上,平均每个区域增加的值为2

注意:在OpenCV手册中没有提及到限制对比度的自适应直方图均衡化函数。

具体的python实现限制对比度的自适应直方图均衡化代码如下:

17b1b4e5b7a254bf6caecc51d1573a5402b4e982

其中默认设置的“限制对比度”为40,块的大小为8X8

程序运行后的效果如下图所示:

bd29e1a7c771be14cc4120d10bc00fbae5b9274c

本文摘自异步社区,作者:黑夜探路人,作品:《OpenCV使用python实现限制对比度的自适应直方图均衡化》,未经授权,禁止转载。


推荐阅读

2018年5月新书书单(文末福利)

2018年4月新书书单

异步图书最全Python书单

一份程序员必备的算法书单

第一本Python神经网络编程图书


1e3b4e73269763cdf9de9f0bfbd3261eb7f437d5

0cb5a27fa6fbbf9cb89ce913122f899fd46b8c72
长按二维码,可以关注我们哟

每天与你分享IT好文。


异步图书”后台回复“关注”,即可免费获得2000门在线视频课程

点击查看原文,阅读更多内容

Python实现限制对比度自适应直方图均衡化(CLAHE)可以借助OpenCV库完成。CLAHE是一种图像增强技术,它通过局部区域的直方图均衡化来改善图像的对比度,同时限制对比度以避免过度放大噪声。以下是一个完整的实现示例,结合了多段引用内容中的代码和描述。 ### 实现步骤 1. 将图像从BGR颜色空间转换为Lab颜色空间。 2. 分离Lab颜色空间中的L(亮度)、A和B通道。 3. 创建CLAHE对象,并对L通道应用CLAHE算法。 4. 合并增强后的L通道与原始A和B通道。 5. 将结果转换回BGR颜色空间以进行显示。 ### Python实现代码 ```python import cv2 def apply_clahe(image, clip_limit=2.0, tile_grid_size=(8, 8)): # 转换为Lab颜色空间 lab = cv2.cvtColor(image, cv2.COLOR_BGR2Lab) # 分割Lab图像的L、A、B通道 l, a, b = cv2.split(lab) # 创建CLAHE对象 clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size) # 应用CLAHE算法到L通道 l_clahe = clahe.apply(l) # 合并增强后的L通道与原始A和B通道 lab_clahe = cv2.merge((l_clahe, a, b)) # 转换回BGR颜色空间 enhanced_image = cv2.cvtColor(lab_clahe, cv2.COLOR_Lab2BGR) return enhanced_image # 读取输入图像 image = cv2.imread('input_image.jpg') # 应用CLAHE算法进行图像增强 enhanced_image = apply_clahe(image) # 显示原始图像和增强后的图像 cv2.imshow('Original Image', image) cv2.imshow('Enhanced Image', enhanced_image) # 等待按键按下并关闭窗口 cv2.waitKey(0) cv2.destroyAllWindows() ``` ### 参数说明 - `clip_limit`:控制对比度限制的阈值,数值越大,对比度增强越明显。默认值为2.0[^1]。 - `tile_grid_size`:定义局部区域的大小(网格大小),通常设置为`(8, 8)`或`(16, 16)`。较小的网格大小会导致更强的局部对比度增强[^2]。 ### 注意事项 - 确保输入图像的路径正确,否则程序将无法读取图像。 - 可以根据实际需求调整`clip_limit`和`tile_grid_size`参数来优化增强效果。 - 如果图像中存在明显的边界问题,可以通过调整插值方法或增加`clip_limit`值来缓解[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值