做为一名5岁的AI产品汪,刚好利用春节(疫情)假期在家整理了一些CV的文章,发现网上的资料质量参差不齐,内容缺斤少两,小白很难甄别/读懂,想对CV有一个系统的认识很难,就自己做了一个系统总结(小白可以当教材看)。
本人并非CV领域专业人士(产品经理),但希望可以帮助小白对CV全流程和原理有一个系统的认识,也欢迎各位大牛帮忙纠正。
适读人群:
- 对AI感兴趣的同学
- 对AI产品经理感兴趣的同学
- 互联网产品经理想转AI产品经理的同学
- 对CV或者图像处理有一定基础,想再系统复习的同学
读完收获:
- 对CV全流程有一个了解,明白从一个图像识别需求到输出结果,CV都需要做些什么
- AI产品经理需要掌握的CV常识和专业名词,终于知道算法工程师在说什么了
- 熟悉CV的全流程,在数据收集、产品设计时就可以尽量规避问题,提高图像识别准确率
- 收藏了本文章,可以经常拿出来复习,再方便不过啦
首先我把CV的处理流程分为4个阶段:1图像采集->2图像编码->3图像预处理->4特征工程
- 图像采集:是CV处理的数据输入来源,根据需要识别的业务需求,对图像的背景光线、噪音、距离、遮挡物等会有相关的要求。
- 图像编码:做为计算机视觉处理的前提,通过把图像的二进制数据进行交换,转换为OpenVC等算法模型可用的图片编码格式,常用的方法有模拟处理、脉冲调制、数字编码、预测码等方式。
- 图像预处理:是为特征工程扫除障碍和无效信息,提高图像识别准备率的核心主力了,因为在实际的业务场景中收集到的图像数据是非常复杂多样的,会有图像质量太差、大量无效数据、图像变形、失真等情况,而这种图像如果直接由特征工程去处理,输出的结果可想而知。
- 特征工程:就是大家常说的AI模型,但可能运用的不只一种模型,根据业务的需求选择对应的算法模型,提前针对需要的输出结果,进行特征提取、特征选择、PCA降维等工作,再用大量已标注好的高质量数据进行训练,输出可以满足此阶段业务识别需求的特征工程。
下图是我对CV处理流程的理解:
一、图像预处理是什么?
图像预处理主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性、最大限度地简化数据,从而改进特征提取、图像分割、匹配和识别的可靠性。
一般的预处理流程为:1灰度化->2几何变换->3图像增强
1.1 灰度化是什么?
现在大部分的彩色图像都是采用 RGB颜色模式,在进行图像处理时,我们往往需要对RGB三个分量通道依次进行处理,花费时间和计算成本会相对较高。但实际上RGB并不能反映图像的形态特征,只是从光学的原理上进行颜色的调配。
所以我们经常要把彩色图像弄成8位的灰度值图像直接进行处理,可以通过直方图,灰度变化,还有正交变换之类的进行处理,减少所需处理的数据量,从而达到提高整个应用系统的处理速度的目的。
目的:为了减小图像原始数据量,提升计算效率,因为图像处理中不一定需要对彩色图像的RGB三个分量都进行处理。
科普环节,大牛请跳过:
R:Red 红色
G:Green 绿色
B:Blue 蓝色
RGB图像就是我日常见到的大多数彩色图像,它只使用R、G、B三种颜色,每种颜色有0~255范围内的强度值。如果按照不同的比例混合可以组合成约1677万种颜色,几乎包含了人类视力所能感知的所有颜色,而每幅彩色图像是由RGB三幅灰度图像组合而成。
二值图像(Binary Image):图像中每个像素的灰度值仅可取0或1,即不是取黑,就是取白,二值图像可理解为黑白图像
灰度图像(Gray Scale Image):图像中每个像素可以由0-255的灰度值表示,具体表现为从全黑到全白中间有255个介于中间的灰色值可以取
下面用一张图来感受一下灰度图与彩色图像之间的联系与差别
然后下面分析一下关键的代码:
读入图像之后,得到im,我们可以看到im是一个三维的变量,包括了像素的位置(高度(即垂直长度)和宽度(即水平长度)),像素的颜色。(注,24位真彩图:也是用矩阵表示,图像像素直接用RGB颜色显示,而不是通过颜色索引表。图像像素的颜色用三个变量表示即(R,G,B),每个变量从0~255变化,因此一个像素也就是8bit*3=24bit,一个像素用24bit表示可以有2^24种颜色。)我们可以看到会有unit8,就是8bit的原因。
然后我们获取图像的大小,用H,W,Z三个变量接收,其中H接收了图片的高度(也就是垂直长度),W接收了图片的宽度(水平长度),然后Z接收了图片的颜色值。
然后我们将图像转换成双精度类型 I,这是因为使用双精度可以仿真在转换过程中发生精度损失的问题,也是方便我们进行转换。转换之后,我们可以看到unit8的类型别我们转换成了double类型。
接着,我们构造一个图像res矩阵,这个图像首先进行归一化,也就是让里面的元素全部为1,对于图像,就是一张白色的图片了。这个图像主要是用来“保存”我们进行位移后的图像。
然后我们就设置平移量、构造平移变换矩阵。这个矩阵我们根据前面的理论部分可以得到。
接着便是重点了,进行平移变换。我们来一句一句解读这个循环。当x0=1,y0=1时,得到第一个像素的位置,也就是(x0,y0)这个像素,然后将这个像素位置进行缓存,也就是构造一个矩阵temp,即理论中的:
1.2.4 图像的旋转
一般情况下,旋转操作会有一个旋转中心,这个旋转中心一般为图像的中心,旋转之后图像的大小一般会发生改变。图像像素原来的坐标为(x0,y0),(顺时针)选择Θ角度后得到(x1,y1),用数学公式表达如下所示:
x1 = x0·cosΘ+ y0·sinΘ
y1 = -x0·sinΘ+ y0·cosΘ
用矩阵表示如下所示:
双三次曲线插值方法计算量较大,但处理图像效果是最好的。这种算法是一很常见的算法,普遍用在图像编辑软件、打印机驱动和数码相机上。
现在有许多数码相机厂商将插值算法用在了数码相机上,并将通过算法得到的分辨率值大肆宣传。固然他们比双三次插值算法等先进很多,但是事实图像的细节不能凭空造出来的。因为插值分辨率是数码相机通过自 身的内置软件来增加图像素,从而达到大分辨率效果。
啊哈,对于小白来说这些内容已经很烧脑了,大家看完之后要尽量动手尝试一下哦,下一篇会继续为大家更新图像增强和图像恢复的部分。
注:文章部分内容和图片来自于互联网,在参考文献中会注明出处,如有侵权等问题,请及时联系我删除,谢谢大佬们的支持和无私奉献~
作者:贾涛,微信公众号:贾产品(ID:JIAPRODUCT),互联网爱好者。想把自己工作实践中的心得体会分享给大家,专注于产品讲技术、产品心得、产品面经、产品职业规划知识分享。
本文由 @贾涛 原创发布于人人都是产品经理,未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议