2012-04-12 2 views
3

Я получил это изображение после предварительной обработки исходного изображения. Теперь, мой вопрос заключается в том, как я могу получить четыре угловых координаты прямоугольника (наибольшего). Извините, если это так.Как найти угловые координаты прямоугольника в изображении

enter image description here

Update: Так как я разрабатываю с OpenCV, в конечном итоге, используя this answer

ответ

6

Один простой способ будет заключаться в следующем:

  1. найти все связные компоненты
  2. вычисления выпуклой оболочки для каждого компонента
  3. выберите компонент, в котором выпуклый корпус имеет наибольший Площадь
  4. упростить оконтуривающий многоугольник
  5. вершиной упрощенного многоугольника являются точками вы ищете

Быстрого & грязного раствора 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

+0

Кажется как отличное решение. Благодаря! –

Смежные вопросы