How to decrease the number of points in a shape?
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Johnny A
am 27 Sep. 2016
Beantwortet: Image Analyst
am 2 Jun. 2022
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 Kommentare
Massimo Zanetti
am 27 Sep. 2016
Is it you shape convex? In this case your shape just coincide with its convex hull.
Akzeptierte Antwort
Massimo Zanetti
am 28 Sep. 2016
Bearbeitet: Massimo Zanetti
am 28 Sep. 2016
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.
Weitere Antworten (2)
Image Analyst
am 28 Sep. 2016
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 Kommentare
Image Analyst
am 2 Jun. 2022
reducepoly
Reduce density of points in ROI using Ramer–Douglas–Peucker algorithm
Syntax
Description
0 Kommentare
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!