我有一个黑色的背景图像,由白点,点组成的曲线形状。形状是一个封闭的不规则曲线。我有这些白点的坐标。我一直在寻找一种“连接”这些点的方法,以关闭这条线来形成一条闭合的曲线。我不能使用扩张和侵蚀,因为我需要保留现有位置。在matlab中连接黑色图像中的白色点
任何想法?
实施例图像:
我有一个黑色的背景图像,由白点,点组成的曲线形状。形状是一个封闭的不规则曲线。我有这些白点的坐标。我一直在寻找一种“连接”这些点的方法,以关闭这条线来形成一条闭合的曲线。我不能使用扩张和侵蚀,因为我需要保留现有位置。在matlab中连接黑色图像中的白色点
任何想法?
实施例图像:
这将工作,如果你得到的行,列有序列表中的坐标:
1)使用roipoly
做一个面膜。 roipoly
help:
BW = roipoly(I, c, r)
返回由向量c和r所描述的多边形指定的ROI,它分别指定每个顶点的列和行索引。 c和r必须是相同的大小。
2)在BW
掩码上使用edge
。这将给你一个连接给定点的连线的逻辑图。
或者)使用impoly
创建一个imroi
实例,该实例是一个对象,并且具有许多可以在其上使用的方法(函数)。这是一个更复杂的方法,会导致同样的结果,但您可能会对它感兴趣,因为它很整洁。
这两种方法都取决于您在有序列表中拥有点。
我有一个矩阵中的这些点的坐标,推定为256 x 216的图像。稍后再试。非常感谢你! – prairiewolf
高效地工作。非常感谢弗雷德里克! – prairiewolf
如果点已经在顺序,它很容易与复数:
定义示例数据(正方形):
x = [1 2 2 1];
y = [1 1 2 2];
重复第一点(创建周期),视为复杂,并绘制:
plot(complex([x x(1)],[y y(1)]))
在这个例子中,这给出了下图。
如果点不按顺序,它们可以基于@与此类似,下令减少距离丹的想法:
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
给指数较大者的最近点指数。有了这些信息,人们应该能够订购积分。但这不是一个容易的问题。我不确定最小化距离总是会给出首选形状(尽管它会在您的示例中)。
不错的小问题,你有什么试过?顺便说一下,你关于膨胀/侵蚀的观点并不好,因为你总是可以保存你的起始图像(你甚至有坐标!) –
把点转换成xy坐标,找到距离矩阵(和pdist一样)和然后将每个点连接到它最近的两个邻居? – Dan
我只需要这些坐标,而不是我会得到的扩大的坐标。我已经尝试过“polyfit”,“fit”,现在我正在尝试使用lsqlin,我看到有人试过,但我没有得到我需要的结果。 – prairiewolf