[已解决] 无序的离散点如何提取其轮廓(转多边形)

[复制链接]
15631202458 发表于 2021-3-11 11:18:21
https://www.ilovematlab.cn/thread-606019-1-1.html在尝试解决这个问题的时候,我采用的是通过调用matlab中的inpolygon函数,来确定图片中的点是否在轮廓线内部。
当我将轮廓线坐标点提取出来的时候发现轮廓线点的坐标并非按照多边形的轮廓进行排序的,所以后面调用该函数也存在问题。
虽然上面的那个问题得到了解决,在图像工具中,使用既有命令即可解决。但是这个离散无序将其转换成有序的多边形该如何实现呢?
我想到matlab中的计算几何学中的区域边界,调用效果都不理想,求指点。
  1. clear
  2. RGB=imread('C:\Users\LJJ\Desktop\123\191311lzkkks8klkm5bl6s.png');%上传的第一幅图片
  3. I = rgb2gray(im2single(RGB));
  4. % subplot(121)
  5. % imshow(I)
  6. nrows = size(RGB,1);
  7. ncols = size(RGB,2);
  8. [X,Y] = meshgrid(1:ncols,nrows:-1:1);

  9. %获取图像内部点坐标
  10. xx=X(I==0);
  11. yy=Y(I==0);
  12. %% 找出内部的两个轮廓线
  13. % 内部不规则形状的轮廓
  14. in = inpolygon(xx,yy,[90,480,480,90],[50,50,400,400]);
  15. x_in1=xx(in);
  16. y_in1=yy(in);
  17. %内部较粗的矩形轮廓
  18. % x_in2=xx(~in);
  19. % y_in2=yy(~in);
  20. %绘图验证
  21. figure
  22. subplot(121)
  23. plot(x_in1,y_in1,'r.')
  24. subplot(122)
  25. plot(x_in1,y_in1,'r.--')

  26. %% 计算几何中的边界区域alphaShape,boundary,convhull效果都不理想
  27. figure
  28. shp = alphaShape(x_in1,y_in1);
  29. plot(shp)
  30. k = boundary(x_in1,y_in1,0.99);
  31. k1 = convhull(x_in1,y_in1);
  32. hold on;
  33. plot(x_in1(k),y_in1(k),'r.-');
  34. plot(x_in1(k1),y_in1(k1),'g.-');
  35. plot(x_in1,y_in1,'b.')
复制代码

需要处理的图片

需要处理的图片

无序点展示

无序点展示

调用边界后的效果

调用边界后的效果

最佳答案


EngineerLeon 发表于 2021-3-16 05:03:03
本质上是个TSP问题,官网上有对应的示例代码(见 TSP问题示例),只不过这个轮廓线的点数比较多,算起来会很慢,实际上可以每隔若干点取一个采样点来迅速降低求解规模。每4个点采1个样的优化结果如下图。
[attach]320168[/attach]

回复此楼

5 条回复


EngineerLeon 发表于 2021-3-16 05:03:03
本质上是个TSP问题,官网上有对应的示例代码(见 TSP问题示例),只不过这个轮廓线的点数比较多,算起来会很慢,实际上可以每隔若干点取一个采样点来迅速降低求解规模。每4个点采1个样的优化结果如下图。
TSP00.png

回复此楼

15631202458 发表于 2021-3-16 08:26:50
EngineerLeon 发表于 2021-3-16 05:03
本质上是个TSP问题,官网上有对应的示例代码(见 TSP问题示例),只不过这个轮廓线的点数比较多,算起来会 ...

涨知识了,感谢!

RainsclearL 发表于 2021-11-15 21:37:32
EngineerLeon 发表于 2021-3-16 05:03
本质上是个TSP问题,官网上有对应的示例代码(见 TSP问题示例),只不过这个轮廓线的点数比较多,算起来会 ...

借楼  想请教您下,对于离散的 txt文件可以使用这种方法吗,万分感谢

EngineerLeon 发表于 2021-11-17 06:42:29
RainsclearL 发表于 2021-11-15 21:37
借楼  想请教您下,对于离散的 txt文件可以使用这种方法吗,万分感谢

你可以去试试
光凭“离散的 txt文件”这几个字,谁都帮不上忙

南风依旧很柔 发表于 5 天前
您好,请问你生成多边形后对于边缘参差不齐,成折线情况是如何解决的?通过什么方法规则化呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表