www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱源码程序matlab > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I4_10_3_ransac.m
%% RANSAC(MSAC)偵傛傞僲僀僘僨乕僞傊偺懡崁幃僼傿僢僥傿儞僌 %% 弶婜壔 clear; close all; clc; rng('default'); %% 曻暔嬋慄(2師娭悢)偺幃偐傜揰傪惗惉 x = (-10:0.1:10)'; y = (36-x.^2)/9; figure plot(x,y) title('曻暔嬋慄(2師娭悢)') %% 奜傟抣偲偟偰僲僀僘傪晅壛 y = y+rand(length(y),1); y([50,150,99,199]) = [y(50)+12,y(150)-12,y(99)+33,y(199)-23]; plot(x,y) title('曻暔嬋慄(2師娭悢)偵奜傟抣偲偟偰僲僀僘晅壛') shg; %% RANSAC(MSAC)偵傛傞懡崁幃僼傿僢僥傿儞僌 N = 2; % 2師嬋慄 maxDistance = 1; % inlier(奜傟抣偱側偄)偲傒側偡嵟戝嫍棧 % 2師嬋慄偵僼傿僢僥傿儞僌 [P, inlierIdx] = fitPolynomialRANSAC([x,y],N,maxDistance); disp('2師娭悢偺學悢(y=ax^2+bx+c)'); disp(P); %% 僼傿僢僥傿儞僌寢壥偺壜帇壔 yRecoveredCurve = polyval(P,x); figure plot(x,yRecoveredCurve,'-g','LineWidth',3) hold on plot(x(inlierIdx),y(inlierIdx),'.',x(~inlierIdx),y(~inlierIdx),'ro') legend('嬋慄','Inlier揰','Outlier揰(奜傟抣)') hold off %% 擟堄偺悢幃儌僨儖傊偺僼傿僢僥傿儞僌 %% 僼傿僢僥傿儞僌懳徾偺奜傟抣傪娷傓揰孮傪儘乕僪 load pointsForLineFitting.mat plot(points(:,1),points(:,2),'o'); hold on shg; %% 嵟彫擇忔朄偱僼傿僢僥傿儞僌 % 奜傟抣偵堷偭挘傜傟偰偆傑偔僼傿僢僥傿儞僌偱偒側偄 modelLeastSquares = polyfit(points(:,1),points(:,2),1); x = [min(points(:,1)) max(points(:,1))]; y = modelLeastSquares(1)*x + modelLeastSquares(2); plot(x,y,'r-') shg; %% RANSAC(MSAC)偺僼傿僢僥傿儞僌娭悢偲昡壙娭悢傪愝掕 fitLineFcn = @(points) polyfit(points(:,1),points(:,2),1); % plyfit傪僼傿僢僥傿儞僌娭悢偵偡傞 evalLineFcn = ... % 嬋慄偲揰偺嫍棧傪寁嶼偡傞娭悢 @(model, points) sum((points(:, 2) - polyval(model, points(:,1))).^2,2); %% RANSAC偱僼傿僢僥傿儞僌 sampleSize = 2; % RANSAC偺1儖乕僾偱僒儞僾儕儞僌偡傞揰悢 maxDistance = 2; % inlier(奜傟抣偱側偄)偲傒側偡儌僨儖偐傜偺嫍棧 [modelRANSAC, inlierIdx] = ransac(points,fitLineFcn,evalLineFcn, ... sampleSize,maxDistance); modelRANSAC %% inliner偺揰偩偗傪巊偭偰嵞搙丄plyfit偱嵟彫擇忔僼傿僢僥傿儞僌 modelInliers = polyfit(points(inlierIdx,1),points(inlierIdx,2),1); %% 寢壥偺壜帇壔 inlierPts = points(inlierIdx,:); x = [min(inlierPts(:,1)) max(inlierPts(:,1))]; y = modelInliers(1)*x + modelInliers(2); plot(x, y, 'g-') legend('奜傟抣傪娷傓娤應揰','嵟彫擇忔僼傿僢僥傿儞僌','RANSAC偵傛傞儘僶僗僩僼傿僢僥傿儞僌'); hold off shg; %% % Copyright 2018 The MathWorks, Inc.