基于Local Search的直线匹配算法
2014-04-28 12:07
155 查看
1. 匹配算法
以第4节第二个结果为例:
Model中的直线段:
M={A,B,C,D}
待匹配图像中提取的直线段集合Data:
D={0,,1,2,3,4,5,6,7,8,9,10,11,12}将二者两两线段间所以可能的匹配方式放入集合S:
S={(A,0)(A,1)...(A,12)(B,0)(B,1)...(B,12)...(D,12)}
利用幂集的概念,将两幅图像之间所有可能的匹配图放入幂集C中。
C={
{(A,0)},{(A,0)(A,1)}...{(A,0)(A,1)(A,12)(B,0)(B,1)...(B,12)...(D,12)}
}
C的元素有h=2exp(4*13)个,也就是说在多对多(many-to-many)的情况下,有h中匹配的可能性。现在有两种寻找最优匹配的方法:全局最优和局部最优
1. 1局部最优匹配算法(邻域法)
用海明距离(Hamming-distance-one)表示邻域,0表示为匹配,1表示匹配(图中黑点)。在C中选取某一个匹配图作为初始状态。如下图中的Map={ (A,0), (A,3), (A,7), (B,2), (B,8), (C,3), (C,4), (C,7), (C,8), (C,9), (C,10), (C,11), (C,12), (D,0), (D,1), (D,3), (D,4), (D,10) }
Hamming-distance-one表示的匹配图可以表示为[1001000100000 0010000010000 0001100111111 1101100000100]
其邻域表示与初始状态仅仅差一位的匹配图。
采取最速下降法(Steppest-Descent),将初始状态所有邻域的Err计算,找到Err下降最快的一个邻域作为下一迭代的初始Map。终止至初始状态的Err小于其所有邻域的Err。
如下图:
这种方法收敛于局部最优,但是强烈的依赖于初始状态的选择,论文中随机选取4个初始状态达到四个局部最优,选取Err最小的为结果。
1. 2全局最优匹配算法
在实际情况中,并非Many-to-Many。而是一条Model可以对应多条Data,而一条Data不能对应多条Model,这就简化为One-to-Many问题。对于这种问题,所有的匹配可能为h=m exp(d),其中m为model数量,d为data数量。
全局最优算法计算量巨大,以上文为例,需要进行4exp(13)=67108864次计算。但是可以根据data直线夹角的限制来减少计算的次数。
2.利用“垂直距离的平方最小”求FitErr
垂直距离平方的意思是Data中的直线,经过F变换后(旋转、平移和尺度),转到与Model同一个坐标系下。Data中的点(文中用到的是两端点)到相对应的Model中线段距离的平方。其中变换方程F的定义如下。为方便矩阵运算,Data中的第i条线段的第j个点Dij(j=1或j2)的坐标表示如下:
若用Ni来表示Model中第i条直线的法向量。Mij表示这条线段上的第j点(随意的一点)到原点的向量。Rho等于N·M表示原点到Model中这条线的距离(有正负号)。
Vij表示在可能匹配结果C中,第i条Data中的直线的第j个点到Ni相关Model直线的距离,其中j=1或j=2。即表示直线的两个端点到对应Model的距离。表示如下:
所谓“平方距离”最小,文章有两种表示方式Ep和EI:(Ei验证过)
文章通过求倒数和偏导数的方式求极值,得到Ep的最小值,从而得到三个变量Phi、T和S。通过求Ei的最小值得到的是FitErr。FitErr有个利用Sigma归一化的过程,Sigma的定义为“超过Sigma个像素距离后认为FitErr很大。”Sigma的选取比较重要。
3.计算OmissionErr
OmissionErr表示的是Data中的线段经过上一步计算的Phi、T和S变换后得到的直线,与Model直线未重合的程度p。因此,若在当前变换条件下无Data与Model重合,此时重合的概率为0,p=1.0,Omission最大,若完全重合,重合概率为1.0,p=0,OmissionErr最小。其中a=0.75,Lm是Model的总长,lm是当前model长。重合的计算利用转换完成的的Data与Model两切向量点积计算。因为Model对于Data是一对多,因此Data中匹配到同一Model的直线重合程度要取交集。
根据输入匹配图Err的最小来判断最佳的匹配。
其中Err由三个部分组成,分别是FitErr,OmissionErr和SacaleErr。
4.计算SacleErr
为防止尺度变换过大从而使得上述两者Err很小而匹配效果不佳,加入ScaleErr。若进行全局搜索最佳匹配,可简单的使Scale在一定范围内,如[0.5,2]之间接受,否则不接受。若进行局部最优匹配,简单的阈值操作很有可能在迭代中间状态时因为某一状态的所有“邻域”都不满足scale的范围,从而收敛错误,因此需要加上ScaleErr。其中r=2。5.效果示意图
示例一:四图分别为Data原图、原图提取Data线段,Model线段,匹配结果。.
示例二:三图分别为Model、Data,匹配结果。
----------------------------------------------------参考文献--------------------------------------------
Beveridge J R, Riseman E M. How easy is matching 2D line models using local search?[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 1997,
19(6): 564-579.
Beveridge J R. Local search algorithms for geometric object
recognition: Optimal correspondence and pose[J]. 1993.(博士论文)
相关文章推荐
- 基于shape context的匹配算法
- 第二篇:基于K-近邻分类算法的约会对象智能匹配系统
- 基于LSD的直线提取算法
- 基于rsync同步算法的文件同步系统JAVA实现(四)——分析并发送不匹配数据块
- 基于最小生成树的实时立体匹配算法简介
- 基于边界的模板匹配的原理及算法实现
- 【图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法
- 视频处理算法分析2——基于块匹配的运动估计算法分析
- 基于Halcon的多目标模板匹配算法
- Python实现基于最大长度的正向最大值匹配算法
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 字符串匹配算法 之 基于DFA(确定性有限自动机)的字符串模式匹配算法
- 图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法
- 基于LSD的直线提取算法
- 标准的基于欧式距离的模板匹配算法优源码化和实现
- 快速字符串模糊匹配--基于Horspool的模糊匹配算法
- Android Jni OpenCV-基于ORB算法特征点匹配
- 视觉(9)争取快点看完基于图论的立体匹配算法
- 【算法+OpenCV】基于opencv的直线和曲线拟合与绘制(最小二乘法)