表针角度识别测试样例
曲仁军
renjunqu@gmail.com
2011 年 12 月 2 日
一 前言
本文是对已经完成了的,在上周三(2011 年 11 月 30 日)的周报中提到的,拥有表针角
度提取的 matlab 测试样例的展示报告。本文的整体内容框架是:
(1) 处理过程展示
此部分会详细展示从图片中提取直线角度的每一步过程,提取过程中使用的算法都源
自 digital image processing 2nd
edition [Gonzales 2002]中,由于本人能力有限,故不会对算
法进行详细介绍,想要对算法细致了解的同学请参考[Gonzales 2002]。如果哪位同学下载不
到电子版的教材可以和我联系。
(2) 效果展示
为了能够详细的测试此脚本的效果,我一共使用脚本提取了 19 张图片的角度(这 19 张
图片中的指针分别指向不同的角度),在本部分会对各个图片的角度提取结果进行展示。使
用的其中一个图片是在上周三周报中展示的那个透明秒表的图片,其他图片是对原图片进行
了 PS 处理之后的图片(使用 PS 将原图中的指针角度进行了改变)。
(3) 错误记录
在进行 matlab 测试脚本的过程中,我犯了一些和算法不相关的错误,犯这些错误的主
要原因是对一些 matlab 函数的运行机制的理解不透彻。在这一章我会对我犯的这类错误进
行介绍。已经搞清并解决了的问题会说明错误原因和解决方法,还没搞清的错误仅仅描述错
误现象。
(4) MatlabMatlabMatlabMatlab 实现
这部分展示测试样例的 matlab 脚本代码。
二 处理过程展示
虽然现在已经有了许多成熟的计算机图像识别算法,但是在进行计算机图像识别的时
候,必须先进行很多的图像预处理过程才能应用这些已经成型了的识别算法,否则识别成功
的概率会大大降低。而对于不同的图像,应该选择不同的预处理过程,才能大大增加后面识
别算法的成功概率。
由于本测试样例的目标是提取一副时间图像的表针角度,表针可以当做一个直线,所以
使用的识别算法是提取直线角度最著名的 hough line transform(霍夫直线变换),并根据图像
的特点(表针为黑色,并且比较其他黑色图形要粗)设计了图 2-1 所示的提取过程。
让我们一起看一下对图 2-2 上述过程的每一步之后的变化。
图 2-1 图片处理过程
(1)(1)(1)(1)灰度值提取
图 2-2 展示图片 1
图 2-2 是彩色图片,表针本身只有黑色,所以其实进行表针角度提取颜色信息是无用的,
我首先是将图 2-2 通过灰度值提取转化为了图 2-3。
图 2-3 图 2-2 经过灰度值提取
(2)(2)(2)(2)图像二值化
图 2-3 已经是只有灰度信息的黑白图片了,但是除了表针之外的无用信息太多,利用表
针是黑色的特点(灰度值比较低),我使用图 2-3 值灰度最大值的 20%作为门限,对图 2-2 进
行了二值化处理,得到了图 2-4。
(3)(3)(3)(3)图像二值化
图 2-4 图 2-3 经过二值化处理
图 2-4 中已经去掉了很多的无用信息,经过二值化之后,图 2-4 中黑色部分的灰度值是 0,
白色部分的灰度值是 1。为了能够利用上[Gonzalez 2002]中提到的形态学算法,所以需要表
针部分的灰度值变为 1,所以需要对图 2-4 进行灰度值反转,得到图 2-5。
图 2-5 图 2-4 经过灰度值反转
(4)(4)(4)(4)形态学膨胀算法
得到了图 2-5 之后,发现图 2-5 中的表针部分有很多不连续的点,这会对后面的识别造
成影响,对图 2-5 使用"膨胀算法(image dilation)"可以减少这种状况,如图 2-6 所示:
(5)(5)(5)(5)形态学腐蚀算法
图 2-6 图 2-5 经过膨胀算法
图 2-6 中的表针部分已经足够连续了,这时图像中还有很多无用的杂点,就是这些数字,
通过观察发现利用表针的一大特性(表针有比数字要粗的部分),形态学腐蚀(image ersion)算
法可能会帮到我们,如图 2-7 所示:
图 2-7 图 2-6 经过腐蚀算法
(6)(6)(6)(6)形态学骨架提取算法
经过腐蚀算法之后,除了表针的一部分,其他的杂点都已经被滤除了,虽然人眼看觉得
剩下的"有用像素点"很少,但是原图片是 600 * 592 的图片,对于计算机识别来说,这些点
还太多,换句话说,现在保留的指针部分太"厚"了,[Gonzalez 2002]中提到的形态学骨架提取
算法会帮助我们在保留有用信息的同时,将有用像素点的数量减少到最少,如图 2-8 所示。
(7)(7)(7)(7)霍夫直线变换
图 2-8 图 2-7 经过骨架提取算法
虽然图 2-8 中剩下的有用像素点很少,但是其方向信息完全的保留了下来,只要使用
hough 变换的时候取的精度合适,就可以比较精确的得到指针的角度。如图 2-9 所示。
图 2-9 直线角度提取结果(蓝色所示)
图 2-9 中的蓝色粗线是根据霍夫变换得到的直线参数绘制的,可见虽然有少量误差,提
取的结果还是可以的。经过测试发现,最后得到的直线的角度完全取决于提取的骨架的方向,
骨架提取的成功与否又取决于膨胀算法和腐蚀算法的处理结果,为了达到最优结果,必须根
据图片改变这 2 个算法的参数。我在测试的时候,对 19 张图片使用了相同的算法参数,所
以各个图片的角度提取精度不尽相同。
三 效果展示
本章会展示对 19 张图片进行上一章所述过程的结果。本章叙述的指针读数均为图片中
读数而不是数学中的角度。
(1)(1)(1)(1) 0000 度指针
((((2222)))) 55555555 度指针
图 3-1
0 度指针识别展示
((((3333)))) 50505050 度指针
图 3-2
55 度指针识别展示
图 3-3
50 度指针识别展示
((((4444)))) 45454545 度指针
((((5555)))) 40404040 度指针
图 3-4
45 度指针识别展示
(6)(6)(6)(6) -35-35-35-35 度指针
图 3-5
40 度指针识别展示
图 3-6
-35 度指针识别展示
(7)(7)(7)(7) 35353535 度指针
(8)(8)(8)(8) -30-30-30-30 度指针
图 3-7
35 度指针识别展示
(9)(9)(9)(9) 30303030 度指针
图 3-8
-30 度指针识别展示
图 3-9
30 度指针识别展示