OpenCV直方图均衡化和直方图比较原理及反向投影原理

1.直方图均衡化

直方图均衡就是让照片的灰度分布拉宽,然后图像对比度变大则变的清晰。方图均衡化方法的基本思想是对在图像中像素个数多的灰度级进行展宽,而对像素个数少的灰度级进行缩减。从而达到清晰图像的目的。

 F_x(x) 就相当于已知的第二点,即原始图片的像素的概率分布,F_Y(y)就相当于已知的第三点.即转换后的图片的像素要均匀分布.现在要求的是就相当于已知的第三点.即转换后的图片的像素要均匀分布.现在要求的是 y = T(x)$的这个T是什么样的.这样就可以把原图的像素x,转换成均衡化后的图片的像素y。

用变量 r表示待处理图像的灰度。假设 r 的取值范围为 [0,L−1] ,且 r=0表示黑色,r=L−1 表示白色。在 rr满足这些条件的情况下,我们注意里几种在变换形式:

满足条件:

(a) T(r) 在区间 0≤r≤L−1上为严格单调递增函数。

(b) 当 0≤r≤L−1 时,0≤T(r)≤L−1 。

一幅图像的灰度值可以看成是区间 [0,L−1]内的随机变量。随机变量的基本描绘是其概率密度函数令 pr(r) 和 ps(s)分别表示变量 r和 s 的概率密度函数,其中 p 的下标用于指示 pr 和 ps 是不同的函数。有基本概率论得到的一个基本结果是,如果 pr(r) 和T(r) 已知,且在感兴趣的值域上T(r) 是连续且可微的,则变换(映射)后的变量 s 的概率密度函数如下:

这样,输出灰度变量s的概率密度函数是由变换函数 T(r)决定的。而在图像处理中特别重要的也比较常用的变化如下:

其中,w 是假积分变量。公式右边是随机变量 r 的累计分布函数。因为概率密度函数总为正,一个函数的积分是该函数下方的面积。则上式子则满足(a)条件,当 r=L−1 时,则积分值等于1,所以 s 的最大值是 L−1,所以上式满足条件(b)。

由 ps(s) 可知,这是一个均匀概率密度函数。简而言之,(2)中的变换将得到一个随机变量 s ,该随机变量有一个均匀的概率密度函数表征。而 ps(s) 始终是均匀的,它于 pr(r) 的形式无关。对于离散值,我们处理其概率(直方图值)与求和来替代处理概率密度函数与积分。则一幅数字图像中灰度级 rk 出现的概率近似为:

其中,MN是图像中像素的总数,nk 是灰度为 rk 的像素个数, L 是图像中可能的灰度级的数量(8bit图像时256)。与 rk 相对的 pr(rk)图形通常称为直方图。离散形式为:

关于概率密度和概率分布函数要是忘记了就自己找书看吧!!!

2.直方图比较

对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进而比较图像本身的相似程度。Opencv提供的比较方法有四种:

1)直方图比较方法-相关性计算(CV_COMP_CORREL)

计算结果范围为 -1到1 -1很不相关,1完全一样

2)直方图比较方法-卡方计算(CV_COMP_CHISQR)

计算结果越接近0,两个直方图越相似

3)直方图比较方法-十字计算(CV_COMP_INTERSECT)

计算公式为取两个直方图每个相同位置的值的最小值,然后求和,这个比较方式不是很好,不建议使用

4)直方图比较方法-巴氏距离计算(CV_COMP_BHATTACHARYYA )

比较结果是很准的,计算结果范围为 0-1 ,0表示两个直方图非常相关,1最不相似

3.反向投影

假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:
(1)从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;
(2)生成临时图像的直方图;
(3)用临时图像的直方图和模板图像的直方图对比,对比结果记为c;
(4)直方图对比结果c,就是结果图像(0,0)处的像素值;
(5)切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;
(6)重复(1)~(5)步直到输入图像的右下角。

  void cvCalcBackProjectPatch( IplImage** image,   /*输入图像:是一个单通道图像数组,而非实际图像*/
                                                  CvArr*        dst,         /*输出结果:是一个单通道32位浮点图像,它的宽度为W-w+1,高度为H-h+1,这里的W和H是输入图像的宽度和高度,w和h是模板图像的宽度和高度*/
                                                 CvSize patch_size,  /*模板图像的大小:宽度和高度*/
                                                 CvHistogram* hist,  /*模板图像的直方图:直方图的维数和输入图像的个数相同,并且次序要一致;例如:输入图像包含色调和饱和度,那么直方图的第0维是色调,第1维是饱和度*/
                                                 int               method,         /*对比方式:跟直方图对比中的方式类似,可以是:CORREL(相关)、CHISQR(卡方)、INTERSECT(相交)、BHATTACHARYYA*/
                                                float             factor        /*归一化因子,一般都设置成1,否则很可能会出错;这个参数的实际类型是double,而非float*/
    );

还有最需要注意的地方:这个函数的执行效率非常的低,在使用之前尤其需要注意图像的大小,直方图的维数,对比方式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值