一个老程序员的计算机视觉蹒跚学习之路

本文介绍老猿学习计算机视觉的历程、遇到的问题,一些给初学者的一些建议。

一个老程序员的计算机视觉蹒跚学习之路

一、简介

老猿是个 C++的老程序员,到底有多老呢,估计现在各平台发技术文章的博主中,很难有年龄比老猿大的。程序员这个活,是年轻人干的,并不怎么适合象我这种年纪的人,工作中也很少需要自己动手开发的。

2019 年,各种因缘际会,老猿想学习一下 Python,4 月入驻CSDN博客,开启了老猿学习 Python 并分享学习体会之路,先是 Python 基础,接着是 Python 爬虫,然后是 Python 图像界面开发的 PyQt,再接着是 Python 的音视频剪辑 Moviepy,前后花费了 1 年半左右的时间,这期间发布了近 1000 篇博客,当然有灌水的内容,也有精华的文章,都是老猿自己学习的总结。

老猿是个对细节蛮纠结的人,很容易钻到各种学习的细节中去,优点就是有些深度的认识和收获,发布的博客文章有区别于别人的内容,缺点有两条,一是学习进展慢,二是有时耗时很久都钻不出某个问题,人很抓狂。不管怎么说,由于文章是老猿从小白的基础上去学习知识的总结,还是圈了一群粉,目前在博客网站粉丝已超 5 万,并且获得了该网站 2020 年博客之星评选的季军,也算是无心插柳了。

2020 年下半年,一个老同学联系老猿,他开办的公司主要负责计算机视觉应用类软件的开发,例如用于石油行业钻井平台的监控,识别违规操作,提醒作业人员遵章守纪,主要使用 OpenCV 和人工智能 YOLO3 进行开发。但是遇到了一些难以解决的问题,一是基于 AI 的目标检测,依靠训练数据产生的目标识别能力存在不可控的问题,可能绝大多数情况识别都没有问题,但一旦存在问题时很难去解决,无法说出所以然,二是目标识别在多目标出现交叉重叠时无法精准识别,如多个人用不同姿势前后交叉站立,后排人员被遮挡后有些场景无法识别出来每个人。他想基于 AI 的目标识别加上对象组件化来解决这个问题,利用 AI 识别各个组件,如人的脑袋、手、足、躯干等,然后再基于这些组件去识别一个人,而不是用 AI 直接识别一个人,这样应该更精确。

老猿对 AI 根本没有研究,连图像处理都没学过,感觉帮不上他多少忙,但他给我打开了计算机视觉这扇门,于是从 2020 年 8 月开启了计算机视觉的学习之路。

计算机视觉的范围

在介绍学习经历前,我们先简单介绍一下计算机视觉,而在研究计算机视觉前,一个必须探讨的课题就是数字图像处理,数字图像处理从简单的图像对比度增强到图像识别再到计算机视觉,从简单图像处理到 AI,涉及的领域跨度很大,并且没有明显的界限,但这一广袤的范围并不全都属于数字图像处理研究的范围。

一种常见的方法是将广泛的数字图像处理范围划分为计算机视觉的三个阶段:低级、中级和高级:

  1. 低级处理:涉及图像的主要操作,如降噪、对比度增强和锐化,其特点是输入和输出都是图像;
  2. 中间处理:输入为图像,输出为从图像中提取的特征,如边缘、轮廓、物体识别识别;
  3. 高级处理:识别图像集成的、与视觉相关的认知。

这一年多的学习,老猿学习进展缓慢,还停留在数字图像处理的低级处理的初始阶段,目前学习了图像处理的部分基础概念和一些基础操作,包括图像处理的步骤、像素间的关系、图像空间相关和卷积、图像滤波、灰度变换、形态变换、图像直方图等相关概念,以及图像读取、保存、鼠标操作、事件捕获、阈值处理、算术运算、图像形态变换以及直方图均衡等 OpenCV-Python 的操作方法。可见学习进展缓慢。

三、老猿的计算机视觉学习过程

