![](https://csdnimg.cn/release/download_crawler_static/87734548/bg4.jpg)
第 4 章 基于 Hough 变化的答题卡识别
37
面上的任意一点都对应 rθ 平面上的一条正弦曲线。如果有一组位于由参数 r
0
和 θ
0
决定的直线
上的边缘点,则每个边缘点都对应 rθ 空间的一条正弦型曲线。由于这些曲线都对应同一条直线,
因此所有这些曲线必交于点(r
0
, θ
0
)。
在实际计算过程中,为了找出这些点所构成的直线段,我们可以将 rθ 空间进行网格化,进而
将其量化成许多小格,并初始化各小格的计数累加器。根据每个(x
0
, y
0
)点的极坐标公式代入 θ 的量
化值,算出各个 r 的值,如果量化后的值落在某个小格内,则使该小格的计数累加器加 1;在全部
(x, y)点都变换后,对小格计数器进行统计,包含较大计数值的小格对应共线点,并且(r, θ)可作为直
线拟合参数;包含较小计数值的小格一般对应非共线点,丢弃不用。通过以上过程可以看出,如果
r、θ 网格量化度量过大,则其参数空间的聚合效果较差,很难查找直线的准确 r、θ 参数;同理,
如果 r、θ 网格量化度量过小,则计算量会随之增大,影响查找效率。因此,在计算过程中需要综
合考虑这两方面,选择合适的网格量化度量值。
由于 Hough 变换需要进行网格扫描处理,运行速度往往较慢,因此在进行直线检测和倾斜
角度计算时,需要考虑的一个重要因素就是计算量。其中,计算量与搜索角度步长 θ
s
和搜索角
度范围 θ
r
密切相关。因此,采用多级 Hough 变换,通过设置角度搜索步长由大到小进行直线检
测和倾斜角度计算,可以有效降低算法的计算量。多级 Hough 变换首先用较大的 θ
s
和 θ
r
求出倾
斜角度的大致范围,这类似于人眼主观估计的过程;然后用较小的 θ
s
和 θ
r
对倾斜角度进行细化
处理,对于某些应用场景甚至可以求出约 0.02°的倾斜,这类似于人眼仔细估计的过程。因此,
采用多级 Hough 变换比直接应用 Hough 变换在运算速度上有了较大提高。
在计算答题卡图像的倾斜角度时,为了消除涂抹区域不均匀的影响,对已获取的满足上述
特征的极大值对应的倾斜角度,可采用算术平均的方式进行优化处理。假设每行答题区对应的
倾斜角度都为 θ
i
(i=1,2,…, N,N 通常为答题区的总行数),则图像的倾斜角度 θ
m
由(4.3)式给
出:
N
i
m
i
N
1
(
4.3
)
在获取答题卡图像的倾斜角度后,可以对图像进行旋转处理。假设点
xy,
00
绕点
ab,
旋
转
度后坐标为
xy,
11
,旋转后中心坐标为
cd,
,则:
y d b y
x c a x
1 0 0 1 0 0 1 0 0 1 1
0 1 sin cos 0 0 1
1 0 cos sin 0 1 0
10
10
(
4.4
)
图像旋转可能会引起图像的高度和宽度范围的改变,结合答题卡图像周边区域的特点,
我们对旋转图像超出范围的周边区域进行了删除处理。同时,为了尽可能保持图像的完整性,
在进行旋转时以图像的中心位置作为旋转中心进行计算,对答题卡图像进行倾斜校正的效果