# Convert binary ROI to polygon

조회 수: 54 (최근 30일)
Jurgen . 2016년 4월 22일
댓글: Image Analyst . 2016년 4월 23일
I have a binary image with a concave polygon drawn in a paint application. Using find() I get a set of points, but they aren't ordered so all the MATLAB polygon functions choke on them. How do I go about turning my 2D line-mask into a proper polygon variable?
Edit2: It was drawn with 1px pencil in a continuous motion, then 'cleaned' with bwareaopen(). So each pixel should have at most 2 neighbours. 댓글을 달려면 로그인하십시오.

### 채택된 답변

Walter Roberson 2016년 4월 22일
편집: Walter Roberson 님. 2016년 4월 22일

댓글을 달려면 로그인하십시오.

### 추가 답변 (2개)

Alessandro Masullo 2016년 4월 22일
편집: Alessandro Masullo 님. 2016년 4월 22일
You can use bwboundaries to get the boundaries of a binary image.
If you want to sort them, you can evaluate the centre of your points, the angle between each point and the centre and then sort all the points by the angle.
If you just want a rough estimation of the polygon, instead, you can use the douglas-peucker simplification algorithm (already coded in matlab or from the file exchange)
##### 댓글 수: 1표시 없음숨기기 없음
Jurgen 2016년 4월 22일
I think the centering trick only works if the reference point is inside the polygon, which in my case is true, but it isn't true for all concave polygons.

댓글을 달려면 로그인하십시오.

Image Analyst 2016년 4월 22일
bwboundaries() gives you an ordered set of coordinates as you move along the perimeter of your shape. I don't think you should need to do any other kind of sorting. For example, a list of coordinates from bwboundaries can be used in poly2mask() and polyarea(), etc. Here's a snippet from my tutorial:
hold on;
boundaries = bwboundaries(binaryImage);
numberOfBoundaries = size(boundaries, 1);
for k = 1 : numberOfBoundaries
thisBoundary = boundaries{k};
plot(thisBoundary(:,2), thisBoundary(:,1), 'g', 'LineWidth', 2);
end
hold off;
Note that x = thisBoundary(:,2), and y = thisBoundary(:,1) -- perhaps backward from what you might think, but it gives (row, column), which is (y,x), not (x,y).
##### 댓글 수: 4표시 이전 댓글 수: 3숨기기 이전 댓글 수: 3
Image Analyst 2016년 4월 23일
Yes, to erode, use imerode(). Also look at strel() to see the different shapes you can have for the structuring element.

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 ROI-Based Processing에 대해 자세히 알아보기

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!