我一直在尝试在图片中找到抛物线。为了起步,我拍了一张有黑色抛物线的白色背景图片。然后使用“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,分别为
a = 0.0100
b = -1.6800
c = 254.1900
其中a、b和c分别代表:
a*x^2 + b*x + c = y;
现在我已经得到了方程,通过放入系数值并取出来绘制抛物线。
xx = 1:300;
yy = a*xx.^2 + b*xx +c ;
然后我在图像上绘制抛物线,如下:
plot(xx,yy,'-');
为了确认我选择的点是正确的,我在图像上绘制了选定的点,它们恰好位于图像中的抛物线上。所以这不是问题。
问题如下:
1. 我绘制的抛物线(蓝色)不在图像中的抛物线(黑色)上。 2. 当我将x坐标的值放入上述方程时,y的值与y坐标的值不同。
例如:(104,137) 0.0100*104*104 -1.68*104 + 254.19 = 108.16 - 174.72 + 254.19 = 187.63,而应该是137。
我的抛物线是错误的。任何帮助都将不胜感激。图片如下:
![parabola from the equation(blue) plotted on the image(black)](https://istack.dev59.com/FV1Ub.webp)
polyfit
函数。 - Andrey Rubshtein[p, S, mu] = polyfit(x,y,n)
是拟合抛物线的一种稳健方式。 - Buck Thorn