在FLANN 特征匹配的基础上,进一步利用 Homography 映射找出已知物体。具体是:
利用findHomography函数通过匹配的关键点找出相应的变换,
再利用perspectiveTransform函数映射点群。
也就是分为以下两个大的步骤。
(1)使用函数findHomography寻找匹配上的关键点的变换。(2)使用函数perspectiveTransform 来映射点。
寻找透视变换: findHomography( )函数
找到并返回源图像和目标图像之间的透视变换
Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method = 0, double ransacReprojThreshold = 3, outputArray mask = noArray())参数1,InputArray类型的srcPoints,源平面上的对应点,可以是CV_32FC2的矩阵类型
或者vector
。 参数2,InputArray类型的dstPoints,目标平面上的对应点,可以是CV_32FC2的矩阵类型
或者vector
。 参数3,int类型的 method,用于计算单应矩阵的方法。可选标识符为:
标识 含义 0 使用所有点的常规方法(默认值)
CV_RANSAC 基于RANSAC的鲁棒性方法(robustmethod) CV_LMEDS 最小中值鲁棒性方法 参数4,double类型的ransacReprojThreshold,有默认值3,处理点对为内围层时,允许重投
影误差的最大值。若srcPoints 和 dstPoints是以像素为单位的,那么此参数的取值范
围一般在1到10之间。
参数5,OutputArray类型的mask,有默认值noArray(),是一个可选的参数,通过上的鲁棒性
方法( CV_RANSAC或者CV_LMEDS )设置输出掩码。注意:输入掩码值会被忽略。
进行透视矩阵变换: perspectiveTransform()函数 进行向量透视矩阵变换
void perspectiveTransform(InputArray src, outputArray dst, InputArray m)
参数1,InputArray类型的src,输入图像,即源图像,Mat类的对象,且需为双通道或三通道
浮点型图像;每个元素是二维或三维可被转换的矢量。
参数2,OutputArray类型的 dst,运算结果,需和源图片有一样的尺寸和类型。
参数3,InputArray类型的m,变换矩阵,为3 X 3或者4 X 4浮点型矩阵。