OpenCV学习 day12 直方图

2020-05-28 17:19:53

直方图Histogram

图像直方图,是指对整个图像在灰度范围内的像素值(0~255)根据不同的范围统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。

 

 

上述直方图概念是基于图像像素值,其实对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见的。
直方图最常见的几个属性:
- dims 表示维度,对灰度图像来说只有一个通道值dims=1
- bins 表示在维度中子区域大小划分,bins=256,划分为256个级别
- range 表示值得范围,灰度值范围为[0~255]之间

 

 

直方图均衡化

拉伸灰度值范围,提高图像对比度,通过remap从一个分布映射到另一个分布上

 

 API

equalizeHist(
InputArray src,//输入图像,必须是8-bit的单通道图像
OutputArray dst// 输出结果
)

代码演示

int equalize_Hist(Mat src) {
    
    Mat dst;
    
    cvtColor(src, src, COLOR_BGR2GRAY);
    equalizeHist(src, dst);

    imshow("equalize histogram image", dst);

    waitKey(0);
    return 0;
}

 

直方图计算

API

split(// 把多通道图像分为多个单通道图像
const Mat &src, //输入图像
Mat* mvbegin)// 输出的单通道图像数组

calcHist(
 const Mat* images,//输入图像指针
int images,// 图像数目
const int* channels,// 通道数
InputArray mask,// 输入mask,可选,不用
OutputArray hist,//输出的直方图数据
int dims,// 维数
const int* histsize,// 直方图级数
const float* ranges,// 值域范围
bool uniform,// true by default
bool accumulate// false by defaut 多通道true
)

 

 

直方图比较方法

 

0——HISTCMP_CORREL  相关性   越接近1表示越像

 

1——HISTCMP_CHISQR   卡方  越接近0表示越像 

 

2——HISTCMP_INTERSECT  交集法  数值越大表示越像

 

3——HISTCMP_BHATTACHARYYA(HISTCMP_HELLINGER     = HISTCMP_BHATTACHARYYA) 常态分布比对的BHATTACHARYYA距离法 越接近0表示越像

 

4——HISTCMP_CHISQR_ALT

 

5——HISTCMP_KL_DIV

 

 

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

Opencv提供的比较方法有四种:

  • Correlation 相关性比较

 

 

 

  • Chi-Square 卡方比较

 

 

 

  • Intersection 十字交叉性

 

 

 

  • Bhattacharyya distance 巴氏距离

 

posted @ 2020-05-28 21:37  xyfun72  阅读(184)  评论(0)    收藏  举报