Matlab

时间:2016-10-13 12:04:33

标签: image matlab plot polynomials

我使用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');

结果如下图所示:

enter image description here

但是,如果我注释掉figure;imshow(img,'border','tight');,它会显示以下曲线:

enter image description here

首先,我不知道为什么这两个图有所不同,哪个是多项式的正确图。

其次,我寻找图1中所示物体弯曲程度的度量,这样我就可以比较两个具有低或高弯曲度(曲率)的物体。但是,我不知道如何从多项式公式中提取这样的度量。我尝试使用系数x^2(P(2)),但我不确定它是否是图1中曲线的代表,因为图2显示了不同的东西。

2 个答案:

答案 0 :(得分:3)

第一部分:如果您指的是曲率符号,您应该注意到图像或矩阵中的坐标系以及绘图的坐标系。当我们plot时,如您的绘图中,通常左下角对应于x轴和y轴的最小值。而在image coordinate system中,你有类似的东西:

协调(带行和列索引)从左上角开始。

两条曲线之间的另一个视觉差异是它们的绝对曲率,这是由于除了轴限制之外的其他因素。如果将轴限制设置为相等,则会看到两条同样弯曲的曲线。为此,请使用xlimylim

第二部分:如果要量化应用于系统的负载/压力/重量,系数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;
     }