这周学习直方图,看了许多资料,才搞明白其中的一些道道,如今结合下图给你们分享下。数组
1、bin的含义ide
直方图中bin的含义:计算颜色直方图须要将颜色空间划分为若干小的颜色区间,即直方图的bin,经过计算颜色在每一个小区间内德像素获得颜色直方图,bin越多,直方图对颜色的分辨率越强,但增长了计算机的负担。即(上图所分10个竖条区域,每一个竖条区域称为一个bin)函数
(2)简单来讲直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。bin中的数值就是从数据中计算出的特征的统计量,这些数据能够是诸如梯度、方向、色彩或任何其余特征。不管如何,直方图得到的是数据分布的统计图。直方图其实是一个方便表示图像特征的手段。学习
2、cvCreateHist()建立一个直方图函数理解spa
dim:表示几维空间,即通常彩×××像是3通道的,dim=3,故灰度图像为1通道,则dim=1。dim=2,说明只计算彩色通道中的其中两个通道。code
sizes:表示的是bin的个数,上图有10个bin,则sizes=10。orm
type:CV_HIST_ARRAY,CV_HIST_SPACRSE虚疏矩阵:若是在矩阵中,多数的元素为0,则称矩阵为虚疏矩阵。blog
ranges:上图最右边的数字100,就是说ranges范围为0~100。若是是灰度图像通常设为0~255,sizes=256,则每一个 bin就表示一个灰度级的统计。在函数中ranges是bin范围的数组,即bin范围为一个数组,ranges为一个数组的数组。图片
uniform:决定ranges,uniform=0是均匀直方图,非0时不均匀直方图。it
3、直方图归一化
归一化处理并无改变图像的对比度
归一化处理很简单,假设原图像是8位灰度图像,那么读入的像素矩阵最大值为256,最小值为1以灰度图像来讲,就是一个每一个bin中的像素数分别除以整幅图像总的像素数,得出一个在[0,1]区间数,即几率数。
四、直方图处理流程:首先
一、首先建立一个直方图
CvHistogram* cvCreateHist(
int dims, //直方图维数
int* sizes,//直翻图维数尺寸
int type, //直方图的表示格式
float** ranges=NULL, //图中方块范围的数组
int uniform=1 //归一化标识
);
二、计算图像直方图cvCalcHist();
三、归一化直方图cvNormalizeHist();
四、经过访问直方图元素bin的值(归一化后已变为在【0~1】区间数)在一张图片上显示出直方图来。注意最终呈现的直方图是咱们经过矩形自我绘制的,不是自动有函数可生成的。
通常默认bin的最大值为图像的最高高度。