你好朋友......。
我试图找到图像绿色区域中物体外线的角度,如上图所示......
为此,我扫描了绿色区域并获得了点(图中所示的深蓝色点)......
你可以看到点不直线所以我不能轻易找到角度......
所以我想我必须找到中途和 那就是找到一条线,这样每个点和线之间的距离尽可能保持最小......
那么如何找到线条以便每个点暴露最小距离 ......?
有没有这方面的算法或除此之外有什么好办法吗?
答案 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)
霍夫变换可能也是一个不错的选择:
答案 3 :(得分:1)
x上y或y上x的标准最小二乘回归公式假设一个坐标中没有误差,并最小化坐标与线的偏差。
然而,完全可以设置最小二乘法计算,使得最小化值是点与线的垂直距离的平方和。我不确定我是否可以找到我做数学的笔记本 - 这是二十多年前 - 但我确实找到了我当时编写的代码来实现算法。
使用:
您可以计算x和y的方差以及协方差:
现在,如果协方差为0,那么就没有任何相似之处。否则,斜率和截距可以从以下位置找到:
其中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的协方差矩阵