算法过程

  1. 随机挑选四组点对生成内点集,并计算初始变换矩阵 H
  2. 根据 H 对剩余点进行变换,计算预测点与真实点之间的均方差,存储所有误差
  3. 判断整体误差的最大值是否小于指定阈值,并且如果小于最小误差,则将此次误差的最大值作为最小误差,循环结束前返回到第一步。
  4. 返回最小误差对应的变换矩阵

迭代次数确定

Ransac 算法需要多次迭代来确定最优变换矩阵,假设 w=内点个数/所有点的个数w = 内点个数 / 所有点的个数w=内点个数/所有点的个数
采样的 n个点全为内点的概率 p0=wnp_0=w^np0​=wn,至少有一个为外点的概率 p1=1−p0p1=1−p0p1=1−p0
则重复 K 次实验,每次都至少有一个外点的概率 p2=p1Kp2=p1^Kp2=p1K
则K次采样中至少一次采样是有效采样的概率 p=1−p2p=1−p2p=1−p2,最终计算得:
K=log(1−p)log(1−p0)K=\frac{log(1−p)}{log(1−p_0)}K=log(1−p0​)log(1−p)​

    ransac_iters = int(round(math.log(1 - valid_prob) / math.log(math.pow(1 - inner_prob, samples) + 1e-8)))

这里 inner_prob 为内点概率值,valid_prob 为采样有效的概率值

迭代估计最优单应矩阵

每次迭代进行以下操作

  1. 随机选取四个点对作为初始内点集合,并计算变换矩阵
consensus_set = []points_list_temp = deepcopy(points_list).tolist()for j in range(4):temp = random.choice(points_list_temp)consensus_set.append(temp)points_list_temp.remove(temp)sp = np.asarray([_[0] for _ in consensus_set], dtype=np.float32)dp = np.asarray([_[1] for _ in consensus_set], dtype=np.float32)# 从一致集合中计算变换矩阵H = cv2.getPerspectiveTransform(sp, dp)
  1. 对剩下的点进行遍历,计算误差
        for p1, p2 in points_list_temp:x1, y1 = p1x2, y2 = p2src_p = np.array([x1, y1, 1], dtype=np.float32)dst_p = np.array([x2, y2, 1], dtype=np.float32)# 计算实际值与预测结果的均方差out = dst_p - np.dot(H, src_p)# 计算 sqrt(dx2+dy2)dist_error = np.hypot(out[0], out[1])dist_errors.append(dist_error)if dist_error < threshold and dist_error < max_error:consensus_set.append([p1, p2])dist_errors.append(dist_error)
  1. 与最小的误差进行比较,获取最优集
        if max(dist_errors) < max_error:max_error = max(dist_errors)max_inliers = consensus_setmodel_h = Hreturn np.asarray(max_inliers, dtype=np.float32), model_h

