线路通过给定点以便

时间:2011-04-09 07:47:59

标签: algorithm math image-processing geometry line

enter image description here 你好朋友......。

我试图找到图像绿色区域中物体外线的角度,如上图所示......

为此,我扫描了绿色区域并获得了点(图中所示的深蓝色点)......

你可以看到点不直线所以我不能轻易找到角度......

所以我想我必须找到中途和 那就是找到一条线,这样每个点和线之间的距离尽可能保持最小......

那么如何找到线条以便每个点暴露最小距离 ......?

有没有这方面的算法或除此之外有什么好办法吗?

5 个答案:

答案 0 :(得分:5)

明显的路线是通过积分做least-squares linear regression

答案 1 :(得分:1)

显然该线将通过平均点(x_average,y_average)。

对于方向,您可以使用以下算法(直接从最小化线和点之间的平均平方距离得出):

dx[i]=x[i]-x_average;
dy[i]=y[i]-y_average;

a=sum(dx[i]^2-dy[i]^2);
b=sum(2*dx[i]*dy[i]);

direction=atan2(b,a);

通常的线性回归在这里不起作用,因为它假定变量不对称 - 一个取决于其他变量,所以如果你要交换x和y,你将有另一个解决方案。

答案 2 :(得分:1)

霍夫变换可能也是一个不错的选择:

http://en.wikipedia.org/wiki/Hough_transform

答案 3 :(得分:1)

x上y或y上x的标准最小二乘回归公式假设一个坐标中没有误差,并最小化坐标与线的偏差。

然而,完全可以设置最小二乘法计算,使得最小化值是点与线的垂直距离的平方和。我不确定我是否可以找到我做数学的笔记本 - 这是二十多年前 - 但我确实找到了我当时编写的代码来实现算法。

使用:

  • n =Σ1
  • sx =Σx
  • sx2 =Σx 2
  • sy =Σy
  • sy2 =Σy 2
  • sxy =Σx·y

您可以计算x和y的方差以及协方差:

  • v x = sx2 - ((sx * sx)/ n)
  • v y = sy2 - ((sy * sy)/ n)
  • v xy = sxy - ((sx * sy)/ n)

现在,如果协方差为0,那么就没有任何相似之处。否则,斜率和截距可以从以下位置找到:

  • 斜率 = quad ((vx - vy)/ vxy,vxy)
  • intcpt =(sy - slope * sx)/ n

其中quad()是计算二次方程 x 2 + b·x - 1 的根的函数,其符号与c相同。在C中,那将是:

double quad(double b, double c)
{
    double b1;
    double q;

    b1 = sqrt(b * b + 4.0);
    if (c < 0.0)
        q = -(b1 + b) / 2;
    else
        q = (b1 - b) / 2;
    return (q);
}

从那里,你可以很容易地找到你的线的角度。

答案 4 :(得分:0)

您可以尝试搜索&#34;总最小二乘&#34;或&#34;最小正交距离&#34;但是当我尝试时,我没有看到任何立即适用的东西。

无论如何,假设你有点x [],y [],并且该线由* x + b * y + c = 0表示,其中hypot(a,b)= 1.最小正交距离线是最小化Sum {(a * x [i] + b * y [i] + c)^ 2}的那个。一些代数表明:

c是 - (a * X + b * Y)其中X是x的平均值,Y是y的平均值。

(a,b)是C的特征向量,对应于它的较小特征值,其中C是x&s和y&#39的协方差矩阵