为什么plot(X,Y,'or')和plot(X,Y)会给出不同的结果

4次浏览(最近30天)
思帕诗Garg
思帕诗Garg 2021年8月12日
我有一组点,我想把它们形象化。
通过运行下面链接中提到的代码可以获得这些点
基本上这个的输出是一个结构它存储了边的位置和其他东西。
现在,当我画边的时候。x和边缘。Y,使用以下命令
情节(edges.x edges.y '或');结果是这样的
而plot(边x边y)的结果是这样的
代码的原始结果如下所示
你们知道为什么线图会是这样的吗,还有怎么修正它。
注1:看完图片后,我可以直观的看出正确的顺序。如果你看边缘。期望的起点是[103,66.3015],终点也是

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2021年8月12日
这是预料之中的。没有什么要求算法返回点是边跟踪的顺序。
应该使用boundary() //www.tatmou.com/help/matlab/ref/boundary.html 检测顺序
idx =边界(边缘。x, edge.y);
情节(edge.x (idx) edge.y (idx))
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年8月12日
您可能需要增加收缩甚至更多(最大1.0)
然而,如果你看45层附近,你可以看到两个不同的斑点之间最近的接近。现在将这个距离与基数中间78左右的差距大小进行比较:基数差距看起来差不多,甚至可能更大。所以一次你想让距离是无关紧要的不是表示不同的物体,但另一次你想让距离表示新的物体。
我想了一会儿也许你可以通过取每个点最近的两个相邻点来得到某个地方,但是再看看底部的缺口。从左边开始的第二个标记,这对点靠得很近:这对点中最右边的两个点都在左边。
ABCD英孚GHIJ
F的两个最近邻是D和E,而不是E和g,所以最近邻技术本身是不够的。也许你可以用5个最近的邻居和一些逻辑来得出结论。

登录评论。

更多的答案(2)

Chunru
Chunru 2021年8月12日
线图是从一点画到另一点的线。因此,点的顺序很重要。“或”选项只是绘制数据点而不画线。
如果数据点的顺序正确,您可以看到一个更类似于散点图('ro')的线图。

KSSV
KSSV 2021年8月12日
当你用标记(例如:“o”), 情节 不会连接标记。但当你简单地绘图时,它会试图用直线连接它们。你的点不是按顺序排列的,所以它们是连在一起的。
附加你的分数以得到你想要的。
1评论
思帕诗Garg
思帕诗Garg 2021年8月12日
我想这是我最终必须做的,但最终,手动修正点的顺序不符合我的最终目标,即设计一种可以推广到任何图像的算法。
对于一个复杂的图像,这就是结果。因此,重新排列点数(我承认必须这么做)将是极其残酷的。

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!