赞
踩
好一阵子没和大家聊Hao系列工具了
最近在HaoCurve上花了不少时间,计划着年底之前完成今年最后一次的升级更新
最终的成品恐怕还要再等上一段时间,今天我打算先简单介绍下这两天刚完成的一个还挺有意思的功能
不熟悉HaoCurve这个工具的朋友,可以戳下方的文章先了解一下
文章链接:MATLAB如何提取曲线原始数据
这次功能开发的需求很容易理解,也很常见,就是如何提取一个封闭曲线的数据
提过类似需求的朋友非常多,最简单的例子是水滴的轮廓数据,汽车工程上会碰到的例子是发动机万有特性曲线
需求听起来似乎很简单,但是真到开发的时候,到处都是难点
1) 就拿发动机万有特性曲线举例,在坐标系里,一个x对应好几个y值,怎么识别出每一个点
2) 识别完每个点之后,怎么判断哪几个点属于哪几条曲线
3) 所有曲线的点分类好了之后,又该头疼各个点之间的排序问题了,哪个点在前,哪个点在后,一不留神就是一坨乱线
大大小小的问题还有非常多,光这一个功能写了一个多星期,代码撸的头顶都要抓秃了,好在最终的结果还不错
接下来逐一介绍下,HaoCurve在开发过程中是如何解决上述这些问题的
1
之前HaoCurve在提取曲线数据时,使用的方法是,在固定步长下根据rgb颜色数据识别出有效点,然后计算有效点的纵坐标平均值
在单值函数曲线的情况下,也就是一个x对应一个y,这种方法是没有问题的,但是碰到像封闭曲线这类情况,一个x对应多个y,识别出来的点是非常离谱的
然后我就在想,有没有办法把这种“一对多”的情况转变成“一对一”的情况
后来想到的办法是,把一张图片切割成很多张大小相同的小图片,有点像网格法,然后对小图片中的曲线进行识别
我把横坐标固定步长的设计沿用到纵坐标,识别封闭曲线或者是多条曲线的时候,需要同时对横坐标和纵坐标的步长进行设置
2
虽然曲线上的所有数据点都识别出来了,也可以导出,但是对用户来说,这些数据完全没法用,全是乱的,根本不知道哪些点属于哪条曲线
这也是整个功能开发过程中最难的部分,如何对识别出来的数据点进行曲线分类
能够全自动分类识别当然是最好的,但是在尝试了十几种办法之后,始终没能找到令人满意的解决方案
我只能退而求其次,半自动分类识别,那也比纯手动强啊
于是,这个问题的关键就变成了,怎么才能让半自动的手动操作部分更顺手
我新增了3个按钮,分别是预分类,合并,还有拆分
预分类按钮很好理解,承担了半自动中的自动操作部分,会根据点和点之间的距离进行分类,如果距离低于一个阈值,这部分点就会被归为一条曲线上
逻辑上其实没啥大毛病,但是在实际操作中会产生各种误识别,比如,曲线是用虚线画的,能给你识别出十几条曲线来,两条曲线如果交叉了,就会被误当成是一条曲线
所以碰到误识别的情况,就需要通过合并按钮和拆分按钮进行手动处理
合并按钮的作用是,点击合并按钮,按钮显示红框,表示合并功能激活状态,然后在图中选取多条曲线,最后点击合并按钮结束,多条曲线就通过手动的方式整合成一条曲线了
点击选取曲线的功能很有意思,设计的细节我很喜欢,在曲线上点击任一点之后,整条曲线上每个点都会用圆圈标示,曲线合并后,之前不同曲线的不同颜色,也会设置为同一种颜色
拆分按钮的作用是,像交叉线的误识别,通过这个按钮可以拆分成两条不同的曲线,不过这个功能目前还没有做完,就不给大家做演示了
用一个动图演示一下整体的处理效果
3
最后一个头疼的问题,所有点分类到相应曲线之后,如何对一条曲线上的点进行排序,从哪里来到哪里去
对于单值函数曲线来说,这完全不是个问题,横坐标最小的点是起点,横坐标最大的点是终点
但是对于像发动机万有特性曲线、轮廓曲线这类情况,一个x对应多个y,是没办法单一的从横坐标值或者纵坐标值来判断的
我考虑过,从极坐标的角度去解决问题,但是还是会有一样的问题,因为相同角坐标上可以对应多个径向坐标的点
我还尝试过一种方法,曲线上取任一点,搜索周围最近的点,如果最近点距离高于某个阈值,相当于走到尽头了,就停止搜索,认为这个点是曲线的端点,再通过最近点的方法把这条曲线上所有点的顺序捋一遍
但是这个方法的效果实在是太糟糕了,因为碰到虚线类曲线,很容易把虚线端点默认为曲线端点
在找曲线起点终点的问题上,我又试了十几种方法,最后终于找到了一个效果还不错的
曲线上任取一点,用最近点的方法先把曲线上所有的点走一遍,同时记录相应的最近距离。最后在所有最近距离中取最大值,如果最大值高于10倍的平均最近距离,则认为是曲线的端点
这种方法的排序准确率很高,即便有极端情况排序乱了,但整体顺序还是顺的,只需要把数据顺序微调一下就解决了
以上就是今天关于HaoCurve开发过程中最头疼的3个问题的分享
其实还有很多零零碎碎的小问题,就不深入聊下去了,都是平时工具开发过程中的日常
至于新版HaoCurve的发布,像我之前说的,还要再等上一阵子,因为新功能和旧功能之间还需要磨合兼容,需要一些时间做集成和测试
期待HaoCurve可以尽快和大家见面
最后祝大家,周末愉快!
作者介绍|打浦桥程序员
滞销工具开发人员
和你一起用MATLAB的角度看世界
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。