我使用Matlab中的以下代码绘制二阶多项式:
xx = 1 : 4000;
mu = 1.0e+03 * [ 2.0733; 0.6569];
b = 198;
P = [2.5577, -1.0134, 102.4344];
figure;imshow(img,'border','tight');
hold on;
plot(xx,polyval(P,xx,[],mu)+b,'LineWidth',1.5,'Color','r');
结果如下图所示:
但是,如果我注释掉figure;imshow(img,'border','tight');
,它会显示以下曲线:
首先,我不知道为什么这两个图有所不同,哪个是多项式的正确图。
其次,我寻找图1中所示物体弯曲程度的度量,这样我就可以比较两个具有低或高弯曲度(曲率)的物体。但是,我不知道如何从多项式公式中提取这样的度量。我尝试使用系数x^2
(P(2)),但我不确定它是否是图1中曲线的代表,因为图2显示了不同的东西。
答案 0 :(得分:3)
第一部分:如果您指的是曲率符号,您应该注意到图像或矩阵中的坐标系以及绘图的坐标系。当我们plot
时,如您的绘图中,通常左下角对应于x轴和y轴的最小值。而在image coordinate system中,你有类似的东西:
协调(带行和列索引)从左上角开始。
两条曲线之间的另一个视觉差异是它们的绝对曲率,这是由于除了轴限制之外的其他因素。如果将轴限制设置为相等,则会看到两条同样弯曲的曲线。为此,请使用xlim
和ylim
。
第二部分:如果要量化应用于系统的负载/压力/重量,系数x^2
的绝对值为monotonic variable。因此,您可以单独依赖它并通过对系统施加不同的已知应力来校准它。
答案 1 :(得分:1)
曲率半径为(1 +(dy / dx)^ 2)^ 3/2 d ^ 2y / dx ^ 2.
或者把它放入伪代码
/*
curvature of ax*x + b*x + c, given x
*/
curvaturequad(a, b, c, x)
{
dybydx = 2*a*x + b; // first derivative
d2ybydx2 = 2 * a; // second derivative
dybydx2 = dybydx*dybybx;
numerator = sqrt(dybydx2 + 1)*(dybydx +1);
return numerator / d2ybydx2;
}