Clear Filters
Clear Filters

How to select, or filter, the external border/boundary in a set of (x,y)-points?

8 views (last 30 days)
Given two or more set of points (please see attached, as example, two sets of points called "b1" and "b2", that are stored in "borders.mat"), how can I select or filter the common external border/boundary from the union of those point datasets?
After joining the two datasets, I would like to keep only the points that represent the total common external border (i.e. removing any common set of points or any "internal" point). Here, in this example, I show only two set of points, but I have many of them.
hold on

Accepted Answer

Dyuman Joshi
Dyuman Joshi on 10 Jul 2023
%Original figure
hold on
%Obtain coordinates corresponding to outside border by performing
%exclusive OR on the data
%'stable' option is to maintain the order of the coordinates
%plot the boundary

More Answers (1)

MarKf on 10 Jul 2023
As in
borders = load(websave('rd', ""));
b1 = borders.b1; b2 = borders.b2;
idx_common = ismember(b1,b2,'rows');
coordsincommon = b1(idx_common,:); %169
It seems that they are the exact same coordinates, so this works, tho I haven't checked if it captures them all, otherwise there is also ismembertol
Sim on 11 Jul 2023
Hi @MarKf! Thanks for your reply! I tried to compare both methods here proposed, but, unless I misinterpreted your method or I did something wrong, I do not get the desired result.... :-)
% Load data
borders = load(websave('rd', ""));
b1 = borders.b1; b2 = borders.b2;
% Dyuman Joshi's Method
% MarKf's Method
MarKf on 7 Aug 2023
Yeah the accepted answer is what you want more straightfowardly, setxor being the opposite of ismember (very useful but there is no tolerance version).
I showed how you can get those common points, answering your specific "how can I select [or filter] the common external border/boundary from the union of those point datasets?" query, you could've then used the index provided (idx_common) to filter them out. You plotted only the common boundary points directly (last point seem to get captured first or viceversa).

Sign in to comment.


Find more on Data Type Identification in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!