优化时间是算法优化中永恒的主题。形态学算子是外观检测中最常用的算子,因此,研究它们的时间开销有很强的现实意义。
有如下图的五种类型的区域:
① CellOctaReg :区域面积很大,轮廓简单。(典型一)
② WhiteGridWholeReg :区域面积大,轮廓复杂。(典型二)
③ DefiMGPrintRegCon :区域面积小,轮廓较简单。(这种区域没有什么特点,可不分析)
④ SubGridLineReg :区域面积大,轮廓复杂。与②类似。(典型二)
⑤ InterPsReg :区域面积很小,轮廓简单,但是经connection 打散后,区域个数极多。(典型三)
下面设置不同大小的结构元素,分别观察8个形态学算子的执行时间。
注意:矩形形态学算子要达到与圆形形态学算子相似的效果,矩形结构元素的值应该是圆形结构元素的值的2倍。
erosion_rectangle1 (Region, RegionEro, 20) 约等价于 erosion_circle (Region, RegionEro, 10)
时间测试程序里面已考虑了这一因素,例如:
1 ****************** 腐蚀、膨胀、开运算、闭运算 ******************* 2 erosion_rectangle1 (CellOctaReg, CellOctaReg3, Size * 2, Size * 2) 3 erosion_circle (CellOctaReg, CellOctaReg4, Size) 4 dilation_rectangle1 (CellOctaReg, CellOctaReg1, Size * 2, Size * 2) 5 dilation_circle (CellOctaReg, CellOctaReg2, Size) 6 opening_rectangle1 (CellOctaReg, CellOctaReg5, Size * 2, Size * 2) 7 opening_circle (CellOctaReg, CellOctaReg6, Size) 8 closing_rectangle1 (CellOctaReg, CellOctaReg7, Size * 2, Size * 2) 9 closing_circle (CellOctaReg, CellOctaReg8, Size)
测试时间统计如下表:
结论如下:
1、WhiteGridWholeReg 和SubGridLineReg 的时间规律极为相似。
2、对于CellOctaReg 这种区域,矩形形态学算子时间都很短,圆形形态学算子值大于10时,时间急剧变长(1.5ms ~ 30ms)。
3、对于由大量细长区域或者细小区域组成的Region(例如WhiteGridWholeReg 、InterPsReg),腐蚀、开运算的时间要明显 < 膨胀和闭运算。
4、WhiteGridWholeReg 在执行膨胀或者闭运算时,时间开销非常惊人,要尽量避免使用。(尤其是圆形膨胀和圆形闭运算)
5、InterPsReg 这种由大量细小区域组成的Region,经connection 打散后,执行膨胀或者闭运算的时间开销明显增加,尤其是执行圆形膨胀和圆形闭运算,时间急剧增加。所以最好在之前执行:union1 (InterPsReg, InterPsReg)
6、并不总是结构元素的Size越大,时间越长。WhiteGridWholeReg 这种由大量细长且紧密的区域组成的Region,当Size逐渐增加时,膨胀和闭运算的时间快速增加,但Size超过某个值时,时间骤降。原因是此时原区域中的缝隙被大量填充,如下图所示。
监控的语句是:closing_circle (WhiteGridWholeReg, WhiteGridWholeReg8, Size)
当Size = 18时,执行时间为248ms,当Size = 19时,时间骤降至10ms。
--------------------------------------------
本文系原创,转载请注明出处。
如果文章对您有帮助,可以点击下方的【好文要顶】或【关注我】;如果您想进一步表示感谢,可通过网页右侧的【打赏】功能进行打赏。
感谢您的支持,我会继续写出更多的相关文章!文章有不理解的地方欢迎跟帖交流,博主经常在线!^_^