我有一个黑色背景图像,具有由白点、点组成的弯曲形状。形状是封闭的不规则曲线。我有这些白点的坐标。我一直在寻找一种方法来“连接”这些点,关闭这条线以形成一条闭合曲线。我不能使用膨胀和腐蚀,因为我需要保留那些现有的位置。
有任何想法吗?
示例图片:
我有一个黑色背景图像,具有由白点、点组成的弯曲形状。形状是封闭的不规则曲线。我有这些白点的坐标。我一直在寻找一种方法来“连接”这些点,关闭这条线以形成一条闭合曲线。我不能使用膨胀和腐蚀,因为我需要保留那些现有的位置。
有任何想法吗?
示例图片:
如果点已经是有序的,那么使用复数很容易:
定义示例数据(正方形):
x = [1 2 2 1];
y = [1 1 2 2];
重复第一个点(以创建循环),将其视为复杂,并绘制:
plot(complex([x x(1)],[y y(1)]))
在示例中,这给出了下图。
如果这些点不按顺序排列,则可以根据@Dan 最小化距离的想法用类似的东西对它们进行排序:
z = complex(x,y);
dist = tril(bsxfun(@(z1,z2) abs(z1-z2), z, z.')); % each pair only once ("tril")
dist(dist==0) = inf; % mark self-distances and repeated pairs as infinities
[~, ind] = min(dist);
对于每个点,ind
给出索引较大的点中最近点的索引。有了这些信息,一个人应该能够订购点。不过,这不是一个简单的问题。我不确定最小化距离总是会给出首选的形状(尽管在您的示例中会如此)。
如果您在有序列表中获得行、列坐标,这将起作用:
1)roipoly
用于制作面膜。来自roipoly
帮助:
BW = roipoly(I, c, r)
返回由向量 c 和 r 描述的多边形指定的 ROI,它们分别指定每个顶点的列索引和行索引。c 和 r 的大小必须相同。
2)edge
在BW
面膜上使用。这将为您提供一个逻辑地图,其中包含连接给定点的线。
或者)impoly
用于创建一个imroi
实例,该实例是一个对象,并且有许多可以在其上使用的方法(函数)。这是一种更复杂的方法,会产生相同的结果,但您可能会对它感兴趣,因为它很简洁。
这两种方法都取决于您将点放在有序列表中。