文档章节

图像增强—限制对比度自适应直方图均衡化

o
 osc_fmg49rzg
发布于 2019/03/20 10:39
字数 1127
阅读 17
收藏 0

精选30+云产品,助力企业轻松上云!>>>

自适应直方图均衡化(Adaptive histgram equalization/AHE)

普通直方图均衡化使用从图像直方图中导出的相同变换来对所有像素进行变换。当整个图像的像素值分布相似时,这种方法很有效。然而,当图像中包含的区域明显比大多数图像亮或暗时,这些区域的对比度将不会得到足够的增强。自适应直方图均衡化(AHE)改进了这一点,通过转换每个像素的转换函数派生自一个邻域。它最初被开发用于飞机驾驶舱显示器。

ANE主要是基于分块处理的思想用来提高图像对比度的一种算法,其特点是通过极端图像的局部直方图,然后通过重新分布图像的亮度来改变图像对比度。主要用于获取图像更多的细节!普通的AHE倾向于在图像的近恒定区域过度放大对比度,因为这些区域的直方图高度集中。因此,AHE可能会导致噪声在接近恒定的区域被放大。

限制对比度自适应直方图均衡(Contrast Limited Adaptive histgram equalization/CLAHE)

普通的AHE倾向于在图像的近恒定区域过度放大对比度,因为这些区域的直方图高度集中。因此,AHE可能会导致噪声在接近恒定的区域被放大。对比度受限AHE (CLAHE)是自适应直方图均衡化的一种变体,它限制了对比度的放大,从而减少了噪声放大的问题。在网格中,在给定像素值附近的对比度放大由变换函数的斜率给出。这与邻域累积分布函数(CDF)的斜率成正比,因此与该像素值处的直方图值成正比。CLAHE通过在计算CDF之前将直方图裁剪到预定义值来限制放大。这限制了CDF的斜率,因此也限制了变换函数的斜率。直方图被裁剪的值,即所谓的剪切极限,取决于直方图的归一化,因此也取决于邻域的大小。公共值将产生的放大限制在3到4之间。最好不要丢弃直方图中超过剪辑限制的部分,而是在所有直方图箱中均匀地重新分配。

 

重新分配将再次推动一些箱子超过剪辑限制(图中区域为绿色阴影),从而产生一个有效的剪辑限制,该限制大于规定的限制,其确切值取决于图像。如果不希望出现这种情况,则可以递归地重复重新分配过程,直到多余部分可以忽略为止。

 

 自适应直方图均衡化的直接形式如上所示,无论有无对比度限制,都需要对图像中的每个像素计算不同的邻域直方图和变换函数。这使得该方法在计算上非常昂贵。插值可以在不影响结果质量的前提下显著提高效率。图像被分割成大小相同的矩形块,如下图的右侧所示。(8列8行64块是常用的选择。然后计算每个块的直方图、CDF和变换函数。转换函数适用于平铺中心像素,即图形左侧的黑色方块。所有其他像素都使用最接近中心像素的tile的四个转换函数进行转换,并分配插值值。对图像主体中的像素(蓝色阴影)进行双线性插值,对靠近边界的像素(绿色阴影)进行线性插值,对靠近角的像素(红色阴影)利用角块的变换函数进行变换。插值系数反映了像素在最近的瓦片中心像素之间的位置,因此当像素接近瓦片中心时,插值结果是连续的。

#include<opencv2\opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main() {
    Mat src, dst;
    src = imread("E:/win10/920.jpg");
    if (src.empty())
    {
        cout << "error" << endl;
        return -1;
    }
    cvtColor(src, src, CV_BGR2GRAY);
    imshow("input", src);


    //彩色图
    /*vector<Mat> bgr_src;
    split(src, bgr_src);

    Ptr<CLAHE> clahe = createCLAHE();
    
    Mat b_dst, g_dst, r_dst;

    vector<Mat> bgr_dst(3);
    clahe->apply(bgr_src[0], bgr_dst[0]);
    clahe->apply(bgr_src[1], bgr_dst[1]);
    clahe->apply(bgr_src[2], bgr_dst[2]);*/
    //merge(bgr_dst, dst);

    Ptr<CLAHE> clahe = createCLAHE();
    clahe->apply(src, dst);

    
    

    imshow("output", dst);

    waitKey(0);
    return 0;
}

 

 

 

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

土木转行Python的几个方向? - 知乎

零、背景 近一段时间有不少土木或兄弟专业的朋友加微信问我,自学Python一段时间后又出现了迷茫期,怎么破?不知道接下来走向哪里?下面,我把我知道的告诉你,至于Python之父是不是廖雪峰,...

osc_2ak6wwpl
16分钟前
0
0
如何选购便宜的SSL证书

我们在购物的时候经常会货比三家,而价格会占主导因素,有时候价格太高会让我们望而却步。而在选购SSL证书的时候也是同样的道理,市面上可供选择的SSL证书品牌和类型繁多,价格有高有低,那么...

安信证书
18分钟前
5
0
Spark SQL 中 Broadcast Join 一定比 Shuffle Join 快?那你就错了。

本资料来自 Workday 的软件开发工程师 Jianneng Li 在 Spark Summit North America 2020 的 《On Improving Broadcast Joins in Spark SQL》议题的分享。 文章目录 1 背景 2 TPC-H 测试 3 Br...

osc_k8v7r34l
18分钟前
13
0
空间直线与球面相交算法

目录 1. 原理推导 1.1. 直线公式 1.2. 求交 2. 具体实现 3. 参考 1. 原理推导 1.1. 直线公式 在严格的数学定义中,直线是无线延长,没有端点的线;射线是一端有端点,另外一段没有端点无线延...

osc_nfjwhlc1
19分钟前
15
0
七天用Go写个docker(第六天)

今天主要来实现一下 go-docker ps 的功能,也就是查看当前有哪些容器,简单说下思路,当我们启动一个容器时就为该容器创建一个文件夹用来保存该容器的一些信息,如果我们给容器指定了名字,那...

osc_zsaazovz
20分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部