r = xcosθ + ysinθ (1)
2.1 边界记录器
在同一行验证方法的时间、效率低下的一个重要原因是,他们不知道带状区域的哪一部分包含特征点。因此,他们要么重新计算θ与已知的所有特征点,挑选出那些具有相同(或类似)R,或检查图像中的每一个带状区域内的位置。明显地,这不是一个检测大尺寸图像的快速方法。一般的, 只是一个带状区域的一小部分包含的特征点,根据这一事实,我们添加一个边界记录器来记录每个参数的单元,在记录最小的范围之前,只包含一个累加器,包含促成此参数功能点。每个参数的边界实际上是两个特征点,被称为“上边界”和“下边界”,其中括所有其他特征点贡献给这个参数。由于参数空间的尺寸数大,图像尺寸大,应该考虑添加一些字节的参数单元。根据公式(1),r和θ,可以从另一个角度计算尺寸图像坐标。所以我们只需要记录在参数单元的尺寸坐标,X或Y型坐标的选择取决于θ(图1)。当45<θ<135,在图像空间的线几乎是水平的,所以选择的X尺寸坐标记录的边界;否则,选择的Y尺寸坐标。在下面的代码所示的边界记录器初始化和记录进程。
Initialization: for all parameter cells
Param[r][θ].accumulator = 0;
Param[r][θ].low_boundary=max(X_MAX,Y_MAX);
Param[r][θ].up_boundary = min(X_MIN, Y_MIN);
记录:点(X,Y)参数
Param[r][θ].accumulator += 1;
IF (45<θ<135) {
Param[r][θ].low_boundary=min(Param[r][θ].low_boundary,point.x);
Param[r][θ].up_boundary=max(Param[r][θ].up_boundary, point.x);
}ELSE {
Param[r][θ].low_boundary=min(Param[r][θ].low_boundary,point.y);
Param[r][θ].up_boundary=max(Param[r][θ].up_boundary, point.y);
}
记录尺寸的选择
在min(A,B)返回A和B较小的一个, MAX(A,B)返回A和B较大的一个。
考虑到图像的大小为L*W,其范围为r最多是 ,HT的二维参数数组的存储要求可以计算如下:
我们选择R = 2,θ=1保持方向的准确性和集聚效应。参数单元包含一个累加器,通常是一个整数(4字节),和两个边界记录器是短整数(每个2字节)。对于大量的L是约14,000像素W约9,900像素的,线厚为0.003英寸超薄的A0尺寸的工程图纸扫描图像以300 dpi,这是不够精细的。然后,参数数组的内存要求是约12.3兆字节,这显然是接受当前的硬件条件。
2.2 线的检验
在这一步,我们介绍两个临界值:MIN_LEN代表的最小可接受线的长度,和MAX_GAP代表可接受的最大间隙长度。他们是根据图像类型的预设。
在转化后的所有特征点之后,我们发现在一个小5-5附近的当地最大峰值,把所有峰值比MIN_LEN小的按降序排列并存储在峰值列表中。线的验证按峰值列表的排列顺序开始,因此,它也可以采取利用最大的峰值。由于记录的边界信息,我们只需要分析在原来确定的图像找到线段证据的有价值的峰值参数部分,并检测每个这些段线的宽度。然后,从图像中删除已验证的直线段的像素,即,把它们从黑色到白色。由于此线验证是根据图像分析出来的,不在特征点上,重叠线成功地避免通过已验证的直线段的像素删除。因此,它并不需要重新积累,它比之前的方法更快。
根据记录第 2.1 节中定义的过程的边界,可以很容易计算的两个边界点的图像坐标。记录为Plb和Pub,线检验按顺序分析沿直线方向从Plb到pub图像,为了避免在求解方程的重计算,我们采用现成的栅格化方法 — — Bresenham 算法的直线,这将生成最多三个补充直线的路径点 - 产生8条连接Plb到Pub点的路径。记为PI(I = 1.. N),其中P1=PLB和PN =Pub。详细的图像分析算法如下: