2013-09-23 90 views
0

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

任何想法?

实施例图像:

+0

不错的小问题,你有什么试过?顺便说一下,你关于膨胀/侵蚀的观点并不好,因为你总是可以保存你的起始图像(你甚至有坐标!) –

+0

把点转换成xy坐标,找到距离矩阵(和pdist一样)和然后将每个点连接到它最近的两个邻居? – Dan

+0

我只需要这些坐标,而不是我会得到的扩大的坐标。我已经尝试过“polyfit”,“fit”,现在我正在尝试使用lsqlin,我看到有人试过,但我没有得到我需要的结果。 – prairiewolf

回答

1

这将工作,如果你得到的行,列有序列表中的坐标:

1)使用roipoly做一个面膜。 roipoly help:
BW = roipoly(I, c, r)返回由向量c和r所描述的多边形指定的ROI,它分别指定每个顶点的列和行索引。 c和r必须是相同的大小。

2)在BW掩码上使用edge。这将给你一个连接给定点的连线的逻辑图。

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

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

+0

我有一个矩阵中的这些点的坐标,推定为256 x 216的图像。稍后再试。非常感谢你! – prairiewolf

+0

高效地工作。非常感谢弗雷德里克! – prairiewolf

2

如果点已经在顺序,它很容易与复数:

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

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

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

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

在这个例子中,这给出了下图。

enter image description here

如果点不按顺序,它们可以基于@与此类似,下令减少距离丹的想法:

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给指数较大者的最近点指数。有了这些信息,人们应该能够订购积分。但这不是一个容易的问题。我不确定最小化距离总是会给出首选形状(尽管它会在您的示例中)。

相关问题