直方图匹配

直方图匹配,又称直方图规定化,是通过特定分布的直方图让图像重新匹配,以达到类似色温和对比度。本文介绍了直方图匹配的原理,包括均衡化和逆均衡化过程,并提供了OpenCV实现灰度图和彩色图直方图匹配的示例,展示了匹配前后直方图的对比变化。

定义

直方图匹配也叫直方图规定化(Histogram Matching/Normalization)
通俗的理解:相比于均衡化,它是用原图自带的灰度信息进行重新分布,可以说原图确定了之后均衡化也就定了。但是在有些场合,用均衡化达不到想要的效果,需要使用某种特定分布的直方图,让新生成的图按照指定直方图的分布规律进行重新匹配,使两幅图具有类似的色温或者对比度特征,这就叫做直方图匹配。
实现原理
1、把原图和匹配图都均衡化,并得到匹配图逆均衡化的对应关系。
2、由于都是均衡化,可以理解为相等,所以把原图均衡化后的点,按照匹配图的逆均衡化对应关系,得到结果图。
如果用T(r)G(z)分别表示原图和匹配图的均衡化变换函数。那么结果可以表示为:
z=G1[T(r)]

代码实现

OpenCV库中也有相关的函数来实现直方图统计和均衡化等。
这里为了明确的验证规定化的具体实现原理,笔者使用最笨的方法来实现。

灰度图的直方图匹配
#include <cv.h>
#include <highgui.h>

using namespace cv;

// show histogram of grey image with sticks or continuous curve
void myShowHist(int *psrccnt,string winname,int style=0, int rows=400,int cols=512)
{
    Mat hist(rows,cols,CV_8UC3,Scalar(188,188,188));

    int maxcnt=psrccnt[0];
    for(int i=0; i<=255; i++){
        if(psrccnt[i]>maxcnt) maxcnt=psrccnt[i];
    }

    int lineType = 8;
    if(style==0) { //sticks
        int thickness = 1;
        for(int i=0; i<=255; i++){
            if(psrccnt[i]!=0){
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值