How to decrease the number of points in a shape?
조회 수: 11 (최근 30일)
이전 댓글 표시
Hi, I would like to know if it is possible to decrease the number of points (x,y) in a shape , using Matlab, in order to obtain the minimum number of points needed to plot/describe exactly the same shape. How to automate this process via Matlab? Thanks
댓글 수: 2
Massimo Zanetti
2016년 9월 27일
Is it you shape convex? In this case your shape just coincide with its convex hull.
채택된 답변
Massimo Zanetti
2016년 9월 28일
편집: Massimo Zanetti
2016년 9월 28일
Since your shape is not convex, you cannot use convexhull trick. Here is the piece of code to eliminate collinear points.
a=x(:)';
b=y(:)';
before=numel(a);
after=before+1;
tol=1e-5;
while after~=before
fprintf('before: %d after: %d \n',before,after);
before=numel(a);
X=[a(1:end-1);a(2:end);[a(3:end),a(1)]];
Y=[b(1:end-1);b(2:end);[b(3:end),b(1)]];
A=polyarea(X,Y);
I=[false,abs(A)<tol];
a(I)=[];
b(I)=[];
after=numel(a);
end
plot(x,y,'b.',a,b,'ro');
It exploits the fact that 3 (almost) collinear points define a very small area. See result in the image.
If you want to only remove the points that are "perfectly" collinear, then replace
I=[false,abs(A)<tol];
with
I=[false,A==0];
But in your case you would just erase a few points.
추가 답변 (2개)
Image Analyst
2016년 9월 28일
You want what's called "the minimum perimeter polygon". I think this paper discussing it will help you : http://dip.sun.ac.za/~hanno/tw444/lesings/lesing_19.pdf
It will also be interesting to try Massimo's clever algorithm. Adjust "tol" to adjust the amount of departure from a straight line you'd like to tolerate.
댓글 수: 0
Image Analyst
2022년 6월 2일
reducepoly
Reduce density of points in ROI using Ramer–Douglas–Peucker algorithm
Syntax
Description
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!