“图片是由很多像素点组成,每个像素点是由[R,G,B]三原色组成,每一种原色用范围在0~255的整数表示。所以图像分析实际上是对这些数据的分析及计算”
01
—
图片:3维数据矩阵
图1是一张彩色图片。读取该图片的数据后,会得到三个20✖️30的矩阵(如图2,图3,图4)。
图1
其中,20是高度(Height)的像素点数,30是宽度(Width)的像素点数。
举个例子:第3行第12列像素点的R,G,B值分别是:[182, 188, 36],那么这个像素点的颜色是暗黄色。
图2
图3
图4
为了显示更直观,将R,G,B矩阵显示为图5,图6,图7的柱状图形式。
图5
图6
图7
图像分析,是对R,G,B矩阵某一行、某一列或某一区域数据的分析。
02
—
算例:停车位边界判断
图8是一张停车位的照片。读取该图片的数据后,会得到三个664✖️890的矩阵(X: Height方向664个像素,Y: Width方向890个像素)。
图8
因为图8的R矩阵中白色数据比较明显,故以下是基于R矩阵的计算。
对图8的R矩阵各行分别沿Y Width方向取值,并采用R值Trig Level=230为触发值,向右寻找触发点,发现第一个触发点后即退出寻找。
图9是分别对第200行,400行,600行寻找触发点的举例。每行只寻找一个触发点,即图中红色圆点。第600行没有找到触发点。
图9
图10右图是各行向右查询找到的触发点(某些行无触发点),图10左图是将触发点连线,寻找触发点规律。
图10
从图10中可以看出,为了找到停车位的左侧边界,我们需要去掉一些干扰的触发点。
本例中采用的方法是:对触发点的Y值进行求导,然后选取求导值较小的点,如图11最右图。
图11
然后对图11中筛选的触发点再次求导,再次筛选,即得到图12中的第二次筛选的触发点,如图12最右图。
图12
将图11,图12的筛选过程重复多次,如图13,可以看出从第10次筛选开始,结果已经收敛。
图13
图14左图是初次计算的触发点,图14右图是最终筛选的触发点。
图14
对图14右图筛选后的多个触发点进行曲线拟合(本例采用y=ax+b形式进行一次线性拟合),得到结果见图15。
图15
图16是图15的细节部分,可见线性拟合和离散点的关系。
图16
至此,左侧边界直线(也可以进行2次曲线拟合)确定。
同样的,右侧边界采用各行向左⬅️搜寻的方法,最终得到停车位的两侧边界曲线,见图17。
图17
03
—
算例总结
以上仅是个图像识别的简单算例,计算思路及步骤如下:
1)寻找RGB矩阵中图像特征明显的矩阵,或是处理灰度矩阵:Z=0.299R+0.587G+0.114B, (计算后需要对Z取整)。
2)对矩阵的某行,某列,或某区域进行信号分析。
3)通过各种计算得到特征位置或特征数值。
04
—
应用展望
图像识别已被广泛使用,本篇只是简单介绍一下最简单的算例及原理,真正的应用远比本例要复杂。
程序的计算速度和容错性是互相矛盾的。图片特性稳定,则程序简单,计算速度较快;图像特性变化大,则要求程序具有更强的容错能力,程序就越复杂,计算越慢。
目前比较流行的机器学习等算法在图像识别中已广泛应用,使用者不需要对图像特征进行深入了解。但是,基本原理还是需要了解一下~,因为……机器学习实在看不懂~
个人认为,随着穿戴设备,机器学习人工智能,计算速度,网络传输速度的迅速发展,相信会有类似Google glass的产品出现(虽然glass没能量产),从而实现人眼视觉的共享及辅助决策,从而再次改变人类生活。