halcon学习和实践(开篇)
Posted 嵌入式-老费
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了halcon学习和实践(开篇)相关的知识,希望对你有一定的参考价值。
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
大学里面开设数字图像处理课程的学校很多,选用的书籍一般就是冈萨雷斯那本《数字图像处理》。编程实践的话,一般是三种方法,一种是老师自己写一个dll库,里面包含了基本的read image、write image方法,学生专注于算法的编写就好了;一种是用python + opencv库编写算法;还有一种是matlab编写,大体就是这三种。
我们不能说这种教学是错误的,但是有点脱离生产实际,这是肯定的。有几个方面,这个与实际应用场景是严重脱离的,
1)教学使用的图片一般都是来自于公开图片库,这给人一个错觉,那就是好的图像似乎是天然获得的。但是实际上,在工业生产上为了获得一张符合要求的图片需要付出很多的努力,比如说选择好的光源,选择合适的镜头,选择匹配的传感器等等。此外,对相机的安装位置也有一定的要求。有了高质量的图片,对算法要求自然也就低很多。很多时候,大家会发现,工业生产上面花费在算法的时间上不一定很多,但是花在获取高质量图片的功夫上面需要花费很多的时间,而且很多时候这个时间都是少不了的。
2)工业生产的算力并不是无限供给的,而且对时间有一定的要求。一般教学中,都是拿PC或者笔记本直接对图像处理,用的都是最新的cpu、最新的显卡、最新的硬件。但是工业或者消费品中,用的可能是嵌入式板子,而且嵌入式板子的算力都是一定的。不管如此,就是这算力不高的开发板,对于其结果的输出还是有性能要求的。比如汽车、机器人系统,如果图像输出结果不能在一定时间内完成,那么即使后面给出了结果,也基本上没有了意义。为了加速图像处理,你可能还需要掌握dsp、fpga、gpu的处理方法,这都是cpu开发之外的必须的工作量。不光如此,你可能还需要掌握硬件知识,比如网络、dma、v4l2、neon汇编等等,这一切的一切都是为了加速算法的执行。
3)学术中,为了提高对图像的处理能力,可能会设计出各种各样的算法。而在生产中,很多时候一个系统,是需要多种传感器配合才能获得最终结果的。比如图像可能和激光雷达、3d结构光camera、毫米波雷达、超声波雷达来进行配合。只要对最终的系统有利,我们有必要选用各种传感器组合在一起,而不拘泥于摄像头本身。图像本身没有深度信息,此时除了深度学习之外,另外一个稳妥的办法,就是匹配一个深度检测传感器,距离短可以用3d结构光,距离长可以用lidar,现在这方面都已经越来越成熟了。
上面说的三点只是生产中常见的几个误区。此外,在工业当中,实际使用的软件,也不是opencv,而是halcon和vision pro。拿halcon举例,用户自己本身不需要掌握复杂的算法,通过脚本就可以实现功能的开发。在脚本完成后,可以导出为c#或者c++代码,结合dll文件,可以最终部署到自己的项目中。本身halcon也有windows版本和linux版本。只是halcon本身是商业软件,作为学习使用一般问题不大,如果是大范围的做商业部署,最好还是用opencv+定制算法+硬件优化来解决大多数问题,这样比较稳妥。
以上是关于halcon学习和实践(开篇)的主要内容,如果未能解决你的问题,请参考以下文章