0

我有一个黑色背景图像,具有由白点、点组成的弯曲形状。形状是封闭的不规则曲线。我有这些白点的坐标。我一直在寻找一种方法来“连接”这些点,关闭这条线以形成一条闭合曲线。我不能使用膨胀和腐蚀,因为我需要保留那些现有的位置。

有任何想法吗?

示例图片:

4

2 回答 2

2

如果点已经是有序的,那么使用复数很容易:

定义示例数据(正方形):

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给出索引较大的点中最近点的索引。有了这些信息,一个人应该能够订购点。不过,这不是一个简单的问题。我不确定最小化距离总是会给出首选的形状(尽管在您的示例中会如此)。

于 2013-09-23T14:39:09.880 回答
1

如果您在有序列表中获得行、列坐标,这将起作用:

1)roipoly用于制作面膜。来自roipoly帮助:
BW = roipoly(I, c, r)返回由向量 c 和 r 描述的多边形指定的 ROI,它们分别指定每个顶点的列索引和行索引。c 和 r 的大小必须相同。

2)edgeBW面膜上使用。这将为您提供一个逻辑地图,其中包含连接给定点的线。

或者)impoly用于创建一个imroi实例,该实例是一个对象,并且有许多可以在其上使用的方法(函数)。这是一种更复杂的方法,会产生相同的结果,但您可能会对它感兴趣,因为它很简洁。

这两种方法都取决于您将点放在有序列表中。

于 2013-09-23T15:28:55.847 回答