• 基于OpenCV的专用图像处理算法的设计和实现


    L1 课程简介和环境准备
    1、课程简介
    算法设计是典型的经验工程,不仅需要工程师对问题本身有准确的认识、对函数库工具有熟练掌握,而且需要在算法实现过程中摸索出调优套路。这个道理和“如何写优秀的代码”是一样的,我认为最好的方法就是去学习成功的经验、在模仿的基础上进行扬弃。现实的需求是多种多样的、工具本身也在不断变换,唯有分析问题的思路和解决问题的信心毅力,是可以通过不断的项目实践进行积累的。
    由于工作等原因,我较为独立地接触、解决过一些问题,也重复认识到算法设计是一个复杂过程,想通过一个现成函数就解决问题基本是不可能的。在探索的过程中,基础的方法是高中物理中学到的“控制变量法”,也就是逐步量化重点,最终通过搭建PiPline接近目标。这个过程反反复复,甚至若干时间之后重新回顾代码,发现之前的步骤中有许多可以优化的地方,应该可以做到更好。
    本门课程,就是我回顾过往代码的一类成果。这一次,我选择“钢管识别”“血管识别”和“毛发识别”3个识别算法来进行讲述。从名字上很容易看出,这三个都是识别算法,目的都是计数和测量,只是解决的对象不一样,这就为我们课程内容提供了较大空间。需要注意的是,由于采集硬件等条件不同,这里的专用算法一般不能直接复用,但是这并不妨碍我们课程的重点,那就是通过对过往算法的重现,分享我对专用算法设计实现的心路过程,从而帮助你设计出解决自己问题的算法。由于个人见识和经验有限,课程中肯定存在错误和偏驳,希望能够以批判的眼观看待,最后期待你的关注。
    2、内容组织
    课程的重点是3个识别算法,他们既有类似的地方又有自己的个性。因此在内容组织这块,计划采取模块化和HeadFirst的方式。每一个子模块包括需求分析、结果展示、解题思路分析、技术细节讲解和最后的集成调优。3个识别算法之前是解释算法设计的基本思路,在全部介绍完成后会有对比。我想通过一张图来进行说明最为清晰。虽然3个算法目前我已经有解决方案,但是为了方便描述,我会同步提供实际采集的少量数据,并根据实际数据进行参数优化。目前只是初步设想,在实现过程中可能会有所变换。

    3、环境准备
    为了适应当前现状,算法一定是同步提供C++和Python的,因此在实现过程中我们同时提供。由于目前我掌握vsstudio+imagewatch提供了更为方便调试环境,所以在描述过程中更多地会看到这个环境。这里将课程使用环境安装方法进行简要解释。

    4、浅谈学习过程
    反思自己如何一步一步学习起图像处理的,和本门课程很契合,分享给大家:

    第一个阶段,从不了解到了解
    刚开始做图像处理用的是halcon,halcon的官方自带的算子和例程很多,然后就想办法融合到csharp中去,就能够得到完整的程序。实际上,我一开始使用halcon来做图像拼接,但是halcon的版权的呀,还有和界面的交互的问题也多,苦恼时看到一本书,叫做《学习OpenCV2》,听老师傅说这个很厉害,翻了一翻——完全看不懂呀!

    第二个阶段,模仿积累自己的东西
    如何自学OpenCV,关键是模仿。一开始不是看《学习OpenCV2》,而是其他书。我采用的方法是在当当、china-pub中搜索opencv这个关键字,然后找到所有已经翻译成中文的opencv方面的书,然后再亚马逊上面搜索opencv,再找到那些还没有翻译的原版。基本上,OpenCV相关的书英文的我都有,比较重要的有中文的。书拿到了,我认为比较高效的方法就是——快速过一遍,有了基础;然后跑里面的例子,增加感性的认识;然后再根据需要重构,反复反复。形成自己的基础算法库GOCVHelper,能够复用一些常用的功能。结合实际工作,比如做工控方面程序,总要是和界面进行沟通,用过MFC、WinForm和QT、手机端和webapi,在现实项目中积累经验。

    第三个阶段,算法设计解决实际问题
    做到这个过程,还只是使用OpenCV做项目。但是随着项目的深入,很多时候客户的要求,不是有现成的算法的,也不是通过现有算法进行拼接能够解决的。怎么办?只能自己去研究,有一些问题是有论文的,也可能有书,运气比较好还有matlab代码;也会遇到了太少见了,论文也比较少。这个时候,需要的能力,还是最基本的英语和数学。但是就已经形成一定的竞争能力了,而且在这个过程中,很容易就形成自己“打磨算法”思维方式,对未知问题能够提出可行的思路。

    下一个阶段,人工智能。现在随着深度学习的不断平民化,很多传统问题是否可以使用AI的方法进行解决?如何选择AI的框架和现有CV技术结合,这是下一步需要做的事。

  • 相关阅读:
    Amazon EBS的功能更新
    ORA-03113: end-of-file on communication channel
    云serverlinux又一次挂载指定文件夹(非扩充)
    Binder对象死亡通知机制
    cocos2d::ui::TextField 调用setAttachWithIME和setDetachWithIME都无效
    shell linux基本命令实例、笔记
    降智严重——nowcoder练习赛46&&codeforces #561 Div2
    2018-2-13-win10-uwp-隐藏实时可视化
    2018-2-13-win10-uwp-隐藏实时可视化
    2018-2-13-win10-UWP-ListView-模仿开始菜单
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/16440032.html
Copyright © 2020-2023  润新知