天天看点

matlab作抛物线,在matlab中查找和绘制抛物线

我一直试图在图像中找到抛物线.为了起始目的,我在白色背景上拍摄了带有黑色抛物线的图像.然后我使用find命令在图像上找到了黑色像素

[yi xi] = find(im<10); % im is the image with black parabola and white background

之后,我从集合中随机取3分并使用符号工具箱解决了抛物线的等式

syms x y;

%solve them for the parabola equation

A = [ x^2 x y 1 ;x0^2 x0 y0 1; x1^2 x1 y1 1; x2^2 x2 y2 1];

哪里

%(x0,y0) = (104,137)

%(x1,y1) = (244,161)

%(x2,y2) = (300,229)

S = solve(det(A),y);

然后我得到系数a,b,c as

a = 0.0100

b = -1.6800

c = 254.1900

其中a,b和c是

a*x^2 + b*x + c = y;

从现在开始我已经得到了eqn,我通过设置系数值来绘制抛物线

并采取

xx = 1:300;

yy = a*xx.^2 + b*xx +c ;

然后我在图像上绘制抛物线

plot(xx,yy,'-');

为了确认我已经采用了正确的点,我还绘制了图像上的选定点,它们恰好位于图像中的抛物线上.所以这不是问题.

问题是:

>我绘制的抛物线(蓝色)不在图像的抛物线上(黑色).

>当我将x坐标的值放在上面的等式中时. y的值与y坐标的值不同.

for eg: (104,137)

0.0100*104*104 -1.68*104 + 254.19 = 108.16 – 174.72 + 254.19 = 187.63

whereas it should be 137

我的抛物线错了.任何帮助将不胜感激.图像是

最佳答案 我认为你必须在计算a,b和c的某个地方四舍五入.

我使用函数fit(使用fit类型poly2)得到了你提到的三个点,而我的a,b,c是0.0053,-1.6802和254.1895(或者当使用format long时添加更多的小数位).

同样,当你使用相同的代码时,求解的输出是:

S = (73*x^2)/13720 - (5763*x)/3430 + 87187/343

S2 = double(coeffs(S))

S2 =

254.1895 -1.6802 0.0053

这给了我与fit / poly2相同的a,b和c(仅从看它,73/13720的输出不能是0.01).此外,如果我使用您给出的相同代码在原始点上绘制此曲线,则可以正常工作.因此,我能看到的唯一剩余的错误来源是用于从求解的输出中提取a,b和c的值的任何代码中的某种舍入.