对比度受限的自适应直方图均衡化(CLAHE)
2015-11-02 14:10
337 查看
直方图均衡化(HE)是一种很常用的直方图类方法,基本思想是通过图像的灰度分布直方图确定一条映射曲线,用来对图像进行灰度变换,以达到提高图像 对比度的目的。该映射曲线其实就是图像的累计分布直方图(CDF)(严格来说是呈正比例关系)。然而HE是对图像全局进行调整的方法,不能有效地提高局部 对比度,而且某些场合效果会非常差。如:
View Code
注意的是,上述循环需要(TileX+1)*(TileY+1)次,而不是TileX*TileY次。,原因很简单,以X方向为例,两侧边界处的半宽子块(灰色区)也各需要处理一次,如下图:
通过双线性插值可以基本消除块状效应:
对
于彩色图像,三通处理分开处理会导致严重的偏色,故我们可以将其进行颜色空间转换(如RGB转为HSV),然后仅对亮度分量处理,再反变换回RGB空间。
不过网上有高手将R、G、B统一处理[2](也就相当于把一个像素点拆成三个像素点),这样得到的效果也不错,而且省去了颜色空间转换的时间,我们这里也
仿照他来吧:
另外,CLAHE对雾天图像处理效果也不错:
至于编程,我基本就是翻译adaphisteq.m,另外还有一些参考资源:CLAHE代码(MATLAB)
这里给出编译好的文件,有兴趣的朋友可以下载看看:ImageProcess(CLAHE)
参考:
[1]https://en.wikipedia.org/wiki/Adaptive_histogram_equalization
[2]/content/3795664.html
for (Y = 0; Y <= TileY; Y++) //TileY为Y方向网格数 { if (Y == 0) { SubY = TileYDim >> 1; YU = 0; YB = 0; } else if (Y == TileY) { SubY = TileYDim >> 1; YU = TileY-1; YB = YU; } else { SubY = TileYDim; YU = Y - 1; YB = Y; } for (X = 0; X <= TileX; X++) //TileX为X方向网格数 { if (X == 0) { SubX = TileXDim >> 1; XL = 0; XR = 0; } else if (X == TileX) { SubX = TileXDim >> 1; XL = TileX - 1; XR = XL; } else { SubX = TileXDim; XL = X - 1; XR = X; } MapLU = &pMapArray[numBins * (YU * TileX + XL)];//左上角映射函数 MapRU = &pMapArray[numBins * (YU * TileX + XR)];//右上角映射函数 MapLB = &pMapArray[numBins * (YB * TileX + XL)];//左下角映射函数 MapRB = &pMapArray[numBins * (YB * TileX + XR)];//右下角映射函数 Interpolate(pImPointer,Stride,Channel,MapLU,MapRU,MapLB,MapRB,SubX,SubY,aLUT);//插值 pImPointer += SubX; } pImPointer+=(SubY-1)*Stride; }
View Code
注意的是,上述循环需要(TileX+1)*(TileY+1)次,而不是TileX*TileY次。,原因很简单,以X方向为例,两侧边界处的半宽子块(灰色区)也各需要处理一次,如下图:
通过双线性插值可以基本消除块状效应:
对
于彩色图像,三通处理分开处理会导致严重的偏色,故我们可以将其进行颜色空间转换(如RGB转为HSV),然后仅对亮度分量处理,再反变换回RGB空间。
不过网上有高手将R、G、B统一处理[2](也就相当于把一个像素点拆成三个像素点),这样得到的效果也不错,而且省去了颜色空间转换的时间,我们这里也
仿照他来吧:
另外,CLAHE对雾天图像处理效果也不错:
至于编程,我基本就是翻译adaphisteq.m,另外还有一些参考资源:CLAHE代码(MATLAB)
这里给出编译好的文件,有兴趣的朋友可以下载看看:ImageProcess(CLAHE)
参考:
[1]https://en.wikipedia.org/wiki/Adaptive_histogram_equalization
[2]/content/3795664.html
相关文章推荐
- 微服务分布式事务的一些思考
- Qt使用自带的windeployqt 查找生成exe 必需的库文件
- CGridCtrl显示图片
- EXTJS常用设置(持续更新)
- 将txt转换成pdf格式的转换方法分享
- 【Cocos2d-x】脚本生成资源头文件
- 时间函数
- 易宝支付银行接口,各参数
- 触发器 'SA.U_USER_INFO_TRG' 无效且未通过重新验证--Oracle序列
- svn删除目录后提交显示Item 'XXXX' is out of date解决方法
- iOS 自定义加载等待动画
- 数据库死锁
- LeetCode---Path Sum II
- 可变参数列表(2)
- Android JS 与本地代码交互---JSBridge使用注意事项
- 单调递增子序列(二)
- iOS7隐藏状态栏 status Bar
- 学习网址记录
- CTP开发——下单
- 【Feature To Polygon】行政边界地图缺少某个面要素的生成方法