!我正在使用Matlab和图像处理工具箱,目的是提取图像中最长线的坐标(我需要重复使用这些坐标来传输到扫描设备)。
我设法使用bwmorph获得最长的行,并且我将该行作为二进制2d数组获得。 现在我尝试使用以下方法获取其坐标: [X,Y] =找到([Longestline]) 其中Longestline是上面提到的2d数组。![这是我获得的二进制行的图像]和1 [这是一个图像,当我叠加原始图片和图(x,y)] {{ 3}}
问题是我需要重新排序这些坐标以跟踪相邻点的直线。 有没有一个函数/方法可以直接从图像中做到这一点?感谢,
答案 0 :(得分:2)
这是一个简单的测试图像,它是否会处理更复杂的东西还有待观察,但我不明白为什么它不会。这里假设im
是您的原始图片,BW
是包含您想要的行的二进制图片:
1)使用bwmorph
:
[xend, yend] = find(bwmorph(BW,'endpoints');
你可以采取任何一种方式,但这并不重要。
2)使用bwtraceboundaries
跟踪其中一个端点的线。 ' NW'是最初的搜索方向。它在我的简单测试数据中没有太大的区别,这只是一个曲折的。
contour = bwtraceboundaries(BW, [xend(1), yend(1)],'NW');
3)叠加
imshow(im)
plot(contour(:,2),contour(:,1),'r')