matlab中實現RANSAC平面擬合

2021-08-04 14:52:28 字數 1325 閱讀 5623

%%%三維平面擬合

%%%生成隨機資料

%內點mu=[0 0 0];  %均值

s=[2 0 4;0 4 0;4 0 8];  %協方差

data1=mvnrnd(mu,s,300);   %產生200個高斯分布資料

%外點mu=[2 2 2];

s=[8 1 4;1 8 2;4 2 8];  %協方差

data2=mvnrnd(mu,s,100);     %產生100個雜訊資料

%合併資料

data=[data1',data2'];

iter = 1000; 

%%% 繪製資料點

figure;plot3(data(1,:),data(2,:),data(3,:),'o');hold on; % 顯示資料點

number = size(data,2); % 總點數

bestparameter1=0; bestparameter2=0; bestparameter3=0; % 最佳匹配的引數

sigma = 1;

pretotal=0;     %符合擬合模型的資料的個數

for i=1:iter

%%% 隨機選擇三個點

idx = randperm(number,3); 

sample = data(:,idx); 

%%%擬合直線方程 z=ax+by+c

plane = zeros(1,3);

x = sample(:, 1);

y = sample(:, 2);

z = sample(:, 3);

a = ((z(1)-z(2))*(y(1)-y(3)) - (z(1)-z(3))*(y(1)-y(2)))/((x(1)-x(2))*(y(1)-y(3)) - (x(1)-x(3))*(y(1)-y(2)));

b = ((z(1) - z(3)) - a * (x(1) - x(3)))/(y(1)-y(3));

c = z(1) - a * x(1) - b * y(1);

plane = [a b -1 c]

mask=abs(plane*[data; ones(1,size(data,2))]);    %求每個資料到擬合平面的距離

total=sum(maskpretotal            %找到符合擬合平面資料最多的擬合平面

pretotal=total;

bestplane=plane;          %找到最好的擬合平面

end  

end%顯示符合最佳擬合的資料

mask=abs(bestplane*[data; ones(1,size(data,2))])

RANSAC演算法MATLAB實驗

ransac是 random sample consensus 隨機抽樣一致 的縮寫。它可以從一組包含 局外點 的觀測資料集中,通過迭代方式估計數學模型的引數。它是一種不確定的演算法 它有一定的概率得出乙個合理的結果 為了提高概率必須提高迭代次數。該演算法最早由fischler和bolles於198...

matlab學習筆記(九) RANSAC

隨機抽樣一致演算法 random sample consensus 多檢視幾何p73 1 思想 隨機選擇兩點,定義一條直線,該線的支集由一定距離閾值內的點數目來度量。重複多次這樣的隨機選擇,具有最大支集的線被認為是魯棒擬合,在距離閾值以內的點稱為內點 組成一致集 反之稱為野值。2 演算法框圖 目標乙...

SURF演算法中的ransac演算法

就是首先隨機抽取觀測資料子集,我們假設視為這子集就是 內點 局內點或者局內資料 然後用這子集進行相關的擬合來計算模型引數 或者估計函式 找到這模型 或者函式 以後,利用觀測點 資料 進行是否正確,如果求出來的模型能夠滿足足夠多的資料,我們視為很正確的資料。最後我們採納。但是,如果不適合,也就是說求出...