How can i convert a polygon into a rectangle?
조회 수: 12 (최근 30일)
이전 댓글 표시
I have a 4 side polygon that i draw on a video frame. I would like to take this polygon and make it a rectangle so i will be able to treat it as a matrix.I want to take the smallest rectangle i can have but still be as close as i can to the original vertices. Can anyone help me with that please? I've been trying to do it for a several days and with no success. Keep in mind that my polygon can be completely not parallel to the axes and in that case i want to get a rectangle that is also not parallel to the axes.
댓글 수: 0
채택된 답변
Image Analyst
2013년 9월 17일
It's not trivial. But luckily John D'Errico has done it for you. See his File Exchange: http://www.mathworks.com/matlabcentral/fileexchange/34767-a-suite-of-minimal-bounding-objects
댓글 수: 14
Simon
2013년 9월 17일
As far as I see it is not obvious what the smallest rectangle that still contains the polygon is. One way is
- search for the longest side of the polygon
- Take this side as the base of the new rectangle (has two points in common with the polygon)
- Get the distance of the furthermost remaining point
- Construct the opposite edge of the rectangle, crossing this point
- Construct the remaining two connecting edges perpendicular to the first edge
This will give you a rectangle with small size (I don't know if it is the minimum size!). And it is all pure 2d-geometry, easy to implement, nothing fancy
Image Analyst
2013년 9월 17일
I haven't used John's function for rectangle but I imagine it would give the coordinates of the corners. If there are 5 instead of 4 it could be because the last point is the same as the first point to "close off" the rectangle instead of it being a "U" shape.
Imagine that you put a box around your points. Now, as you rotate the box around your points, the sides of the box will have to lengthen or shorten to still contain your points. With one of those shapes of boxes, the area will be a minimum. That is the box he returns to you.
추가 답변 (1개)
Simon
2013년 9월 17일
Hi!
You have your polygon coordinates in (x/y) pairs? Take their min/max values and cut from the video frame the rectangle R(xmin:xmax, ymin:ymax).
Maybe you post your code, then it's easier to help.
댓글 수: 3
Simon
2013년 9월 17일
Hi!
You have your variable "pos". Now you get the minimum and maximum x and y values. This are the coordinates of your rectangle, it contains all polygons.
Image Analyst
2013년 9월 17일
Simon is saying to use the "bounding box" of your polygon, which will have be aligned with the axes and probably larger than what I suggested. What I suggested may give a tilted rectangle but it will have a smaller size than the bounding box.
참고 항목
카테고리
Help Center 및 File Exchange에서 Point Cloud Processing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!