隨機一致性檢測RANSAC

2021-08-02 21:15:07 字數 1944 閱讀 9372

隨機一致性取樣ransac是一種魯棒的模型擬合

演算法,能夠從有外點的資料中擬合準確的模型。

它的原理很樸素就是從樣本資料中找到具有一致性的資料,用這些資料去建立樣本的數學模型。這個一致性怎麼理解?我的理解是:如果按照聚類處理方式,一致性資料就是可以歸為一類的資料,他們最相近。俗話說:物以類聚,人以群分。非我族類,其心必異。

演算法的詳細原理及說明在維基上很詳細,不贅述。維基上給的是乙個直線隨機一致性檢測,而且還提供了matlab演示**,這個**有幾步關鍵的地方,由於是採用matlab矩陣快速操作風格寫的有點晦澀,當時我看這個**後還做了些註解,後來維基採用了我的那部分註解。

維基隨機一致性演算法**:

下面是我根據演算法原理利用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 iterbestpointsnum)&&(inliernum>=mininliernum)

bestpointsset=zeros(2,datalen);

bestpointsnum=inliernum;

bestpointsset(:,inlierindex)=data(:,inlierindex);

enditer=iter+1;

endbestpointsset(:,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 隨機取樣一致性演算法

ransac範例的正式描述如下 首先,要給定 1乙個模型,該模型需要最少n個資料點去例項化它的自由引數 2一組資料點p,p中包含資料點的數量 p 大於n。然後,從p中隨機地選擇n個點 組成p的乙個子集s1 並例項化這個模型 構造成m1 接下來,利用例項化的模型m1去測定p中點的某個子集s1 這些點相...

隨機取樣一致性演算法RANSAC

作用1 點雲分割通過 空間平面 直線 二維或三維圓 圓球 錐體等模型 進行分割。作用2 點雲的配準對的剔除 例子 五個點雲,三個配準,利用ransac可以剔除另外兩個 演算法簡介 從樣本中抽取乙個子集,通過該演算法最小方差對這個樣本計算出這個該模型的引數 例如模型是一條直線,那麼計算該樣本所有的點到...

隨機抽樣一致性演算法(RANSAC)

隨機抽樣一致性演算法 ransac 以下都是個人對於ransac的一些認識,可能有比較大的問題,望大家批評指正。應用的範圍 主要在散點圖中獲得乙個已知模型的引數,使得符合這個模型引數的點最多。散點圖由局內點和局外點之分,當散點在模型上時則是局內點,如果在模型外則為局外點。ransac的目標是找尋乙個...