matlab练习程序(随机抽样一致RANSAC)
来源:互联网 发布:驱动精灵相似软件 编辑:程序博客网 时间:2024/05/19 17:03
RANSAC在图像拼接中有所使用,有时候也在图像理解的相关算法中有所使用。
算法简介如下(摘自《图像处理、分析与机器视觉(第3版)》):
1.假设我们要将n个数据点X={x1,x1,...,xn}拟合为一个由至少m个点决定的模型(m<=n,对于直线,m=2)。(我这里实际是两个不同均值、协方差高斯分布产生的数据)
2.设迭代计数k=1。
3.从X中随机选取m个项并拟合一个模型。(我这里直线拟合,选了2个项)
4.给定偏差ε,计算X中相对于模型的残差在偏差ε的个数,如果元素个数大于一个阈值t,根据一致点集重新拟合模型(可以利用最小二乘或其变种),算法终止。(我这里的偏差为1,阈值为数据个数的2/3)
5.设k=k+1,如果k小于一个事先给定的K,跳至第3步,否则采用具有迄今最大的一致点集模型,或算法失败。
运行效果如下,红圈是所有的数据,蓝叉是符合拟合模型的数据。
matlab代码如下:
main.m
close all;clear all;clc;%真实的数据mu=[0 0]; %均值S=[1 2.5;2.5 8]; %协方差data1=mvnrnd(mu,S,200); %产生200个高斯分布数据%噪声数据mu=[2 2];S=[8 0;0 8];data2=mvnrnd(mu,S,100); %产生100个噪声数据data=[data1;data2];plot(data(:,1),data(:,2),'ro'); %显示全部数据K=100; %设置最大迭代次数sigma=1; %设置拟合直线与数据距离的偏差pretotal=0; %符合拟合模型的数据的个数k=1;while pretotal < size(data,1)*2/3 && k<K %有2/3的数据符合拟合模型或达到最大迭代次数就可以退出了 SampIndex=floor(1+(size(data,1)-1)*rand(2,1)); %产生两个随机索引,找样本用,floor向下取整 samp1=data(SampIndex(1),:); %对原数据随机抽样两个样本 samp2=data(SampIndex(2),:); line=Mytls([samp1;samp2]); %对两个数据拟合出直线,或其他变种拟合方法 mask=abs(line*[data ones(size(data,1),1)]'); %求每个数据到拟合直线的距离 total=sum(mask<sigma); %计算数据距离直线小于一定阈值的数据的个数 if total>pretotal %找到符合拟合直线数据最多的拟合直线 pretotal=total; bestline=line; %找到最好的拟合直线 end k=k+1;end%显示符合最佳拟合的数据mask=abs(bestline*[data ones(size(data,1),1)]')<sigma; hold on;for i=1:length(mask) if mask(i) plot(data(i,1),data(i,2),'+'); endend
Mytls.m(已知两点求直线)
%这里是解如下三个方程的方程组%a*x1+b*y1+c=0%a*x2+b*y2+c=0%a^2+b^2=1%返回系数[a b c]function line=Mytls(data) x = data(1, :); y = data(2, :); k=(y(1)-y(2))/(x(1)-x(2)); %直线斜率,有些情况肯定需要个别判断,这里忽略了 a=sqrt(1-1/(1+k^2)); b=sqrt(1-a^2); if k>0 %如果斜率大于0,a,b异号 b=-b; end c=-a*x(1)-b*y(1); line=[a b c];end
更详尽的介绍见下面的网页:
1.http://en.wikipedia.org/wiki/Ransac
2.http://www.cnblogs.com/xrwang/archive/2011/03/09/ransac-1.html
0 0
- matlab练习程序(随机抽样一致RANSAC)
- 随机抽样一致-RANSAC
- 随机抽样一致 RANSAC
- 随机抽样一致-RANSAC
- 随机抽样一致 RANSAC(转)
- 随机抽样一致 RANSAC(转)
- 随机抽样一致 RANSAC(转)
- 随机抽样一致 RANSAC(转)
- RANSAC随机抽样一致算法
- RANSAC算法(RANdom SAmple Consensus随机抽样一致)
- RANSAC-RANdom SAmple Consensus(随机抽样一致)
- 随机抽样一致算法(Random sample consensus,RANSAC)
- 随机抽样一致(Random Sample Consensus, RANSAC)
- 随机抽样一致(Random Sample Consensus, RANSAC)
- 随机抽样一致算法(RANSAC, Random Sample Consensus )
- ransac算法(随机抽样一致性)
- ransac算法(随机抽样一致性)
- 随机抽样一致性算法(RANSAC)
- UNIX环境高级编程第十二章 线程控制 总结
- C++ builder XE8下安装QuickReport
- 安装Git
- 程序猿(媛)和它(她)的双肩包
- 【leetcode】Array—— Pascal's Triangle and Pascal's Triangle II(118/119)
- matlab练习程序(随机抽样一致RANSAC)
- HDU 5326 work 【并查集】
- Neural Turing Machines-NTM系列(二)开发环境搭建
- 数据仓库建设-业务数据调研
- Android XML解析
- iOS 各种单例写法、详解
- Java Web开发Tomcat中三种部署项目的方法
- 2016年“微信之父”张小龙首次公开演讲透露的信息量大
- 用付出谈收获-记2015下