老猿离开大学太多年了,高等数学知识都被遗忘了。同时,他之前也没有学习过图像处理的知识,这让他学习计算机视觉的难度很大。老猿一年多的学习过程基本分为三个阶段:

  1. 老猿 2020 年 8 月开始学习 OpenCV,从基本的图像读写开始、到图像显示窗口的回调处理、阈值处理及自适应阈值处理、几何图像绘制、颜色空间转换到图像的算术运算、位运算、腐蚀膨胀等形态变换。在这阶段学习基本都很顺利,但形态变换中的击中击不中变换理解还是有些困难的,这个花了老猿 1 个多星期的时间才真正理解,这些知识的学习到 2020 年 12 月上旬;
  2. 2020 年 12 月开始学习仿射变换、透视变换,发现自己线性代数完全忘光了,导致仿射变换、几何变换难以理解,于是在 2021 年 1 月开始重新学习高数集合、极限、线性代数相关知识,学完再回头研究仿射变换、透视变换;
  3. 2021 年 4 月学习空间变换,发现自己图像处理基础知识太弱,理解相关知识太困难,为此从 4 月开始学习冈萨雷斯的《数字图像处理》,在学习到《数字图像处理》直方图处理概念时,发现需要导数和微积分的知识,于是 2021 年 6 月重头学习导数、微分、不定积分、定积分相关知识,到 2021 年 8 月才学习完这些数学知识,又开始学习直方图的相关知识,包括直方图基础知识、直方图匹配、局部直方图处理以及 OpenCV 的实现,到 10 月底学习到 OpenCV 对比度受限的自适应直方图均衡 CLAHE 算法时,发现存在几个没有想明白的地方,特别是关于 CLAHE 算法的插值处理,没有查到相关资料,只好下载源码,捡起已经丢弃了 10 多年的 C++,反复测试,花了 4 个月时间到最近才终于将 CLAHE 算法完全理解,关于这方面的介绍请参考专栏《
    OpenCV-Python初学者疑难问题集
    “博客”
    计算机视觉算法探究:OpenCV CLAHE 插值算法详解
    》,在这个付费专栏的内容都是类似老猿自己总结的知识文章,对刚刚入门[OpenCV-Python学习同样存在老猿这些问题的初学者可以避免少走点弯路,想来不会多少人能象老猿这样有这么多时间去琢磨的。

以上就是老猿学习的艰辛过程。进展缓慢有三个主要原因。一是缺乏数学知识,二是没有好老师指导,三是老猿太纠结,有些人不注意细节,不搞清楚就不放弃,在某些方面是一种很好的精神,但是在没有指导的情况下,这种方法效率太低了。

四、学习计算机视觉所需的基础知识

结合老猿现阶段所学的知识,谈谈计算机视觉学习需要掌握的基础知识。因为还处于初级阶段,所以肯定是不完整的。

  1. 必须掌握好高数知识。计算机视觉和其他 AI 方向,都离不开高等数学
    √ 图像加减乘除、位运算、线性变换、图像相关与卷积、形态变换、仿射变换等,与矩阵知识息息相关;
    √ 图像的集合运算需要用到集合运算的相关知识;
    √ 图像灰度变换中使用的插值需要插值知识;
    √ 图像灰度处理经常用到概率论相关的知识;
    √ 图像直方图处理需要直方图相关的概率统计知识和微积分知识;
    √……
    老猿大学毕业已经好多年,高数知识都忘光了,为此断断续续花了 4 个月时间将集合、线性代数、导数、微积分知识的基础知识全部重新学习了一遍,并且学习时自己被这些数学知识真正的吸引,比大学阶段的被动学习完全不可同日而语。所以如果大学刚毕业没多久,高数知识还在的同学,在学习计算机视觉和其他 AI 方向时就有很好的基础。
  2. 必须有好的 C++语言基础。计算机视觉及图像处理有多种开发库,这些库大部分都是 C++来实现的,因此掌握好 C++语言对于深入研究相关技术非常有必要。老猿使用的是 OpenCV 库,才开始使用的是 OpenCV-Python,如果是光应用库的 API 可以,但要理解其后的算法和技术则非要阅读 C++源码。老猿最近刚研究清楚 CLAHE 算法,查各种资料都解决不了自己的疑问,没办法只好安装 Visual Studio2019 的 VC++版本,下载 OpenCV 库源码进行研究才弄清楚,其中的插值算法就断断续续花了近四个月时间才终于弄明白(请参考《
    计算机视觉算法探究:OpenCV CLAHE 插值算法详解
    “);
  3. 必须有好的 Python 基础知识。现在的人工智能库,基本都是 Python 语言的,同时 Python 之上的开源库很多,包括 OpenCV 都有 Python 库,因此掌握 Python 是去进行实践验证的基础。如果尚未学习 Python 的,个人推荐《Python 基础教程》第 3 版(Magnus Lie Hetland 著,袁国忠译);
  4. 必须学习图像处理的基础知识。在这方面,Gonzalez 的《数字图像处理》是一个很好的参考资料。建议中英文对照学习;
  5. 计算机视觉是当代人工智能的一个主要方向。深入研究计算机视觉,需要了解人工智能和机器学习的基础知识。对此,我推荐周志华主编的《机器学习》;
  6. 学习 OpenCV 相关的操作,这方面参考 OpenCV 官方文档的帮助文档即可;

由于知识有限,关于计算机视觉所需的基础知识我只能说这么多。我希望它对每个人都有好处。

5. 给准备学习计算机视觉的人的三个个人建议

上面需要介绍一下老猿猴学习计算机视觉的基础知识。以下是三个非技术性建议:

  1. 好好学习高级数字,特别是对于高效率的学校学生。要想在计算机视觉甚至人工智能方面有所建树,一定不能浪费学校时间,学好高级数;
  2. 找个好老师。这位老师不一定是真正身份意义上的老师,只要是在计算机视觉和人工智能方面有扎实基础的先驱。有老师指导和摸索是完全不同的两件事。如果你有幸有这样的老师,你应该珍惜这个难得的机会;
  3. 您不仅对程序开发感兴趣,还需要学习更多的理论知识。计算机视觉甚至人工智能已经具备了很多系统的理论知识。学习完这些理论知识,再结合实际操作,进步肯定会比单纯的程序开发更快更快。好的。

最后,衷心祝愿所有学习计算机视觉的人在虎年学习进步,再创佳绩!

更多图像处理请参考专栏《OpenCV-Python图形图像处理》、《图像处理基础知识》以及付费专栏《OpenCV-Python初学者疑难问题集》的介绍。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python微信公号发消息咨询:
一个老程序员的计算机视觉蹒跚学习之路

也可以扫描博文左栏微信公众号二维码进行咨询。

写博客不容易,请支持:

如果您在阅读本文中有所收获,请点赞、评论和收藏。谢谢您的支持!

老猿付费专栏

  1. 支付栏“
    https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》
    专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《
    https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录
    “;
  2. 支付栏“
    https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏
    )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《
    https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录
    “;
  3. 支付栏“
    https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集
    “为了”
    https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理
    》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《
    https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
  4. 支付栏“
    https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》
    站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果您有兴趣并愿意支持老猿读者,欢迎购买付费栏目。

老猿Python,跟老猿学Python!

☞ ░前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython░

版权声明:本文为博主LaoYuanPython原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/LaoYuanPython/article/details/122909837

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年2月16日 下午4:07
下一篇 2022年2月16日 下午4:36

相关推荐