- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《学习OpenCV》第7章直方图与匹配教程
第7章 直方图与匹配;在分析图像、物体和视频信息的过程中,我们常常想把眼中看到的对字用直方图(histogram)表示。直方图可以用来描述各种不同的事情,如物体的色彩分布、物体的边缘梯度模板[Freeman95],以及表示目标位置的当前假设(目标当前位置的假设?)的概率分布。图7-1显示了利用直方图进行快速姿态识别。从“上”,“右”,“左”,“停”和“OK”等手势中得到边缘梯度。然后设置一个摄像机,该摄像机观察人的各种手势以控制网络视频。在每帧中,从输入的视频中检;测感兴趣的色彩区域,然后计算这些感兴趣区域周围的边缘梯度方向,将得到的边缘梯度方向放到一个方向直方图相应的bin中,然后将该直方图与手势模板进行匹配,从而识别出各种手势。图7-1的垂直条显示不同手势的匹配程度。灰色的水平线为可接受阈值,表示对应某一手势模型胜出的垂直条。
直方图广泛??用于很多计算机视觉应用中。通过标记帧与帧之间显著的边缘和颜色的统计变化,直方图被用来检测视频中场景的变换。通过为每个兴趣点设置一个有相近特征的直方图所构成的“标签”,用以确定图像中的兴趣点。边缘、色彩、角等直方图构成了可以被传递给目标识别分类器的一个通用特征类型。色彩和边缘的直方图序列还可以用来识别网络视频是否被复制等。直方图是计算机视觉中最经典的工具之一。;简单地说,直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。bin中的值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度、方向、色彩或任何其他特征。无论如何,直方图获得的是数据分布的统计图。通常直方图的维数要低于原始数据。图7-2刻画了一个典型的情况。图中显示了一个二维分布的点集(左上),施加一个网格(右上)并且统计每一个网格单元的数据点,然后产生一个一;维直方图(右下)。由于原始数据点可以表征任何事情,直方图实际上是一个方便表示图像特征的手段。
表示连续分布的直方图通过隐式计算每个网格单元中的均值来实现前面的功能。这就会产生一个问题,如图7-3所示。如果网格太宽(左上),则参与计算平均值;的点太多,就会丧失分布的结构。如果网格太窄(右上),则没有足够的点来准确表示分布而且我们会得到小而尖锐的单元。
OpenCV有表征直方图的数据类型。该直方图数据结构能够以一维或者多维的方式表示直方图,并且包含所有可能跟踪的均匀或非均匀的bin中的数据。并且,如我们所期待的,它可以配属各种有用的函数,使得我们能够在直方图上容易地进行各种常见操作。;目录;直方图的基本数据结构;内部数据都被存储于CvMatND结构中。我们用下面的程序创建一个新的直方图:
CvHistogram* cvCreateHist(
int dims,
int* sizes,
int type,
float** ranges = NULL,
int uniform = 1
);
变量dims表示直方图包含的维数。sizes变量必须为整数数组,数组长度等于dims。数组中的每一个整数表示分配给对应维数的bin的个数。type既可以是CV_HIST_ARRAY,用来表示使用密集多维矩阵结构(如CvMatND)存储多维直方图,也可以是;CV_HIST_SPARSE,当数据以稀疏矩阵(CvSparseMat)方式存储时。变量rangs可以是两个形式中的任一种。对均匀直方图来说,rangs是浮点数对构成的数组,数组的个数等于维数。而对非均匀直方图来说,则用包含分割非均匀bin的数据所构成的数组来代替均匀直方图所使用的数据对。如果某维数有N个bin,那么这个子数组有N+1个元素。每个数组的值均起始于最低bin的底边,终结于最高bin的顶边。布尔类型变量uniform说明直方图是否有均匀的bin,因此也说明了rangs的值该如何解析;如果设置为非0值,则直方图是均匀的。也可以设置rangs为NULL,这时意味rangs是“未知的”(它们也可以在后面使用特殊函数cvSetHistBinRangs()来设置)。很明显,最好在使用直方图之前给rangs设置数值。
void cvSetHistBinRanges(; CvHistogram* hist,
float** ranges,
int uniform = 1
);
cvSetHistRanges()中的变量与cvCreateHist()中的相应变量完全一致。如果想重用直方图,可以对其进行清零操作(即设置所有bins为0),或者使用通常的释放函数释放直方图。
void cvClearHist(
CvHistogram* hist
);
void cvReleaseHist(
CvHistogram** hist
);
通常,这些释放函数通过一个指针被调用,该指针指向一个直方图的指针
文档评论(0)