没有合适的资源?快使用搜索试试~ 我知道了~
目录 1. D5切图算法分析 2 2. 优化路径 2 2.1 行程编码 2 2.2 OpenCV-CCA 3 2.3 OpenCV-Contour 3 3. 形
资源详情
资源评论
资源推荐
目录
1. D5 切图算法分析 ........................................2
2. 优化路径 ...............................................2
2.1 行程编码 ...........................................2
2.2 OpenCV-CCA .........................................3
2.3 OpenCV-Contour .....................................3
3. 形态学运算耗时分析 .....................................3
4. 连通域提取耗时分析 .....................................8
5. 集合运算耗时分析 .......................................9
5.1 Union1 函数耗时分析 ................................9
5.2 union2 函数耗时分析 ...............................12
5.3 intersection 函数耗时分析 .........................12
5.4 difference 函数耗时分析 ...........................13
6. 通道拆分耗时分析 ......................................13
7. 颜色空间转换耗时分析 ..................................14
8. 图片读取耗时分析 ......................................15
1. D5 切图算法分析
行程编码版连通域分析库比 OpenCV 版性能更优,但与 Halcon 仍然存在较大
差距,主要体现在形态学腐蚀和膨胀两个算子上。使用行程编码、OpenCV 和
Halcon 实现 D5 切图算法,部分函数耗时如图 1.1 所示。
由图 1.1 可见,不论是行程编码还是 OpenCV,与 Halcon 的差距主要在形态
学运算。基于基础版行程编码的腐蚀和膨胀是直接套用的数学公式实现,无任何
优化,与 Halcon 的性能对比也说明存在较大优化空间。基于 Jump-Miss 版行程
编码算法针对有很多小物体的图片进行了优化,主打任意形状的结构元素,与实
际应用场景不符。OpenCV 版对于使用矩形作为结构元素的腐蚀和膨胀可能使用
了一些优化方法,如将一个二维滤波器分解成两个一维滤波器,表现比行程编码
更好;但是当结构元素是半径为 50 的圆时,处理时间高达 3968ms,直接导致处
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
行程编码-basic
行程编码-jump-miss
OpenCV
Halcon
threshold
connection
closing_rectangle1(1, 20)
union1
opening_circle(50)
closing_rectangle1(1,300)
opening_rectangle1(1, 200)
closing_rectangle1(100, 1)
opening_rectangle1(80, 1)
图 1.1 D5 切图算法部分函数耗时(ms)
理一张图需要 5s 以上。除此之外,OpenCV 的连通域提取也耗时较长,轮廓查找
耗时 32.96ms,轮廓填充便于之后的形态学运算耗时 319.16ms,共耗时 354.12ms。
2. 优化路径
2.1 行程编码
该方案的关键在于对腐蚀和膨胀算法进行优化。测试表明当前算法和
Halcon 对同一区域的行程编码是一致的,因此可以暂时不考虑使用列行程而不
是行行程可能效率更高的情况。需要考虑的优化项如下。
(1)寻找新的基于行程编码的腐蚀及膨胀算法。理解 Jump-Miss 算法原理,
考虑能否对其进行优化。
(2)优化图片数据的访问速度。行程编码版可以使用任意区域为图片设定
ROI , 如 同 Halcon , 但 是 这 样 访 问 图 片 数 据 的 速 度 会 变 慢 , 并 直 接 影 响
threshold,intensity 等一系列算子。以 intensity 例,使用矩形区域的行程
编码作为 ROI 与 OpenCV 中矩形 ROI 相比,速度慢了一倍。除此之外,对
threshold 进行测试,将二值化阈值设为 255,Halcon 中遍历一张图所需时间为
1.16ms,而在行程编码版中遍历图片需要 12.09ms,正常执行 threshold 的时间
为 1.74ms v.s. 14.26ms,这表明时间主要消耗在图片遍历上。需要在弄清原因
的基础上,考虑是否应当尝试 OpenCV 中图片像素遍历的方式,使用矩形 ROI,
并配一张等大掩码图片。
(3)优化行程编码的速度。Halcon 中一个行程使用了 3 个 short 类型编码,
row,start_col,end_col,共 6 字节,并需要 288 个字节的额外空间。当前行程编
码中的一个行程需要 2 个 short 和一个 int,共 8 个字节。需要考虑其中字节对
齐的问题,并对行程的插入速度和读取速度进行测试。
(4)对于 HRegion 和 HMat,赋值运算符与复制构造函数设定为浅拷贝,即
指向同一份图像或行程编码数据;添加成员函数 copyTo 实现深层复制,即数据
的复制。
(5)计算区域的属性,如 area\center\circularity 等,为了便于添加新
属性,应当使用 strategy 模式。为了计算效率,有些属性,如 area 和 center,
应当一同计算。这些属性缓存在对象中,需要的时候才计算。
(6)边缘检测系列算子需要 short 甚至 float 类型 HMat,因此处理 HMat 的
系列算子,如二值化等,是否需要写成模板函数?或在函数内加入型别判断?
2.2 OpenCV-CCA
该方案核心是使用 OpenCV 完成形态学运算,适用于进行腐蚀和膨胀的结构
元素是大小在 20*20 以下的矩形(20ms),或半径在 5 以内的圆形(35ms)的项目
需求。针对此类项目需求,还需要将连通域提取算法进行优化,使用 OpenCV
4.0 中的连通域标注算法取代当前基于轮廓查找和轮廓绘制的算法。除此之外,
在形态学运算之前,需要添加 padding 的相应代码。
2.3 OpenCV-Contour
该方案的核心是使用 OpenCV 中的轮廓查找来进行连通域分析,优势在于区
域属性,如面积、周长、矩等已有实现。难点在于如何对轮廓进行腐蚀和膨胀,
但此类算法也有相应文献可以参考。
3. 形态学运算耗时分析
当结构元素是大小在 20*20 以下的矩形(20ms),或半径在 5 以内的圆形
(35ms),使用 OpenCV 完成形态学运算是比较经济的。其它情况下,行程编码是
更优的选择。当待处理的区域面积较大,使用基础版行程编码算法可以满足需求;
当待处理的区域数量较多,面积较小,使用 Jump-Miss 版行程编码算法可以满足
需求;实际需要处理的图片在两者之间,需要在理解算法的基础上进行优化才能
满足需求。
0
50
100
150
200
250
300
350
400
10*10
20*20
30*30
40*40
50*50
60*60
70*70
80*80
行程编码-basic
行程编码-jump-miss
OpenCV
Halcon
图 3.1 使用不同大小矩形结构元素对 5472*3648 的
矩形区域进行腐蚀(ms)
剩余17页未读,继续阅读
阿葱的葱白
- 粉丝: 26
- 资源: 313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0