今天和大家分享下在嵌入式设备中的美元识别,主要介绍纸币图像的预处理部分,涉及到两部分内容:
旋转矫正
嵌入式设备采集的到纸币图像如下图:
首先分析上图的特点,在这张图里,美元有一定的倾斜角度,但是角度不大;美元的背景比较黑,而且美元的边缘比较明显。没错,我们既抓住纸币的边缘比较明显来做文章。
我们是不是可以先把纸币的轮廓找出来(找出来的轮廓当然就是一个大大的矩形),然后用矩形去包围它,得到他的旋转角度,然后根据得到的角度进行旋转,那样不就可以实现矫正了吗!
再详细的总结处理步骤:
阈值二值化——检测轮廓——寻找轮廓的包围矩阵,并且获得角度——根据角度进行旋转矫正。
由于设备本身的特点需要速度快,这里将上面的流程在简化下:通过阈值获取四条边的坐标,运用最小二乘法拟合四条边的直线方程,进一步得到四个顶点的坐标和旋转角度。
仿射变换
变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如下图:
其中上图©的仿射变换就是我们这节要讨论的。
仿射变换(Affine Transformation) :
Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(译注:straightness,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(译注:parallelness,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变)。
仿射变换可以通过一系列的原子变换的复合来实现,包括:平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和剪切(Shear)。
仿射变换可以用下面公式表示:
参考链接:图像变换的基本模型
这个矩阵乘法的计算如下:
具体到二维的仿射变换的计算如下:
几种典型的仿射变换如下:
平移变换 Translation
将每一点移动到(x+tx, y+ty),变换矩阵为:
平移变换是一种“刚体变换”,rigid-body transformation,就是不会产生形变的理想物体。
效果如下:
缩放变换(Scale)
将每一点的横坐标放大(缩小)至sx倍,纵坐标放大(缩小)至sy倍,变换矩阵为:
变换效果如下:
剪切变换(Shear)
变换矩阵为:
相当于一个横向剪切与一个纵向剪切的复合
效果:
旋转变换(Rotation)
目标图形围绕原点顺时针旋转theta弧度,变换矩阵为:
效果:
组合应用
旋转变换,目标图形以(x, y)为轴心顺时针旋转theta弧度,变换矩阵为:
相当于两次平移变换与一次原点旋转变换的复合:
先移动到中心节点,然后旋转,然后再移动回去。
这个转换矩阵也可以下面这样描述:
一些常用转换矩阵如下:
最后通过仿射变换得到处理需要的图:
结尾
今天主要是和大家分享图像处理中的旋转和仿射变换一些基本的操作,这些操作我们在图像处理中经常会用到,接下来我会和大家继续分享图像处理中另外一些基础知识。
如有疑问,欢迎留言讨论
扫描上方二维码关注“嵌入式案例Show”公众号,看更多嵌入式案例