算法 | RASAC 入门
=================================================
博主github:https://github.com/MichaelBeechan
博主CSDN:https://blog.csdn.net/u011344545
=================================================
尘世冰封的专栏_MJ卡尔曼的鱼_CSDN博客-卫星导航,程序语言设计(C语言、C++、Matlab等),MATLAB之计算机视觉与深度学习领域博主
RASAC——Wikipedia (Random sampleconsensus)
RASAC算法是一种学习技术,通过随机观察样本数据估计模型参数。给定一个数据集包含内点和外点,RASAC使用投票方案找到优化的拟合结果。数据集中的数据元素被用来投票给一个或多个模型。这个投票方案的实施基于两个假设:噪声特征不会对任何单一模型(少数异常值)进行一致性投票;有足够的特征得到好的模型(丢失数据少)。
RASAC算法主要由两个步骤组成:
1.从输入数据集中随机抽取包含最小数据项的样本子集。一个拟合模型和相应的模型参数仅使用该样本子集的元素来计算。样本子集的基数足够确定模型参数的最小值。
2.算法检查整个数据集的那些元素和第一步获得的模型参数所实例化的模型相一致。如果一个数据元素不符合由估计模型参数集合所实例化的拟合模型,那么它将被认为是一个异常值,该模型参数在一个误差阈值内,定义了由噪声影响引起的最大偏差。
拟合模型获得的内点集称为一致集。RASAC反复迭代上述两步,直到某些迭代中获得足够的内点(一致集)。RASAC算法的输入是一组观测数据值。一种将某种模型拟合到观测值的方法,以及一些置信参数。其通过重复以下步骤达到目标:
1.随机选择原始数据的一个子集,这个子集称为假设内点;
2.用一个模型拟合这个子集;
3.然后用这个模型测试所有的其他数据,根据一些特定模型的损失函数,这些点拟合了一个非常好的估计模型,而这些点被认为是一致集的一部分。
4.如果有足够多的点被归类为一致集的一部分,那么这个估计模型就相当不错。
5.然后,使用一致集的所有元素重新估计,来改进模型。
这个过程重复固定的次数,每次都产生一个被拒绝的模型,因为太少的点是一致集的一部分,或者是一个改进的模型和其相应的一致集的大小的原因。在后一种情况下,如果它的一致集比先前保存的模型大,我们就保留了这个改进的模型。
MATLAB实现过程
function [bestParameter1,bestParameter2]= ransac_demo(data,num,iter,threshDist,inlierRatio)
% data: a 2xn dataset with #n data points
% num: the minimum number of points. Forline fitting problem, num=2
% iter: the number of iterations
% threshDist: the threshold of thedistances between points and the fitting line
% inlierRatio: the threshold of the numberof inliers
%% Plot the data points
figure;plot(data(1,:),data(2,:),'o');hold on;
number = size(data,2); % Total number ofpoints
bestInNum = 0; % Best fitting line withlargest number of inliers
bestParameter1=0;bestParameter2=0; %parameters for best fitting line
for i=1:iter
%% Randomly select 2 points
idx = randperm(number,num); sample = data(:,idx);
%% Compute the distances between all pointswith the fitting line
kLine = sample(:,2)-sample(:,1);% twopoints relative distance
kLineNorm = kLine/norm(kLine);
normVector = [-kLineNorm(2),kLineNorm(1)];%Ax+By+C=0A=-kLineNorm(2),B=kLineNorm(1)
distance = normVector*(data - repmat(sample(:,1),1,number));
%% Compute the inliers with distancessmaller than the threshold
inlierIdx = find(abs(distance)<=threshDist);
inlierNum = length(inlierIdx);
%% Update the number of inliers and fittingmodel if better model is found
if inlierNum>=round(inlierRatio*number)&& inlierNum>bestInNum
bestInNum = inlierNum;
parameter1 = (sample(2,2)-sample(2,1))/(sample(1,2)-sample(1,1));
parameter2 = sample(2,1)-parameter1*sample(1,1);
bestParameter1=parameter1; bestParameter2=parameter2;
end
end
%% Plot the best fitting line
xAxis = -number/2:number/2;
yAxis = bestParameter1*xAxis + bestParameter2;
plot(xAxis,yAxis,'r-','LineWidth',2);
RASAC的缺点是:
1.时间没有上限
2.阈值设置问题(要求设置特定的阈值)
算法 | RASAC 入门相关推荐
- 速领:「人工智能算法从入门到精通教程」
小伙伴从去年年底开始,一直叨叨要跳槽,大大小小的公司面试了很多,但总没有拿到一个满意的offer,要么package太低,要么就是面试被虐. 经过前几次的面试失利,终于明白了什么叫基础不牢,地动山摇. ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- 蓝桥杯比赛常考算法_备战蓝桥--算法竞赛入门第一章总结
笔者备战蓝桥杯先打算看完<算法竞赛入门经典>第2版,在这里写下第一章的笔记,供自己和大家参考. 鸡兔同笼问题 原题: 已知鸡和兔的总数量为n,总腿数为m.输入n和m,依次输出鸡的数目和兔的 ...
- 《算法竞赛入门经典训练指南》pdf
下载地址:网盘下载 基本介绍 编辑 内容简介 <算法竞赛入门经典:训练指南>题目多选自近年来ACM/ICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点. ...
- ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》
罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...
- 算法竞赛入门经典训练指南
最近在看算法竞赛入门经典训练指南这本书,书中不错的算法我将在博客中发布,和大家共同学习. 题目: 在你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士可以雇佣,一个 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- 算法竞赛入门经典 习题3-2 分子量 Molar Mass
给出一种物质的分子式(不带括号),求其分子量.本题分子式中只包含四种原子,分别为C.H.O.N,原子量分别为12.01,1.008,16.00,14.01.例如,C6H5OH的分子量为94.108g/ ...
- 刘汝佳《算法竞赛入门经典》---总结
刘汝佳:<算法竞赛入门经典> 三步: 基本的数据结构+算法知识: 数论等数学基本知识: 锻炼联想建模能力.知识与实际相结合,解决实际问题! 第一章:程序设计入门 1.a/b 当a.b为整数 ...
最新文章
- 为什么python用不了中文_【TK例子】为什么不显示中文
- LSTM implementation explained
- PHP数组操作——获取数组最后一个值的方法
- python实现数据恢复_使用sklearn进行对数据标准化、归一化以及将数据还原的方法...
- python怎么清空屏幕_python3.6怎么清屏幕
- kubernetes视频教程笔记 (22)-存储-Secret
- mcgscom口针脚定义_【各种接口针脚定义]
- FPN网络结构+源码讲解
- 如何打造百万爆款短视频?普通人如何通过短视频赚钱?3分钟学会
- 嵌入式linux程序加密,基于嵌入式操作系统uClinux实现网络安全加密系统的设计
- 守护线程和用户线程的真正区别(实例讲解)
- 英文排版(typography)
- STM32彩灯控制器
- 如何在win10新建菜单添加新的文件类型
- 看到结局不会失望的,中国传统美食
- Java集合(二二): LinkedList源码剖析
- python培训班 北京-终于知道北京python基础培训机构
- 苹果笔记本包_通勤收纳新体验:tomtoc苹果电脑包
- Unity3d 5烘焙相关
- 海底捞张勇:海底捞的核心竞争力是什么?人力资源体系
热门文章
- AtCoder AGC007E Shik and Travel (二分、DP、启发式合并)
- 算法题 身高差_10个大数据处理常见算法题
- Python if条件判断
- windows消息处理机制
- 新版ADT出现appcompat_v7的问题
- 练习一:GitHub Desktop下载及使用
- C# 图片缩放放大剪切代码
- Apache2启动错误以及Ubuntu update的错误
- [blog摘要]Exploring and Decoding ETW Providers using Event Log Channels
- intellijidea课程 intellijidea神器使用技巧 6-1 Spring的关联