3

目前我已经检测到图像中的边缘,并且我计划使用霍夫变换从边缘中提取线段。一旦我有了这些部分,我就计划找到两个部分交叉的角落。有没有一种算法可以从角落检测矩形?假设我检测到了四个角,是否可以在知道矩形有 4 个直角的情况下获得四个角组成的矩形边的相对长度?

我想这样做的原因是我可以提取矩形绑定的纹理并将其绘制为屏幕上的平面矩形。

编辑:感谢到目前为止的答案,我认为我应该更清楚地解释我的问题,因为我认为我被误解了。我实际上是在尝试将扭曲的矩形转换为扁平矩形。我阅读了一些 aforge 文章并看到了这个功能:链接。我想知道是否可以仅从 4 个角确定矩形边之间的比率?

4

3 回答 3

3

您已经在使用所需的工具 - Hough 变换

霍夫变换的标准公式用于通过从图像空间转换到可能线(x,y)(theta,d)解空间来识别图像中的线。

(x,y)您可以通过从图像空间转换到可能矩形的解空间来执行相同的操作来识别候选矩形(theta,d,width,height,rotation)

采用这种方法可以保留 Hough 变换的优势,以处理图像中的部分可见特征 - 使用 Hough 变换识别边缘并将这些边缘组合成矩形的两步方法将无法识别矩形,如果一个边缘或角落足够模糊。

于 2011-10-25T23:52:25.537 回答
0

试试这个兄弟:

http://www.emgu.com/wiki/index.php/Shape_(Triangle,_Rectangle,_Circle,_Line)_Detection_in_CSharp

玩得开心编码:)

于 2011-11-17T22:11:00.113 回答
0

她是一些代码,可用于使用 AForge.NET Framework 检测图像中的四边形:

// get angles between 2 pairs of opposite sides
float angleBetween1stPair = Tools.GetAngleBetweenLines(corners[0], corners[1], corners[2], corners[3]);
float angleBetween2ndPair = Tools.GetAngleBetweenLines(corners[1], corners[2], corners[3], corners[0]);

// check 1st pair for parallelism
if (angleBetween1stPair <= angleError)
{
    subType = PolygonSubType.Trapezoid;

    // check 2nd pair for parallelism
    if (angleBetween2ndPair <= angleError)
    {
        subType = PolygonSubType.Parallelogram;

        // check angle between adjacent sides
        if (Math.Abs(Tools.GetAngleBetweenVectors(corners[1], corners[0], corners[2]) - 90) <= angleError)
            subType = PolygonSubType.Rectangle;

        //get length of 2 adjacent sides
        float side1Length = (float)corners[0].DistanceTo( corners[1] );
        float side2Length = (float)corners[0].DistanceTo( corners[3] );

        if (Math.Abs(side1Length - side2Length) <= maxLengthDiff)
            subType = (subType == PolygonSubType.Parallelogram) ? PolygonSubType.Rhombus : PolygonSubType.Square;
    }
}
else
{
    // check 2nd pair for parallelism - last chence to detect trapezoid
    if (angleBetween2ndPair <= angleError)
    {
        subType = PolygonSubType.Trapezoid;
    }
}

有关如何检测各种形状的示例,请参阅本文:
http ://www.aforgenet.com/articles/shape_checker/

这是下载 AForge.NET 框架的链接:
http ://www.aforgenet.com/framework/downloads.html

于 2011-10-25T23:29:17.960 回答