我一直试图在图像中找到抛物线.为了起始目的,我在白色背景上拍摄了带有黑色抛物线的图像.然后我使用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的值的任何代码中的某种舍入.