proj_match_points_distortion_ransac(Image1, Image2 : : Rows1, Cols1, Rows2, Cols2, GrayMatchMethod, MaskSize, RowMove, ColMove, RowTolerance, ColTolerance, Rotation, MatchThreshold, EstimationMethod, DistanceThreshold, RandSeed : HomMat2D, Kappa, Error, Points1, Points2)通过自动查找点之间的对应关系,计算出两幅图像之间的投影变换矩阵和径向畸变系数。
匹配步骤:
- 确定第一张和第二张图像输入点周围的掩模窗口的灰度值相关性,利用两张图像中窗口的相似度生成掩模窗口之间的初始匹配;
- 应用RANSAC算法,求出在上述约束条件下使对应数最大化的投影变换矩阵和径向畸变系数。
RANSAC算法:RANSAC为Random Sample Consensus的缩写,随机抽样一致算法。
算法简介:RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。
基本思想描述:
①考虑一个最小抽样集的势为n的模型(n为初始化模型参数所需的最小样本数)和一个样本集P,集合P的样本数#(P)>n,从P中随机抽取包含n个样本的P的子集S初始化模型M;
②余集SC=P\S中与模型M的误差小于某一设定阈值t的样本集以及S构成S*。S*认为是内点集,它们构成S的一致集(Consensus Set);
③若#(S*)≥N,认为得到正确的模型参数,并利用集S*(内点inliers)采用最小二乘等方法重新计算新的模型M*;重新随机抽取新的S,重复以上过程。
④在完成一定的抽样次数后,若未找到一致集则算法失败,否则选取抽样后得到的最大一致集判断内外点,算法结束。
补充说明:
普通最小二乘是保守派:在现有数据下,如何实现最优。是从一个整体误差最小的角度去考虑,尽量谁也不得罪。
RANSAC是改革派:首先假设数据具有某种特性(目的),为了达到目的,适当割舍一些现有的数据。
给出最小二乘拟合(红线)、RANSAC(绿线)对于一阶直线、二阶曲线的拟合对比:
GrayMatchMethod := ‘ssd’,使用灰度差的平方和,‘sad’表示绝对差和,‘ncc’表示归一化交叉相关。
Rotation:如果第一幅图像相对于第二幅图像旋转,则参数旋转可以包含旋转角度的估计或以弧度表示的角度间隔。例如:Rotation := [rad(-30),rad(30)],表示图像偏移或旋转了-30°或30 °。应该指定一个角度间隔,旋转是一个有两个元素的数组。
DistanceThreshold,对于要接受的点,以像素为单位到其相应转换点的距离不能超过阈值DistanceThreshold。
EstimationMethod = 'gold_standard',采用数学上最优但速度较慢的优化方法,使几何重投影误差最小化。
Error,值误差表示估计过程的整体质量,是点与相应变换点之间的平均对称欧氏距离(以像素为单位)。所谓欧氏距离变换,是指对于一张二值图像(在此我们假定白色为前景色,黑色为背景色),将前景中的像素的值转化为该点到达最近的背景点的距离。