在matlab中连接黑色图像中的白点

时间:2013-09-23 14:18:14

标签: matlab image-processing

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

有什么想法吗?

示例图片:

2 个答案:

答案 0 :(得分:2)

如果这些点已经按顺序排列,那么复数很容易:

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

x = [1 2 2 1];
y = [1 1 2 2];

重复第一个点(创建周期),视为复杂点,并绘制:

plot(complex([x x(1)],[y y(1)]))

在示例中,这给出了下图。

enter image description here

如果这些点不合适,可以根据@ 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 :(得分:1)

如果您获得有序列表中的行,列坐标,这将有效:

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

2)在edge掩码上使用BW。这将为您提供一个逻辑地图,其中包含连接给定点的线条。

或者)使用impoly创建一个imroi实例,它是一个对象,并且有许多可以在其上使用的方法(函数)。这是一个更复杂的方法,会导致相同的事情,但你可能会对它感兴趣,因为它很整洁。

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