如何提高匹配的速度

基于形状的匹配,改进了无数次,其实已经很满意了。

想起刚入门机器视觉那会儿,我们写的代码,无论c++还是c#的,都是调用人家的函数,从来没想过,自己有一天把这些函数代替了。

那时候调用evision的抓线工具gaugeline,事先在工作界面,手动调好抓线工具的参数,然后写程序,要能加载抓线工具这些参数,还要能保存抓线工具参数。

这样的事情不知搞了几多会,用过抓线工具的人都知道,这个工具先放在能抓到线的地方,并设置抓线工具一定的弹性,也就是说,当图像中这个线条在小范围内浮动时,我们的抓线工具加载上来不用动,仍然能找到直线。

这要感谢plc电控的朋友们,他们上料,一般不会偏差0.2mm,所以我们的抓线工具能适应这样的弹性范围变化,跑自动的时候,记得很清楚,当我们抓不到线的时候,总是找plc电控麻烦,说他们上料偏差太大了,他们却说我们的抓线不行,吵过不知多少回,有时改一下抓线工具的弹性,重新保存加载一下抓线工具,有时plc改进上料精度,问题都能解决,大家把项目完成好就行。

说这个有什么用呢?

其实这里边隐藏了匹配一种思想,即匹配时,要有弹性,另外,保存和加载参数的好处也分外明显,自动化需要这个,实在太重要。

我们匹配中要借鉴后面这个思路,也就是说,我们要找的事物特征,很大的概率会在某一区域,这是由自动化特殊的原因(电控和视觉)保证的,我们机器视觉不就是自动化的产物吗?我们可以记住这个区域,下一次找的时候,保持一定的弹性,就能很快找到想要的特征。

匹配时,要再一步提高速度的思路是这样的:

学习时,记住学习的位置,在匹配时用;即学习时保存,匹配时加载参数,应用时,完全是自动化的。

如上图,学习时,我们学习特征“X”的roi矩形如图,然后以roi矩形的left-20,top-20为选定位置,

把整个区域分成三块I,II,III

好,我们匹配时,优先找I区,

然后找II区,最后找III区,这样速度会快不少。

为什么可以这样做,因为你可知道,我们一般不会把重要的特征放到边缘区,原因是,我们怕失去精度,因为,图像边缘区,是很容易畸变的,我们都是从这里趟过去的。

另一个原因就是,我们一开始就讲了,你学习特征的区域,在plc电控保证下,不会有多少变化

所以,搞视觉的人,一般都会把特征往中间放,即使你不知道是为什么,也没关系!

其实从高斯(正态)分布来看,中间出现的概率极大,这个事情和我们的眼睛也是契合的,也就是说,直觉就是这样,也就是说,注意力在中间,这叫做focus。

今天编程试了一下,效果不错,这也算是过往的贡献吧!

我们这种方式最好是只找I区域,最差找三个区域,在今天之前,我一直全区域去找,虽然已经很快了,但重复的事情会触发新的发现!

最初的想法:(focus)

再改进的想法:(focus rect region)

第三种想法:是全图九宫格(nine rect region)

最后,考虑区域(rect),roi学习,全图,才定下来最上面的.

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值