如何在图像中找到矩形的角坐标

时间:2012-04-12 16:09:16

标签: image-processing

我在预处理原始图像后得到了这个图像。现在,我的问题是如何获得矩形的四个角坐标(最大)。对不起,如果这是noob问题。

enter image description here

更新:由于我使用OpenCV开发,最终使用this answer

1 个答案:

答案 0 :(得分:6)

一种简单的方法是:

  1. 查找所有连接的组件
  2. 计算每个组件的凸包
  3. 选择凸包具有最大面积的组件
  4. 简化凸包多边形
  5. 简化多边形的顶点是您要查找的点
  6. 快速和肮脏的Mathematica解决方案:

    (* find all connected components, calculate the convex hull for each component *)
    convexHulls = ComponentMeasurements[ColorNegate[Binarize[src]], {"ConvexArea", "ConvexVertices"}];
    
    (* pick the component where the convex hull has the largest area *)
    vertices = SortBy[convexHulls[[All, 2]], First][[-1, 2]]
    
    (* simplify the convex hull polygon, by iteratively removing the vertex with the lowest distance to the line through the vertex before and after it *)
    distanceToNeighbors[vertices_] := MapThread[Abs[(#1 - #2).Cross[#1 - #3]/Norm[#1 - #3]]&, RotateLeft[vertices, #] & /@ {-1, 0, 1}]
    removeVertexWithLowestDistance[vertices_] := With[{removeIndex = Ordering[distanceToNeighbors[vertices], 1]}, Drop[vertices, removeIndex]]
    verticesSimplified = NestWhile[removeVertexWithLowestDistance, vertices, Min[distanceToNeighbors[#]] < 10&]
    
    (* the vertices of the simplified polygon are the points you're looking for *)
    Show[src, Graphics[
      {
       {EdgeForm[Red], Transparent, Polygon[verticesSimplified]},
       {Red, PointSize[Large], Point[verticesSimplified]}
       }]]
    

    Result