随机一致性采样RANSAC是一种鲁棒的模型拟合算法,能够从有外点的数据中拟合准确的模型。

它的原理很朴素就是从样本数据中找到具有一致性的数据,用这些数据去建立样本的数学模型。这个一致性怎么理解?我的理解是:如果按照聚类处理方式,一致性数据就是可以归为一类的数据,他们最相近。俗话说:物以类聚,人以群分。非我族类,其心必异。

算法的详细原理及说明在维基上很详细,不赘述。维基上给的是一个直线随机一致性检测,而且还提供了Matlab演示代码,这个代码有几步关键的地方,由于是采用Matlab矩阵快速操作风格写的有点晦涩,当时我看这个代码后还做了些注解,后来维基采用了我的那部分注解。

维基随机一致性算法网址:https://en.wikipedia.org/wiki/Random_sample_consensus

下面是我根据算法原理利用Matlab进行直线的随机一致性检测,为了直观没用采用Matlab矩阵化的一些操作,速度上肯定是不太快的呀:

%%2016/11/12 by DQ
clc;
clear ;
close all;
%数据的初始化
m=100;
data=zeros(2,m);
data(1,:)=1:m;
data(2,:)=100+20*rand(1,m);
DataLen=length(data);
DistThresh=4;
InlierRatio=0.3;
MinInlierNum=round(InlierRatio*DataLen);
BestPointsNum=0;
MaxIteration=200;
Iter=0;
x=data(1,:);
y=data(2,:);
%原始散点图
OriginalScatterPlot=plot(x,y,'*');
grid on;
%Matlab 函数polyfit 最小二乘法拟合
p=polyfit(x,y,1);
x1=x;
y1=polyval(p,x);
hold on;
PolyFitPlot=plot(x1,y1,'b');
%RANSAC 执行过程,不断迭代
while Iter<MaxIteration%随机选取两个点,因为两个不同点确定一条直线啊PreSelectIndex=randperm(DataLen,2);P1=data(:,PreSelectIndex(1));P2=data(:,PreSelectIndex(2));P1x=P1(1);P1y=P1(2);P2x=P2(1);P2y=P2(2);%直线方程:A.x+B.y+C=0A=P2y-P1y;B=-(P2x-P1x);C=P2x*P1y-P1x*P2y;PointToLineDist=zeros(DataLen,1);for i=1:DataLen%点到直线的距离:d=(A*X+B*Y+C)/sqrt(A^2+B^2)CurrentPoint=data(:,i);X=CurrentPoint(1);Y=CurrentPoint(2);PointToLineDist(i)=abs(A*X+B*Y+C)/sqrt(A^2+B^2);endInlierIndex=find(PointToLineDist<=DistThresh);InlierNum=length(InlierIndex);if (InlierNum>BestPointsNum)&&(InlierNum>=MinInlierNum)BestPointsSet=zeros(2,DataLen);BestPointsNum=InlierNum;BestPointsSet(:,InlierIndex)=data(:,InlierIndex);endIter=Iter+1;
end
BestPointsSet(:,BestPointsSet(1,:)==0)=[];
hold on;
RANSACScatterPlot=plot(BestPointsSet(1,:),BestPointsSet(2,:),'ro');
BestParameter = polyfit(BestPointsSet(1,:),BestPointsSet(2,:),1);
xMin=min(data(1,:));
xMax=max(data(1,:));
x=xMin:0.5:xMax;
%最佳直线方程
y=BestParameter(1)*x+BestParameter(2);
%画出直线方程
hold on;
RANSACLinePlot=plot(x,y,'r');
title('RANSAC Find Best Line Fit Inlier');
legend([OriginalScatterPlot,PolyFitPlot,RANSACScatterPlot,RANSACLinePlot],'OriginalScatter','PolyFit','RANSACScatter','RANSACLine');

