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