matlab 擬合橢圓
自負而又不自信的人會怎樣?
會給你的生活帶來怎樣的影響?
從昨天到今天,我一直在用matlab做一個擬合橢圓的例子:從一開始,不想借用matlab的函式,到後來,呼叫lsqcurvefit 和lsqnonlin這兩個非線性擬合函式不成功,到最後,還是借了同事的code來看,再反看自己的code,其實也可以擬合出。
問題在於:我打心眼兒裡不相信自己能做到,所以當我看到:
p =
1.0e-06 *
-0.0000 -0.0000 -0.0000 0.0023 0.0027 -0.5831
類似這樣的擬合結果時,我認定了這樣的係數是錯誤的。
I = imread('ellipse.BMP');
imshow(I);
hold on
[x,y] = ginput(15);
ellipsefit = @(a,x,y)a(1).*x.*x+a(2).*y.*y+a(3).*x.*y+a(4).*x+a(5).*y+a(6);
a0 = [1 1 1 1 1 1];
options = optimoptions('lsqnonlin');
p = lsqnonlin(@ellipsefit,a0,[],[],options,x,y); %其實對於這個函式,我還是沒有搞得很清楚
plot(XDATA,YDATA,'xr')
syms x y
conic = p(1)*x^2+p(2)*y^2+p(3)*x*y+p(4)*x+p(5)*y+p(6);
c = ezplot(conic,[0,640],[0,480]);
set(c, 'Color', 'Green');
結果:
同事code
I = imread('ellipse.BMP');
Ig = rgb2gray(I);
imshow(Ig);
hold on
conicP = ginput(15);
plot(conicP(:,1)', conicP(:,2)', 'xr'); %drawing sample points
a0 = [1 1 1 1 1 1];
f = @(a,x)a(1)*x(:,1).^2+a(2)*x(:,2).^2+a(3)*x(:,1).*x(:,2)+a(4)*x(:,1)+a(5)*x(:,2)+a(6);
p = nlinfit(conicP, zeros(size(conicP, 1), 1), f, a0);
syms x y
conic = p(1)*x^2+p(2)*y^2+p(3)*x*y+p(4)*x+p(5)*y+p(6);
c = ezplot(conic,[0,1152],[0,648]);
set(c, 'Color', 'Green');
結果:
結果誤差還挺大的~~~~~~