随机一致性检测RANSAC相关推荐

  1. 基于提前停止方法的优化随机一致性采样算法

    <基于提前停止方法的优化随机一致性采样算法> 关键字: 提前停止  一致性采样算法   图像处理   算法优化 摘要: 图像处理领域的随机一致性采样(RANSAC)算法,是经典的离散数据拟 ...

  2. MySQL之一致性检测及数据同步

    前言 当MySQL数据库架构使用主从时,由于事务创建和提交的顺序并不一致.例如我们先创建A事务,在创建B事务,但我们在提交的时候可能先提交B事务,在提交A事务.此时我们从服务在重放二进制日志时,会先执 ...

  3. 2018FME博客大赛-基于FME的不同比例尺线面要素 一致性检测关键技术研究

    编  写:曹 文 涛 武汉市测绘研究院 二○一八年三月 概述 随着地理信息系统技术的不断发展和广泛应用,各省市国土测绘部门都纷纷建立起了各种比例尺的基础地理信息数据库,其提供的矢量地理数据为社会各行业 ...

  4. lotus 扇区一致性检测 删除错误扇区

    lotus 扇区一致性检测 1,POST提交失败 2,检测扇区 3,扇区188已经上链 3.1 查看扇区故障 4,指定扇区检测 1,POST提交失败 ERROR storageminer storag ...

  5. 立体匹配---左右一致性检测/遮挡区填充

    左右一致性检测(Left-Right Consistency(LRC) check): 左右检测对实验效果的提升是很显著的,无论是视差图的视觉效果还是数据精度.很多时候LRC都是论文的遮羞布,在论文主 ...

  6. Java Web学习笔记(二)密码一致性检测的实现

    沉迷于超级机器人大战v二十多天后我终于想起来研究一下之前说的在hibernate validator中没有的密码一致性检测的问题,通过一个下午的研究终于将这个问题解决了,下面分享一下解决方案,包括后端 ...

  7. 随机早期检测(RED)

    Random Early Detection(RED) 目录 Random Early Detection(RED) 基本思想 随机早期检测的设计目标 RED算法 算法优缺点 基本思想 监控路由器输出 ...

  8. RED(Random Early Detection/随机早期检测)

    RED(Random Early Detection/随机早期检测) 加权的早期随机检测丢弃方式(默认是基于优先级丢弃的) 默认配置基于优先级为0的 丢包方式:1/mark-prob-denomina ...

  9. 传统图像处理之随机脉冲噪声检测(二)

    文章目录 前言 一.什么是平坦区和粗糙区? 二.如何确定阈值? 1.首先需要明白一件事 一副的图片的阈值并不是一尘不变的 2.计算阈值 1.平坦区与粗糙区区分计算 噪声污染程度估算 总结 这里是接着我 ...

最新文章

  1. CVPR 2021 | 论文大盘点:3D目标检测
  2. git版本号管理工具的上手
  3. 冠军杜兰特和Deta比赛
  4. 发布Disruptor 3.0.0
  5. python os.path.exists判断文件或文件夹是否存在
  6. IPv4地址和IPv6地址的比较,IPv6地址及其表示
  7. 前端代码:html、css(图文混排)文字环绕 - 案例篇
  8. 【JVM】 讲的比较好的JVM博客连接
  9. 使用Python查看汉诺塔移动详细过程
  10. mysql 语句 not_mysql sql语句 is not 用法是
  11. sql server 索引阐述系列五 索引参数与碎片
  12. 分分钟使用Retrofit+Rxjava实现网络请求
  13. 组装电脑多少钱一台_客户花9000元组装一台电脑,奸商赚5000块,利润真吓人
  14. nginx跨域配置及压缩配置
  15. 大数据职业理解_大数据职业规划总结
  16. API调用,API传参,面向对接开发,你真的会写接口文档吗?
  17. 这个计算机到底是咋入门的(1.0)胡学友修改版
  18. 一个人靠不靠谱,在于能力是否配得上承诺
  19. sqlserver中如何提取datetime格式数据中的日期或时间?
  20. Ubuntu 升级错误信息:mount: mounting none on /dev failed: no such device的解决办法

热门文章

  1. 游戏设计学习笔记Pt.1:小鸡快跑2——特殊的银河恶魔城游戏
  2. C#打印模板设计,E店宝打印模板设置,winfrom打印模板设计,DevExpress.XtraReports.UI.XRTable 表格代码生成。...
  3. 2020-11-16 css使用颜色渐变绘制梯形
  4. STM32F407 TFTLCD显示超声波和压力传感器模块
  5. 2016-0616 JAVA实现的一个日历
  6. python菜鸟在成长——运算符
  7. 四家中国公司入围全球十大芯片采购商名单
  8. 服务器装win10性能,服务器可以装win10吗
  9. ITSS认证从申报到获得证书需要多长时间?
  10. 新型冠状病毒肺炎预防宣传PPT模板-优页文档