首页 > 编程语言 >matlab练习程序(随机抽样一致RANSAC)

matlab练习程序(随机抽样一致RANSAC)

时间:2023-11-03 16:35:29浏览次数:31  
标签:RANSAC end data mu matlab 拟合 随机抽样 数据

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),'+');
    end
end
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

参考:

平面拟合,RANSAC拟合方法

 

标签:RANSAC,end,data,mu,matlab,拟合,随机抽样,数据
From: https://www.cnblogs.com/bbhhh/p/17807873.html

相关文章

  • matlab环境配置
    一.环境变量设置AMD处理器:右键单击我的电脑属性—>高级—>环境变量—>系统变量—>新建变量名:BLAS_VERSION,值为安装目录\atlas_Athlon.dll.路径是相对的,根据的安装的路径来设置变量的值,如默认安装于C盘则设为 C:\MATLAB7\bin\win32\atlas_Athlon.dll.atlas_Athlon.dll......
  • MATLAB 使用离散数据点实现三维曲面插值
    依靠若干离散点实现三维曲面插值是工程应用中的常见问题,也是数据处理工作的常见需求。MATLAB实现上述功能主要依靠 griddata函数,该函数支持基于三角形的三次插值(仅支持内插值,估计是一种保形插值)和双调和样条插值(支持外插值)。案例数据如下图所示:案例数据空间分布如下:案例代......
  • 矢量图输出、修订、以及插入方法——Matlab,PPT输出、Tex,Word输入
    矢量图输出、修订、以及插入方法1       输出图片1.1     MATLAB出图另存为pdf(tex中使用)或emf(word中使用)格式,svg格式不行,会导致图片失真1.2     PPT出图直接导出pdf或选中图片右键导出为svg(这样就不用去白边)1.3     Python出图python的matplotli......
  • 【matlab笔记】杂乱版
    求Lagrange插值多项式symsx;X=[1,3/2,0,2]Y=[3,13/4,3,5/3]n=length(X);L=sym('1');P=sym('0');fori=1:n%求出Li(x)Li=sym('1');forj=1:nifj~=iLi=Li*(x-X(j))/(X(i)-X(j......
  • matlab中polyfit和polyval的使用(曲线拟合/多项式拟合/指数拟合)
    matlab中polyfit函数的作用是对数据进行数据拟合有些小伙伴可能搞不清楚polyfit和polyval之间的区别,这里就直接上我的笔记给大家看看吧%%普通的多项式拟合clear;clc;num=30;x=linspace(0,5,num);%横轴数据error=rand(1,num);%生产误差值a=x.^2+2*error;%......
  • CEEMDAN+PE自适应噪声完备集合经验模态分解+排列熵重构分量 程序语言为matlab
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 线性代数 · 矩阵 · Matlab | Cholesky 分解代码实现
    (搬运外网的代码,非原创;原网址)(其实是专业课作业,但感觉国内博客没有合适的代码实现,所以就搬运到自己博客了)背景-Cholesky分解:若A为n阶实对称正定矩阵,则存在非奇异下三角矩阵L,使得A=LL^T。是特殊的LU分解(下三角上三角分解)。若限定L的对角元素为正,则这种分解......
  • Spring Boot - @Transactional 标注的方法如何使用 synchronized?
    这篇文章中有说到@Transactional标注的方法也有锁的情况下会出现一些问题,具体请看SpringBoot锁。而且Idea也会标一个黄色波浪线提示你。我是这样做的,仅供参考。file:[DiscussionService.java]@ServicepublicclassDiscussionServiceimplementsIDiscussionService{......
  • WOA-CNN基于鲸鱼算法优化卷积神经网络的多变量回归预测 可直接运行 注释清晰适合新手
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 基于GRU门控循环网络的时间序列预测matlab仿真,对比LSTM网络
    1.算法运行效果图预览 LSTM:    GRU    2.算法运行软件版本matlab2022a 3.算法理论概述       门控循环单元(GatedRecurrentUnit,简称GRU)是一种用于序列建模和预测的递归神经网络(RNN)变体。GRU通过引入门控机制,克服了传统RNN在处理长序列时......