Harris角点检测算法简要讲义
- 格式:pdf
- 大小:1.38 MB
- 文档页数:10
harris方法Harris方法是一种计算机视觉中常用的角点检测算法,它可以用于图像特征提取和图像匹配等任务。
该方法由Chris Harris和Mike Stephens于1988年提出,被广泛应用于计算机视觉领域。
Harris方法的核心思想是通过计算图像中每个像素点的灰度值变化来判断其是否为角点。
角点是图像中灰度值变化较大的区域,而平滑区域和边缘区域的灰度值变化较小。
因此,通过检测灰度值变化较大的像素点,我们可以找到图像中的角点。
Harris方法的计算过程如下:首先,我们需要对图像进行灰度化处理,将彩色图像转换为灰度图像。
然后,对每个像素点计算其相邻像素的灰度值变化,通常使用Sobel算子或Scharr算子来计算像素点的梯度。
接着,利用梯度计算出每个像素点的角点响应函数R,该函数用于度量像素点的角点程度。
角点响应函数的计算公式如下:R = det(M) - k * (trace(M))^2其中,det(M)表示M的行列式,trace(M)表示M的迹,k是一个经验参数,用于调节角点响应函数的灵敏度。
计算完所有像素点的角点响应函数后,我们需要对其进行非极大值抑制,以保留具有最大角点响应值的像素点。
非极大值抑制的过程是,对每个像素点,比较其角点响应值与其邻域像素点的角点响应值,如果大于所有邻域像素点的角点响应值,则保留该像素点作为角点。
Harris方法的优点是简单易实现,并且对图像的尺度和旋转变化具有一定的不变性。
此外,它还可以用于图像配准、目标跟踪等应用中。
然而,Harris方法也存在一些局限性。
首先,对于存在噪声的图像,角点的检测可能会受到干扰。
其次,Harris方法对于具有纹理模式的区域也容易将其误判为角点。
此外,Harris方法在存在图像尺度变化较大的情况下,检测效果可能会受到影响。
为了克服Harris方法的局限性,后续的研究提出了许多改进的角点检测算法,如SIFT、SURF和FAST等。
这些算法在角点检测的灵敏度、速度和鲁棒性等方面都有所提升,广泛应用于计算机视觉和图像处理领域。
计算视觉——Harris⾓点检测⽬录⼀、Harris ⾓点检测1.1 Harris ⾓点检测原理1.2⾓点检测算法⼆、基于Harris⾓点检测对不同类型图像做出的对⽐实验2.1 平坦图像的Harris⾓点检测实验结果2.2 边缘丰富图像的Harris⾓点检测实验结果2.3⾓点丰富图像的Harris⾓点检测实验结果三、结论与总结⼀.、Harris ⾓点检测1.1 Harris ⾓点检测原理Harris⾓点检测算法是最简单的⾓点检测⽅法之⼀。
它的基本思想是使⽤⼀个固定窗⼝在图像上进⾏任意⽅向上的滑动,⽐较滑动前与滑动后两种情况,窗⼝中的像素灰度变化程度,如果存在任意⽅向上的滑动,都有着较⼤灰度变化,那么我们可以认为该窗⼝中存在⾓点。
⽤数学⽅法来刻画⾓点特征:公式解释:>[u,v]是窗⼝的偏移量>(x,y)是窗⼝内所对应的像素坐标位置,窗⼝有多⼤,就有多少个位置>w(x,y)是窗⼝函数,最简单情形就是窗⼝内的所有像素所对应的w权重系数均为1。
但有时候,我们会将w(x,y)函数设定为以窗⼝中⼼为原点的⼆元正态分布。
如果窗⼝中⼼点是⾓点时,移动前与移动后,该点的灰度变化应该最为剧烈,所以该点权重系数可以设定⼤些,表⽰窗⼝移动时,该点在灰度变化贡献较⼤;⽽离窗⼝中⼼(⾓点)较远的点,这些点的灰度变化⼏近平缓,这些点的权重系数,可以设定⼩点,以⽰该点对灰度变化贡献较⼩,那么我们⾃然想到使⽤⼆元⾼斯函数来表⽰窗⼝函数,这⾥仅是个⼈理解,⼤家可以参考下。
所以通常窗⼝函数有如下两种形式:根据上述表达式,当窗⼝处在平坦区域上滑动,可以想象的到,灰度不会发⽣变化,那么E(u,v) = 0;如果窗⼝处在⽐纹理⽐较丰富的区域上滑动,那么灰度变化会很⼤。
算法最终思想就是计算灰度发⽣较⼤变化时所对应的位置,当然这个较⼤是指针任意⽅向上的滑动,并⾮单指某个⽅向。
1.2⾓点检测算法⾓点检测算法可归纳为3类:基于灰度图像的⾓点检测、基于⼆值图像的⾓点检测、基于轮廓曲线的⾓点检测。
特征匹配-Harris⾓点检测⼀、harris算法简介1.⾓点概述⾓点是图像很重要的特征,对图像图形的理解和分析有很重要的作⽤。
⾓点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很⾼,有效地提⾼了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。
从图像分析的⾓度来定义⾓点可以有以下两种定义:⾓点可以是两个边缘的⾓点;⾓点是邻域内具有两个主⽅向的特征点;前者往往需要对图像边缘进⾏编码,这在很⼤程度上依赖于图像的分割与边缘提取,具有相当⼤的难度和计算量,且⼀旦待检测⽬标局部发⽣变化,很可能导致操作的失败。
基于图像灰度的⽅法通过计算点的曲率及梯度来检测⾓点,避免了第⼀类⽅法存在的缺陷,此类⽅法主要有Moravec算⼦、Forstner算⼦、Harris算⼦、SUSAN算⼦等。
本⽂主要介绍的Harris⾓点检测的算法原理。
2.Harris⾓点检测基本原理⼈眼对⾓点的识别通常是在⼀个局部的⼩区域或⼩窗⼝完成的。
如果在各个⽅向上移动这个特征的⼩窗⼝,窗⼝内区域的灰度发⽣了较⼤的变化,那么就认为在窗⼝内遇到了⾓点。
如果这个特定的窗⼝在图像各个⽅向上移动时,窗⼝内图像的灰度没有发⽣变化,那么窗⼝内就不存在⾓点;如果窗⼝在某⼀个⽅向移动时,窗⼝内图像的灰度发⽣了较⼤的变化,⽽在另⼀些⽅向上没有发⽣变化,那么,窗⼝内的图像可能就是⼀条直线的线段。
如下图:3、特征匹配流程3.1、根据准则,提取图像中的特征点3.2、提取特征点周围的图像块,构造特征描述符3.3、通过特征描述符对⽐,实现特征匹配⼆、Harris⾓点检测声明:为了更好地对 Harris⾓点检测算法进⾏分析,本次实验⼀共收集了纹理平坦、垂直边缘多、垂直边缘多的三个不同的场景,每个场景各收集了五幅的图⽚。
然后通过每个场景中正⾯、侧⾯、旋转、远近、光照五个不同的⽅⾯进⾏对⽐试验。
2.1、纹理平坦的场景(以书本为例)2.1.1、正⾯图及检测结果2.1.2、侧⾯图及检测结果2.1.3、旋转图及检测结果2.1.4 、远距离图及检测结果2.1.5 、光照图及检测结果实验结果分析与总结:Harris⾓点检测算⼦具有旋转不变性。
Harris⾓点检测原理详解关于⾓点的应⽤在图像处理上⽐较⼴泛,如图像匹配(FPM特征点匹配)、相机标定等。
⽹上也有很多博客对Harris⾓点检测原理进⾏描述,但基本上只是描述了算法流程,⽽其中相关细节并未作出解释,这⾥我想对有些地⽅做出补充说明,正所谓知其然知其所以然,如有不对,还望指正。
关于⾓点的应⽤在图像处理上⽐较⼴泛,如图像匹配(FPM特征点匹配)、相机标定等。
⽹上也有很多博客对Harris⾓点检测原理进⾏描述,但基本上只是描述了算法流程,⽽其中相关细节并未作出解释,这⾥我想对有些地⽅做出补充说明,正所谓知其然知其所以然,如有不对,还望指正。
1. 何为⾓点?下⾯有两幅不同视⾓的图像,通过找出对应的⾓点进⾏匹配。
再看下图所⽰,放⼤图像的两处⾓点区域:我们可以直观的概括下⾓点所具有的特征:>轮廓之间的交点;>对于同⼀场景,即使视⾓发⽣变化,通常具备稳定性质的特征;>该点附近区域的像素点⽆论在梯度⽅向上还是其梯度幅值上有着较⼤变化;2. ⾓点检测算法基本思想是什么?算法基本思想是使⽤⼀个固定窗⼝在图像上进⾏任意⽅向上的滑动,⽐较滑动前与滑动后两种情况,窗⼝中的像素灰度变化程度,如果存在任意⽅向上的滑动,都有着较⼤灰度变化,那么我们可以认为该窗⼝中存在⾓点。
3.如何⽤数学⽅法去刻画⾓点特征?当窗⼝发⽣[u,v]移动时,那么滑动前与滑动后对应的窗⼝中的像素点灰度变化描述如下:公式解释:>[u,v]是窗⼝的偏移量>(x,y)是窗⼝内所对应的像素坐标位置,窗⼝有多⼤,就有多少个位置>w(x,y)是窗⼝函数,最简单情形就是窗⼝内的所有像素所对应的w权重系数均为1。
但有时候,我们会将w(x,y)函数设定为以窗⼝中⼼为原点的⼆元正态分布。
如果窗⼝中⼼点是⾓点时,移动前与移动后,该点的灰度变化应该最为剧烈,所以该点权重系数可以设定⼤些,表⽰窗⼝移动时,该点在灰度变化贡献较⼤;⽽离窗⼝中⼼(⾓点)较远的点,这些点的灰度变化⼏近平缓,这些点的权重系数,可以设定⼩点,以⽰该点对灰度变化贡献较⼩,那么我们⾃然想到使⽤⼆元⾼斯函数来表⽰窗⼝函数,这⾥仅是个⼈理解,⼤家可以参考下。
特征点又叫兴趣点或者角点。
常被用于目标匹配,目标跟踪,三维重建等应用中。
点特征主要指图像中的明显点,如突出的角点、边缘端点、极值点等等。
特征点具有以下三种特性:▪旋转不变性;▪光照不变性;▪视角不变性。
用于点特征提取的算子称为兴趣点提取(检测)算子。
常用的有▪Harris角点检测;▪FAST特征检测;▪SIFT特征检测;▪SURF特征检测。
预备数学实对称矩阵如果有n阶矩阵A,其矩阵的元素都为实数,且矩阵A的转置等于其本身,则称A为实对称矩阵。
性质:▪实对称矩阵A的不同特征值对应的特征向量是正交的;▪n阶实对称矩阵A必可相似对角化,且相似对角阵上的元素即为矩阵本身特征值。
对角化:优点:满秩的对角方阵,可以直接看出特征值,特征向量等重要特征。
卷积算子—Sobel算子主要用于边缘检测,分别对水平和垂直方向上的边缘敏感。
对图像任意一点使用会产生对应的梯度矢量或者其法矢量。
对噪声具有平滑抑制作用,但是得到的边缘较粗,且可能出现伪边缘。
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
如果以A代表原始图像,Gx 及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:梯度计算公式梯度方向计算公式如果等于零,代表图像该处拥有纵向边缘,左边比右边要暗。
基础知识1、角点使用一个滑动窗口在下面三幅图中滑动,可以得出以下结论:▪左图表示一个平坦区域,在各方向移动,窗口内像素值均没有太大变化;▪中图表示一个边缘特征(Edges),如果沿着水平方向移动(梯度方向),像素值会发生跳变;如果沿着边缘移动(平行于边缘) ,像素值不会发生变化;▪右图表示一个角(Corners),不管你把它朝哪个方向移动,像素值都会发生很大变化。
所以,右图是一个角点。
2、角点类型下图展示了不同角点的类型,可以发现:如果使用一个滑动窗口以角点为中心在图像上滑动,存在朝多个方向上的移动会引起该区域的像素值发生很大变化的现象。
Harris⾓点检测原理及实现为便于理解,先简要介绍⾓点的概念和⾓点检测背景1 背景⾓点检测⼤致可分为三类:基于灰度图的⾓点检测、基于⼆值化图像的⾓点检测和基于轮廓曲线的⾓点检测。
Harris属于基于灰度图的⾓点检测。
2 Harris特征原理2.1 概述Harris⾓点检测根据窗⼝向多个⽅向,通过判断窗⼝内像素值有⽆明显变化判断有⽆⾓点。
如下图: 第⼀幅图像中,窗⼝内像素值⽆明显变化,⽆⾓点。
第⼆幅图像中,窗⼝⽔平移动时有明显变化,⽆⾓点。
第三幅图中,窗⼝多个⽅向移动时有明显变化,有⾓点。
Harris⾓点检测可分为三步:梯度计算、响应值计算、⾓点提取。
下⾯按步骤介绍。
2.2梯度计算: 对图像中的任意⼀像素点I(x,y),进⾏⾃相关平移w(x+Δx、y+Δy)得到⾃相关函数: c(x,y,Δx,Δy) = ∑w h(x,y)(I(x,y)-I(x+Δx,y+Δy))2 其中 ∑w表⽰窗⼝内的点,h(x,y)表⽰加权函数,加权函数可根据⾃⼰需要进⾏修改(通过修改源代码)。
由泰勒可得: I(x+Δx,y+Δy) = I(x,y)+ΔxI x(x,y)+ΔyI y(x,y)+p ≈I(x,y)+ΔxI x(x,y)+ΔyI y(x,y)代⼊⾃相关函数可得(加权函数暂时忽略): c(x,y,Δx,Δy) = ∑w(I(x,y)-I(x+Δx,y+Δy))2 ≈ ∑w((ΔxI x(x,y))2+2ΔxΔyI x(x,y)I y(x,y)+(ΔyI y(x,y))2) 将上公式⽤图表⽰如下: 其中,u和v分别表⽰Δx和Δy,w(x,y)表⽰加权函数。
Harris算法是通过判断像素值是否在多个⽅向上有明显变化可转换为为是否在x和y⽅向上像素值均有明显变化,再转换为Ix或Iy的变化,再转换为M矩阵的特征值λ1,λ2的变化,如下图:2.3响应值计算:上⾯计算不易于通过编程实现,Harris通过定义⾓点响应函数R的⽅式,⽤于表⽰⼀个⾓点的Harris响应值:trace表⽰为矩阵的迹,det为矩阵的⾏列式(矩阵的迹:主对⾓线上的值相加即所有特征值的和),k为经验常数,⼀般取0.04~0.06。
Harris角点检测算法编程步骤及示例演示也不说那么多废话了,要介绍啥背景意义之类的,角点检测,顾名思义,就是检测角点,最简单的就是两条线的交点了,还有比如下国际象棋的棋盘格子的交点之类的,反正就是检测这些点。
简单将Harris角点检测算法的思想说下,就是拿一个小窗在图像中移动,通过考察这个小窗口内图像灰度的平均变换值来确定角点。
(1)如果窗口内区域图像的灰度值恒定,那么所有不同方向的偏移几乎不发生变化;(2)如果窗口跨越一条边,那么沿着这条边的偏移几乎不发生变化,但是与边垂直的偏移会发生很大的变化;(3)如果窗口包含一个孤立的点或者角点,那么所有不同方向的偏移会发生很大的变化。
下面给出具体数学推导:设图像窗口平移量为(u,v),产生的灰度变化为E(u,v),有E(u,v)=sum[w(x,y)[I(x+u,y+v)-I(x,y)]^2],其中w(x,y)为窗口函数,I(x+u,y+v)为平移后的灰度值,I(x,y)为平移前的灰度值。
有泰勒公式展开可得:I(x+u,y+v)=I(x,y)+Ix*u+Iy*v+O(u^2,v^2);Ix,Iy分别为偏微分,在图像中为图像的方向导数.因此E(u,v)=sum[w(x,y) [Ix*u+Iy*v+O(u^2,v^2)]^2],可以近似得到E(u,v)=sum[w(x,y) [Ix*u+Iy*v]^2],即E(u,v)=[u,v][Ix^2,Ix*Iy;Ix*Iy,Iy^2][u,v]T令M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2],因此最后对角点的检测成了对矩阵M的特征值的分析了,令M其特征值为x1,x2;当x1>>x2或者x2>>x1,则检测到的是边缘部分;当x1,x2都很小,图像窗口在所有移动的方向上移动灰度级都无明显变化.当X1,X2都很大时且相当,检测到的是角点。
编程时用x1,x2不方便,因此定义角点响应函数;R=det(M)-k(trace(M))^2;其中det(M)为矩阵M的行列式,trace(M)为矩阵M的迹。
harris角点检测算法步骤Harris角点检测算法步骤:一、引言Harris角点检测算法是计算机视觉中常用的角点检测算法之一。
它通过分析图像的局部灰度变化来寻找图像中的角点,被广泛应用于图像处理、物体识别、图像匹配等领域。
本文将介绍Harris角点检测算法的步骤及其原理。
二、灰度处理Harris角点检测算法首先需要将彩色图像转换为灰度图像,这是因为角点检测主要关注图像的灰度变化而非颜色信息。
通过将彩色图像的每个像素的RGB值加权平均,可以得到相应的灰度值。
三、计算梯度接下来,对灰度图像进行梯度计算。
梯度表示图像中的灰度变化,是图像中像素灰度值变化最快的方向。
通过对图像使用Sobel算子或其他梯度计算算法,可以计算出每个像素的梯度幅值和方向。
四、计算结构张量在Harris角点检测算法中,结构张量是一个重要的概念。
对于每个像素点,结构张量是一个2x2的矩阵,它描述了该像素点周围区域的灰度变化情况。
结构张量的计算公式包括对梯度幅值的平方、梯度幅值的乘积以及梯度方向的加权。
五、计算角点响应函数角点响应函数是Harris角点检测算法的核心。
它通过对结构张量进行特征值分解,得到每个像素点的角点响应值。
角点响应值的计算公式是通过特征值的乘积减去特征值的和,再乘以一个经验系数。
如果特征值的乘积较大,说明该像素点是角点。
六、非极大值抑制由于角点响应函数在角点处达到最大值,但在边缘和平坦区域也可能有较大值,为了提取出准确的角点,需要进行非极大值抑制。
在非极大值抑制过程中,对于每个像素点,比较其角点响应值与周围像素点的角点响应值,如果大于周围像素点的角点响应值,则保留,否则抑制。
七、阈值处理为了进一步提取出准确的角点,可以根据角点响应值设置一个阈值。
只有角点响应值大于阈值的像素点才被认为是角点。
阈值的选择是一个关键问题,需要根据具体应用场景和图像特点进行调整。
八、角点标记最后一步是将检测到的角点在原始图像上进行标记。
harris角点检测算法原理Harris角点检测算法原理引言:角点检测是计算机视觉中一项重要的任务,它可以帮助计算机识别和跟踪图像中的角点特征。
Harris角点检测算法是一种经典的角点检测方法,它通过计算图像中像素点的角点响应函数来确定角点的位置。
一、角点的定义和特点角点是图像中突然变化的区域,其特点是在多个方向上都具有较大的灰度变化。
由于角点在图像中具有明显的特征,因此检测角点可以帮助计算机识别和跟踪物体。
二、角点响应函数Harris角点检测算法通过计算每个像素点的角点响应函数来确定是否为角点。
角点响应函数的计算公式如下:R = det(M) - k * trace^2(M)其中,M是一个2×2的矩阵,表示像素点附近的灰度变化情况。
det(M)表示矩阵M的行列式,trace(M)表示矩阵M的迹,k是一个常数。
三、角点响应函数的计算步骤1. 图像梯度计算:首先,对图像进行梯度计算,得到每个像素点的梯度幅值和梯度方向。
2. 构建自相关矩阵:对于每个像素点,根据其周围像素点的梯度幅值和梯度方向,构建一个2×2的自相关矩阵M。
3. 计算角点响应函数:根据自相关矩阵M的行列式和迹,计算角点响应函数R。
4. 阈值化和非极大值抑制:对于每个像素点,根据角点响应函数的值,进行阈值化操作,并对超过阈值的像素点进行非极大值抑制。
四、Harris角点检测算法的优缺点1. 优点:(1)计算简单:Harris角点检测算法的计算量相对较小,适合在实时应用中使用。
(2)稳定性好:Harris角点检测算法对图像的旋转、缩放和亮度变化具有较好的稳定性。
(3)可靠性高:Harris角点检测算法在各种场景下都能够较为准确地检测到角点。
2. 缺点:(1)对噪声敏感:Harris角点检测算法对噪声比较敏感,噪声会影响角点的检测结果。
(2)对尺度变化不敏感:Harris角点检测算法对于图像的尺度变化比较不敏感,可能会漏检或误检角点。
不适用opencv的代码(转)//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////#define B(image,x,y) ((uchar *)(image->imageData+image->widthStep*(y)))[(x)*3]#define G(image,x,y) ((uchar *)(image->imageData+image->widthStep*(y)))[(x)*3+1]#define R(image,x,y) ((uchar *)(image->imageData+image->widthStep*(y)))[(x)*3+2]#define S(image,x,y) ((uchar *)(image->imageData+image->widthStep*(y)))[(x)]//卷积计算求Ix,Iy,以及滤波//a指向的数组是size1*size2(滤波器大小)大小的...求导,a 指滤波器,xwidth,ywidth指图像大小px=i-size1/2+i1;py=j-size2/2+j1;分别消掉了size1/2,size2/2,所以这样就更好理解了。
for(i=size1/2;i<ywidth-size1/2;i++)for(j=size2/2;j<xwidth-size2/2;j++)这里的size/2是为了不把图像边界算进去。
CvMat *mbys(CvMat *mat,intxwidth,intywidth,double *a,int size1,int size2)//size{inti,j;int i1,j1;intpx,py;int m;CvMat *mat1;mat1=cvCloneMat(mat);for(i=size1/2;i<ywidth-size1/2;i++)for(j=size2/2;j<xwidth-size2/2;j++){m=0;for(i1=0;i1<size1;i1++)for(j1=0;j1<size2;j1++){px=i-size1/2+i1;py=j-size2/2+j1;//CV_MAT_ELEM访问矩阵元素m+=CV_MAT_ELEM(*mat,double,px,py)*a[i1*size1+j1];}CV_MAT_ELEM(*mat1,double,i,j)=m;}return mat1;}//计算Ix2,Iy2,IxyCvMat *mbxy(CvMat *mat1,CvMat *mat2,int xwidth,intywidth){inti,j;CvMat *mat3;mat3=cvCloneMat(mat1);for(i=0;i<ywidth;i++)for (j=0;j<xwidth;j++){CV_MAT_ELEM(*mat3,double,i,j)=CV_MAT_ELEM(*mat1,double,i,j)*CV_MAT_ELEM(*mat2,double,i,j);}return mat3;}//用来求得响应度CvMat *mbcim(CvMat *mat1,CvMat *mat2,CvMat *mat3,int xwidth,intywidth){inti,j;CvMat *mat;mat=cvCloneMat(mat1);for(i = 0; i <ywidth; i++){for(j = 0; j <xwidth; j++){//注意:要在分母中加入一个极小量以防止除数为零溢出CV_MAT_ELEM(*mat,double,i,j)=(CV_MAT_ELEM(*mat1,double,i,j)*CV_MAT_ELEM(*mat2,double,i,j)- CV_MAT_ELEM(*mat3,double,i,j)*CV_MAT_ELEM(*mat3,double,i,j))/(CV_MAT_ELEM(*mat1,double,i,j)+CV_MAT_ELEM(*mat2,double,i,j)+0.000001);}}return mat;}//用来求得局部极大值CvMat *mblocmax(CvMat *mat1,int xwidth,intywidth,int size){inti,j;double max=-1000;int i1,j1;intpx,py;CvMat *mat;mat=cvCloneMat(mat1);for(i=size/2;i<ywidth-size/2;i++)for(j=size/2;j<xwidth-size/2;j++){max=-10000;for(i1=0;i1<size;i1++)for(j1=0;j1<size;j1++){px=i-size/2+i1;py=j-size/2+j1;if(CV_MAT_ELEM(*mat1,double,px,py)>max)max=CV_MAT_ELEM(*mat1,double,px,py);}if(max>0)CV_MAT_ELEM(*mat,double,i,j)=max;elseCV_MAT_ELEM(*mat,double,i,j)=0;}return mat;}//用来确认角点CvMat *mbcorner(CvMat *mat1,CvMat *mat2,int xwidth,intywidth,intsize,double thresh){CvMat *mat;inti,j;mat=cvCreateMat(ywidth,xwidth,CV_32FC1);for(i=size/2;i<ywidth-size/2;i++)for(j=size/2;j<xwidth-size/2;j++){if(CV_MAT_ELEM(*mat1,double,i,j)==CV_MAT_ELEM(*mat2,double,i,j))//首先取得局部极大值 //mat1是CRF相应的所有。