查看: 2433|回复: 1|关注: 0

[未答复] 如何将等值线值大于等于0的点的边界圈出来

[复制链接]

MATLAB 基础讨论
版块优秀回答者

入门

427 麦片

财富积分


50500


21

主题

250

帖子

50

最佳答案
  • 关注者: 6
发表于 2017-5-11 11:34:02 | 显示全部楼层 |阅读模式
主要是想找出等值线大于等于0的区域和小于等于0的区域,然后把边界给提取出来。
我的思路:
1、使用contour函数可以将等值线等于0的点找出来;
2、使用判断z(find(z>=0))可以找到z>=0的所有点;
3、根据1和2组成的点用convhull或boundary找出边界来(实际情况可能会很复杂<包括分区块的,大区域里面除掉一些小区域>)。


这种方法对于零值等值线是自身闭合的情况很容易处理,但是对于不闭合的零值等值线处理起来不知道有没有啥好办法。
有没有深入研究这一块的,或者contour本身很强大就能实现这个功能,希望指点一下。


下面附一个示例代码。
[x,y]=meshgrid(-5:0.5:5);
z=-peaks(21);
[c,h]=contour(x,y,z,[0 0]);
hold on
plot(x(find(z>0)),y(find(z>0)),'r.')



示例数据中大于等于0的区域分三块,当然中间那个小区域和左上区域用contour即可自身圈闭实现找到边界的目的,但对于最下面那个区域,需要0值等值线加右下角的那个点圈闭形成的边界。
boundary.jpg
回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

427 麦片

财富积分


50500


21

主题

250

帖子

50

最佳答案
  • 关注者: 6
 楼主| 发表于 2017-5-11 15:35:50 | 显示全部楼层
改为[c,h]=contourf(x,y,z,[0 0]);
填充的就是我所要的结果,但是h.Fill的结果只是on,并没有具体的边界值
求高手帮忙啊
untitled.jpg
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表