一种比较厉害的加计算方法:https://blog.csdn.net/ydy1107/article/details/121355836
1. 核心思想:俩个不平行的直线的交点就是消失点
代码地址:https://github.com/KEDIARAHUL135/VanishingPoint
2.算法流程
我们将计算和发现使用之前发现的线条的图像的消失点。
这一节涉及与线(它们的交点和它们的距离)有关的基本数学从一个点)和一个小的逻辑。
// 我们在这里要做的是,我们将使用两个线的组合,然后找到它们交点。这个交点可以是消失点,因为它期望线在消失点附近收敛。但这里有一个问题,就是有很多lines (我们的最大值是15),所以两条线的这种交点的数量可以导致许多不同的
点。那么我们如何在这些点中找到最接近实际的消失点?
为此,我们在逻辑中引入了一个“误差”因素。误差基本上是这个点到每条直线距离的平方和的平方根 。相对应的点最小误差值可能是最接近消失点的值,因此我们计算出了消失点。
下面展示了两线相交后的计算点错误值。这里我们仅以3条lines为例。
我们取直线L1和L2它们的交点是(x0, y0),直线方程L1是y = m1x + c1直线L2的方程是y = m2x +c2。
计算L1和L2的交点(x0,y0):

我们现在会找到这一点到直线L的距离,直线L的方程是y = m*x + c,为此,我们设直线L_ (L破折号)(方程:y = m_*x + c_)垂直于L,并通过这个点 (x0, y0)。直线L_与直线L的交点为(x_, y_),即点的距离(x0, y0)到直线L的距离是 d= (x0, y0)到(x_, y_)的距离。这些点在直线L处的误差值是这些点的平方和的根如图所示。
计算L1和L2的交点(x0,y0)到直线L的距离:

int* GetVanishingPoint(std::vector<std::vector<double>> Lines)
{
// We will apply RANSAC inspired algorithm for this.We will take combination
// of 2 lines one by one, find their intersection point, and calculate the
// total error(loss) of that point.Error of the point means root of sum of
// squares of distance of that point from each line.
int* VanishingPoint = new int[<

这篇博客介绍了一种利用RANSAC算法来计算图像中不平行直线交点作为消失点的方法。通过组合两条直线,找出它们的交点并计算其与所有直线的总误差,最终确定最接近消失点的位置。文章还给出了详细的代码实现和实例分析。

3万+

被折叠的 条评论
为什么被折叠?