RANSAC算法筛选匹配点相关推荐

  1. 利用RANSAC算法筛选SIFT特征匹配

    关于RANSAC算法的基本思想,可从网上搜索找到,这里只是RANSAC用于SIFT特征匹配筛选时的一些说明. RANSAC算法在SIFT特征筛选中的主要流程是: (1) 从样本集中随机抽选一个RANS ...

  2. 计算机视觉——SIFT特征提取与检索+匹配地理标记图像+RANSAC算法

    SIFT特征提取与检索 1. SIFT算法 1.1 基本概念 1.2 SIFT算法基本原理 1.2.1 特征点 1.2.2 尺度空间 1.2.3 高斯函数 1.2.4 高斯模糊 1.2.5 高斯金字塔 ...

  3. 把计算机视觉算法应用遥感,RANSAC算法及其在遥感图像处理中的应用

    摘要: 在计算机视觉,工程设计等领域都需要根据相关数据集确定模型参数,但是所得到的数据中往往存在大量不符合模型的异常数据(又被称为野点),这些野点对模型参数稳健性有很大的干扰.经典的参数估计算法如最小 ...

  4. 利用SIFT和RANSAC算法(openCV框架)实现物体的检测与定位,并求出变换矩阵(findFundamentalMat和findHomography的比较)

    本文目标是通过使用SIFT和RANSAC算法,完成特征点的正确匹配,并求出变换矩阵,通过变换矩阵计算出要识别物体的边界(文章中有部分源码,整个工程我也上传了,请点击这里). SIFT算法是目前公认的效 ...

  5. RANSAC算法注记

    今天学习了一下RANSAC随机样本一致性算法,其在图像融合.特征点匹配方面有很强大的应用.网上已经有很多人写了关于这方面的文档,就不再造轮子了.特此罗列出来,以供后续参考. 我的数学之美(一)--RA ...

  6. RANSAC算法的简单理解

    图像拼接中看到了特征匹配的部分,特征匹配主要是特征点的匹配.在特征点匹配的时候,首先进行粗匹配,粗匹配通常是进行一对匹配点进行对比,误差越小越可能是一对匹配点:精匹配方法中,我们可以用到RANSAC( ...

  7. RANSAC算法实现图像全景拼接

    文章目录 一.全景拼接的原理 1.RANSAC算法介绍 2.使用RANSAC算法来求解单应性矩阵 3.拼接图像 二.全景拼接实验 1.针对固定点位拍摄多张图片,以中间图片为中心,实现图像的拼接融合 ( ...

  8. ransac算法_增强现实(AR)算法第四讲

    正文 之前我们讲解了增强现实(AR)注册跟踪的数学原理与推导(链接数学原理),内参矩阵A的标定(链接相机标定)和外参矩阵W的推导(链接外参矩阵推导)本篇将接着第三讲,进一步求解单应性矩阵H,在第三讲中 ...

  9. 适合新手--特征点匹配及消除误匹配点-python语言-适用于深度学习提取的特征点和描述符(超简单)

    这里用RANSAC来过滤误匹配 本代码主要是实现图像误匹配,理论部分及参考文章移步: 计算机视觉:RANSAC剔除基础矩阵F错误匹配(Python实现)_Sunrise永不言弃的博客-CSDN博客 以 ...

  10. RANSAC算法(2):(拟合平面)本文以地面为基础以及源码分布解读

    本章代码是本人根据一个未曾谋面的好人学习的(要怀抱希望,世界上好人真的是很多的,我要做一个去给别人带去正能量积极态度的人,加油喽),如需转载学习请注明.谢谢 ---------------基于rans ...

最新文章

  1. MSER+SIFT 图像的特征向量提取
  2. VPTR的分步初始化
  3. Redis常见配置redis.conf
  4. SAP Marketing Cloud的动态dynamic customer profile
  5. Hadoop学习系列之PageRank
  6. Java多线程:线程安全和非线程安全的集合对象
  7. php调用美图接口,网易美图 API 接口调用与请求方法详细教程
  8. 概率论公式,你值得拥有
  9. Halcon 摄像机标定流程-代码实现
  10. matlab 同态滤波
  11. opensuse leap 42.3安装网易云音乐
  12. EditPlus3.3 集成 SVN
  13. g++编译so里调用外部so
  14. 改变linux 背景修改命令,Linux命令行下更改桌面背景(GNOME环境)
  15. 【Vue实用功能】Vue实现浏览器全屏退出全屏
  16. Win7无法修改MAC怎么办 不能修改MAC的原因及解决方法
  17. python金融应用的好书推荐卡_十大金融好书推荐
  18. IIS管理器无法打开。启动后,在任务栏中有,但是窗口不见了,另一种解决办法.
  19. adb一打开就闪退_常用的adb命令
  20. python舆情系统开发_舆情系统开发

热门文章

  1. 17SWFObject使用
  2. Matlab——指派问题
  3. Python查看函数源码
  4. 电商后台管理项目知识点总结
  5. AVX2指令集浮点乘法性能分析
  6. java开发常见的问题及解决办法 - java开发中遇到的难点有哪些_java开发常见的问题及解决办法
  7. NDK开发Android端RTMP直播推流程序
  8. 电商十二、pinyougou02.sql的内容③
  9. 初学编程:算法编程是什么意思?盘点最常用的 5 大算法!
  10. 树的叶子结点与完全二叉树结点计算方法