关于图像处理的一些理解

机器视觉的路还很长,绝对不是 DNN就可以搞定一切的。

    图像处理搞了这么多年,有些基本理解:

1. 能在 rgb图像做的算法,就不要放到  gray图像做

2.能在 gray图像做的算法,就不要放到 binary图像 做

    反正记住一条:算法的稳定性完全基于信息量的多少。

1).rgb图像的信息量最大,如果能在这个空间处理好,

比如利用 HSI, Lab 颜色等分割出目标,肯定比 gray图像处理更稳定。

以前做的一个“餐具测量”系统软件,原先用 basler的 灰度相机,使用快速 graph-cut 分割的成功率 明显低于 基于 彩色相机。

为了彩色相机OK,重构了 相机采集程序。

目前 重构了所有的了 大华,巴斯勒,海康威视 等等相机采集程序,全被支持 灰度和彩色两种图像,支持 曝光率设置,

这能解决数据源的问题。

当然这个项目尝试了较多的算法,用了  快速椭圆检测,线条分割算法,加上形状拟合等等,效果明显提升一个档次。

2). gray图像能够处理的,绝对不用 binary图像。

我在一家新公司搞OCR的时候,发现很多同事都是用 二值图像来处理 字符分割问题。

我当时就很纳闷,一家名气不错的公司,核心算法基本上都是基于 二值图的,比如 各种布局算法,形状搜索算法。

这明显是有问题的。

当时接手了 “火车票识别系统”项目,我把整个算法重头写了一遍:预处理,行定位,字符切割,字符识别等等。

所有算法全部基于灰度图像做,而不是二值图。整个预处理算法鲁棒性很好。

关于预处理,我直接根据图像效果 做了 去光照,去 蓝色或者红色 的算法。

关于 二维码定位,我直接用 最大矩形框 方式搜索,成功率几乎 100%。

关于 行定位,我使用 相对位置比例尺,然后用 局部微调 搜索分割线算法,成功率几乎 100%。

关于 字符切割,我根据 不同的域 分别定义不同的切割算法:车站的切割,日期切割,身份证,车次等等,都用不同的切割算法和参数,成功率有 99% 一上。

当然字符识别,确实有点难度,公司的识别引擎居然使用 二值图,导致识别率整体上不去。

导致最后的识别情况是:域识别率 99%~91%之间。(不要以为这个识别率低,因为很多图像质量是很差的:各种光照,划线,打孔,盖章,以及印刷不清等等,还有算法的对样本的拒识率是 0).

3) 关于 binary图像

    二值图像的处理方法,有固定处理套路,所有很多学图像处理的,基本上也就停留在二值图处理上。无非就是 轮廓分析,连通域分割等,再加上 形状拟合。

    但是图像二值化 是非常复杂的,我了解的二值化算法就有20几种,有全局二值化,局部二值化,多阈值二值化  3类。

没有一个二值化算法能够真正解决所有问题。
   如果 图像处理只停留在 二值图处理上,说明还没真正学懂图像处理。

    图像处理是一个经验学科,根据场景特化设计的稳定特征,有时候比各种牛逼算法要好很多,简单稳定很多。

当然,你非得搞各种复杂场景,那么就直接用 分类器和深度学习的算法,毕竟 传统算法擅长的是 速度快,不需要训练数据,算法可解释性强,容易优化和可控; 但是各种分类器和深度学习,则相当于把问题抛给了 训练数据,当然很多的训练器是 喂不饱的,因为你没有那么多的数据样本。

    目前我还在搜集整理我认为比较核心的算法:基于模板形状的 匹配算法,LineMod 算法,Local Search算法,……

当然还有更重要的 亚像素矫正算法:角点矫正,线条矫正等。这些算法在工业上真正用的上,解决真正的需求。

    搞了几年的图像处理,需要升级一下,搞三维重建。所以我得好好学习 三维重建和三维渲染这两大领域。

三维重建算法的核心:相机标定,特征点匹配,四步相移…… 算法的精度才是整个三维算法的核心问题。

三维渲染:也就是 OpenGL/OSG的学习。

    确实很难,但是为了兴趣爱好,以及未来的趋势。加油!

猜你喜欢

转载自blog.csdn.net/laoki/article/details/81843470