基于位置关系识别高压线路杆塔、引流线、导线的方法转让专利

申请号 : CN201010290003.5

文献号 : CN101950357B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 邱君华韩军李建彬

申请人 : 上海大学

摘要 :

本发明公开了一种基于位置关系识别高压线路杆塔、引流线、导线的方法,该方法步骤如下:(1)、对输入的高压线路图像进行预处理;(2)、在预处理后的图像上分别提取水平、垂直、倾斜小线段;(3)、以图像中各个分块中水平、垂直、倾斜小线段的数量识别杆塔;(4)、图像上不存在杆塔,在第一类图像上识别导线;(5)、图像上存在杆塔,在图像中采用小线段拟合的方式生成曲线,并判断图像上是否存在引流线;(6)图像上不存在引流线,在第二类图像上识别导线;(7)图像上存在引流线,在第三类图像上识别导线。该方法利用杆塔、引流线、导线之间的位置关系为依据进行识别,能够排除背景中的干扰,使得识别的结果更可靠、精确。

权利要求 :

1.一种基于位置关系识别高压线路杆塔、引流线、导线的方法,其特征在于,该方法步骤如下:(1)、对输入的架空高压线路图像进行预处理;

(2)、在预处理后的图像上分别提取水平、垂直、倾斜小线段;

(3)、以图像中各个分块中水平、垂直、倾斜小线段数量的分布判断图像中是否存在塔杆,其具体包括:将图像纵向分成块,各个分块中分别具有水平、垂直、倾斜小线段,以图像中各个分块中水平、垂直、倾斜小线段的数量,判断图像中是否存在杆塔,如果图像中不存在杆塔,则当前处理的图像为第一类图像,则转步骤(4);如果图像上存在杆塔,则转步骤(5);

(4)、图像上不存在杆塔,则当前图像为第一类图像,在第一类图像中采用小线段跟踪、合并的方法生成长直线,在长直线中识别导线,识别后,终止该图像识别;

(5)、图像上存在杆塔,根据引流线与杆塔的位置关系选择拟合小曲线段的小线段,采用小线段拟合小曲线段,跟踪、合并拟合小曲线段生成曲线段,在生成的曲线段中识别引流线,判断图像中是否存在引流线,如果不存在引流线,则图像为第二类图像,转步骤(6);如果存在引流线,则图像为第三类图像,则跳至步骤(7);

(6)、图像上不存在引流线,在第二类图像中采用小线段跟踪、合并生成长直线,在长直线中识别导线,识别出后,终止该图像识别,其具体步骤如下:(6-1)、跟踪、合并水平、垂直、倾斜小线段生成长直线对象,并将长直线按照斜率分组,构成平行线组;

(6-2)、计算每组平行线组的起点、终点的x、y坐标的均值,记录在相应的Parallel结构的起点与终点字段中。在Parallel结构中根据起点和终点的x、y坐标判断该组平行线与图像上下左右四个边缘的关系,用伪代码描述如下:(1)Paralleli.startP.x→0

(2)Paralleli.startP.y→0

(3)Paralleli.startP.y→height (19)(4)Paralleli.endP.x→width

(5)Paralleli.endP.y→height

如果存在一组平行线组满足上述伪代码条件(1)同时又有一组平行线组满足上述伪代码条件(4),同时两组平行线组之间的距离小于一定阈值,左边那组平行线的终点与右边那组平行线的起点都落在了边长为δ的红色方框中,两组平行线组的夹角为钝角时,则该两组导线为第二类图像上在长直线中识别出的导线,识别出后,终止该图像识别; (7)、图像上存在引流线,在第三类图像中采用小线段跟踪、合并生成长直线,在长直线中识别导线,识别出后,终止该图像识别,其具体步骤如下:(7-1)、跟踪、合并三种小线段生成长直线对象,将长直线根据斜率进行分类得到平行线组;

(7-2)、根据杆塔的位置,确定导线与引流线之间的位置关系如下:

(7-2-1)、如果杆塔在图像的左边时,在平行线组中在杆塔右边查找一组平行线,且与引流线之间存在相交区域,则该组平行线为导线;

(7-2-2)、如果杆塔在图像的中间时,在平行线组中在杆塔左边查找一组平行线,且与杆塔左边的引流线之间存在相交区域;在杆塔右边查找另一组平行线,且与杆塔右边的引流线之间存在相交区域,则该两组平行线为导线;

(7-2-3)、如果杆塔在图像右边时,在平行线组中查找一组平行线在杆塔左边,且与杆塔左边的引流线之间存在相交区域,该组平行线为导线,识别出后,终止该图像识别。

2.根据权利要求1所述的基于位置关系识别高压线路杆塔、引流线、导线的方法,其特征在于:所述的步骤(1)中对高压线路图像进行预处理包括:图像的灰度化、用Prewitt算子提取图像边缘、用综合二值法二值化边缘提取后的图像、最后采用线性细化对二值化后的图像进行细化。

说明书 :

基于位置关系识别高压线路杆塔、引流线、导线的方法

技术领域

[0001] 本发明涉及一种基于位置关系识别高压线路杆塔、引流线、导线的方法。该方法可以应用到红外图像、紫外图像、可见光图像上准确识别出线路的杆塔、引流线及导线。

背景技术

[0002] 采用直升机对高压送电线路进行巡检具有较高的效率。通过在直升机上安装具有多光谱的图像采集设备,用于对输电线路的缺陷进行检测。由于每次巡检采集图像数据量大,完全采用人眼分析诊断线路图像缺陷,工作强度很大,同时会因为人眼的疲劳导致缺陷的遗漏或误判。因此采用智能缺陷诊断的方法自动分析采集的图像,发现线路中的可疑缺陷,有效减少人工诊断的数据量,进而降低人工分析的强度,同时提高线路维护的效率与可靠性。智能缺陷诊断的基础首先是图像上高压线路的各个部件的自动识别,这里主要研究杆塔、引流线、导线三个部件的识别,其次是在部件识别的基础上对部件进行诊断。
[0003] 现有的高压线路部件识别的文献较少,且主要涉及导线的识别。Guangjian Yan等人在“Automatic Extraction of Power Lines From Aerial Images”一文中首先使用radon变换从电力线上提取线段,然后使用组的方法连接这些线段,最后使用卡尔曼滤波器将这些线段连接成完整的导线,从而实现导线的识别;Zhengrong Li等人在“Towards automatic power line detection for a UAV surveillance system using pulse coupled neural filter and an improved Hough transform”一文中首先使用脉冲偶合神经滤波器剔除背景噪声,产生清晰的边缘,应用Hough变换检测直线,在Hough空间中应用基于知识的线聚类方法,改进hough变换,进而获得识别的结果。这两种识别方法存在的问题是:两种方法使用了radon变换和hough变换,故计算量较大,同时由于在野外环境下高压线路图像上的线对象较多,意味着更不适合使用hough或radon算法;其次,由于这两种方法仅仅根据导线本身的特性对导线进行识别,没有结合高压线路上其他部件与导线的位置关系识别导线,容易将与导线特性类似的背景干扰误判成导线,导致后续产生误诊断。

发明内容

[0004] 为了解决上述技术问题,本发明的目的在于提供一种基于位置关系识别架空高压线路杆塔、引流线、导线的方法。该方法能准确的识别杆塔、引流线及导线,通过充分利用杆塔、引流线、导线三个部件的自身特征以及位置关系来进行识别,克服了因使用hough、radon变换时计算量大,以及排除部件本身特性而带来的背景的干扰,降低了识别算法的复杂度、提高了识别的准确性。
[0005] 为达到上述目的,本发明采用如下技术方案:
[0006] 一种基于位置关系识别高压线路杆塔、引流线、导线的方法,其步骤如下:
[0007] (1)、对输入的架空高压线路图像进行预处理;
[0008] (2)、在预处理后的图像上分别提取水平、垂直、倾斜小线段;
[0009] (3)、以图像各个分块中水平、垂直、倾斜小线段数量的分布判断图像中是否存在塔杆。将图像纵向分成块,各个分块中分别具有水平、垂直、倾斜小线段,以图像中各个分块中水平、垂直、倾斜小线段的数量,判断图像中是否存在杆塔。如果图像中不存在杆塔,则当前处理的图像为第一类图像,则转步骤(4);如果图像上存在杆塔,则转步骤(5);
[0010] (4)、图像上不存在杆塔,则当前图像为第一类图像,在第一类图像中采用小线段跟踪、合并的方法生成长直线,在长直线中识别导线;
[0011] (5)、图像上存在杆塔,根据引流线与杆塔的位置关系选择拟合小曲线段的小线段,采用小线段拟合小曲线段,跟踪、合并拟合小曲线段生成曲线段,在生成的曲线段中识别引流线,判断图像中是否存在引流线,如果不存在引流线,则图像为第二类图像,转步骤(6);如果存在引流线,则图像为第三类图像,则跳至步骤(7);
[0012] (6)、图像上不存在引流线,在第二类图像中采用小线段跟踪、合并生成长直线,在长直线中识别导线;
[0013] (7)、图像上存在引流线,在第三类图像中采用小线段跟踪、合并生成长直线,在长直线中识别导线。
[0014] 所述的步骤(1)中对高压线路图像进行预处理包括:图像的灰度化、用Prewitt算子提取图像边缘、用综合二值法二值化边缘提取后的图像、最后采用线性细化对二值化后的图像进行细化。
[0015] 所述的步骤(6)在长直线中识别导线是:在生成的长直线中,按照斜率将长直线归入各个平行线组中,找到两组平行线,其中一组平行线邻近图像左边,另一组邻近图像右边,如果两组平行线具有相交区域,并且两组平行线的夹角为钝角时,则该两组平行线是第二类图像中在长直线中识别出的导线。
[0016] 所述的步骤(7)在长直线中识别导线是:在生成的长直线中,按照斜率将长直线归入各个平行线组中,找到一组平行线与已识别出的引流线之间存有相交区域,则该组平行线是第三类图像中在长直线中识别出的导线。
[0017] 本发明的基于位置关系识别高压线路杆塔、引流线、导线的方法与现有技术相比具有的有益效果是:该方法利用杆塔、引流线、导线之间的位置关系为依据进行识别,能够排除背景中的干扰,使得识别的结果更可靠、精确。该方法可以应用到红外图像、紫外图像、可见光图像上,准确识别出线路的杆塔、引流线及导线。进一步在红外热图像中准确、智能诊断出线路上热缺陷;在紫外图像上诊断出线路上的放电缺陷;在可见光图像上诊断出导线上的断股、异物附着等缺陷。

附图说明

[0018] 图1为贯穿整幅图像的导线的第一类图像的实物图;
[0019] 图2为出现了杆塔、导线且为直线塔线路的第二类图像的实物图;
[0020] 图3为出现了杆塔、引流线、导线且为耐张塔线路的第三类图像的实物图;
[0021] 图4为本发明的基于位置关系识别高压线路杆塔、引流线、导线的方法的流程图;
[0022] 图5为第一类图像中,导线从图像左边进入,右边离开,贯穿整幅图像的示意图;
[0023] 图6为第一类图像中,导线从图像下边进入,上边离开,贯穿整幅图像的示意图;
[0024] 图7为第一类图像中,导线从图像下边进入,右边离开,贯穿整幅图像的示意图;
[0025] 图8为第一类图像中,导线从图像左边进入,上边离开,贯穿整幅图像的示意图;
[0026] 图9为第二类图像中导线识别示意图;
[0027] 图10为第三类图像中杆塔在图像左边时的导线识别示意图;
[0028] 图11为第三类图像中杆塔在图像中间时的导线识别示意图;
[0029] 图12为第三类图像中杆塔在图像右边时的导线识别示意图;
[0030] 图13为本发明的步骤(5)中引流线识别的流程图。

具体实施方式

[0031] 下面结合附图和具体实施方式对本发明的实施例作进一步详细的描述。
[0032] 本实施例是以从直升机上采集到的真实高压线路可见光图像为例进行的说明,图像的分辨率为1280*762。将高压线路杆塔、引流线、导线的识别算法设计成标准的动态连接库,在库中定义一组输入输出函数。初始化,包括:分配空间,定义图像格式,预设一些后续判断需要用的阈值;去初始化,包括:释放在初始化时分配的空间;调用识别函数,输入图像,输出诊断结果;应用在机载实时在线诊断系统,事后线路缺陷分析系统中。
[0033] 将图像分为三类:第一类图像,如图1所示图中只出现了贯穿整幅图像的导线;第二类图像,如图2所示,图中出现了杆塔、导线,杆塔为直线塔;第三类图像,如图3所示,图中出现了杆塔、引流线、导线,杆塔为耐张塔。
[0034] 如图4所示,为本发明的基于位置关系识别高压线路杆塔、引流线、导线的方法,其步骤如下:
[0035] (1)、对输入的架空高压线路图像进行预处理
[0036] 对读入的架空高压线路可见光图像进行预处理,其步骤包括:图像灰度化、用Prewitt算子提取图像边缘、用综合二值化的方法二值化边缘图像、最后采用线性细化的方法细化二值化后的图像。
[0037] (2)、在预处理后的图像上分别提取水平、垂直、倾斜小线段
[0038] 在预处理后的图像上根据图像上各个像素点的属性分别提取水平、垂直、倾斜小线段是:首先在预处理完的图像上依据各个像素点与其8领域中各个像素点的位置关系分别定义为水平像素点、垂直像素点、孤立像素点,然后分别提取水平、垂直、倾斜小线段。提取的步骤如下:
[0039] (2-1)、在预处理完的图像上提取水平小线段,其具体步骤如下:
[0040] (2-1-1)、在图像中找到属性为水平像素点的像素点,以这个点为起点开始搜索,将这个点记为seed。如果存在水平像素点,则转步骤(2-1-2);否则转步骤(2-1-5);
[0041] (2-1-2)、分别搜索seed的右、右下、右上三个方向,如果其中任何一个方向上存在水平像素点,则继续在该方向上进行搜索,同时记录下当前的搜索方向为向右,还是向右下,还是向右上;
[0042] (2-1-3)、直到当前被搜索的像素点在记录下的搜索方向上不存在水平像素点时,停止搜索,将seed作为提取的水平小线段的起点,以搜索停止时的像素点为终点,计算小线段的斜率,截距,长度,并定义小线段结构用来保存提取的小线段的信息,该结构包括:
[0043] 1)小线段的起点;
[0044] 2)小线段终点;
[0045] 3)小线段斜率;
[0046] 4)小线段截距;
[0047] 5)小线段长度;
[0048] 6)小线段落在哪个图像分块中。
[0049] 小线段结构的定义用伪代码表示为:
[0050] Segment{
[0051] Point startP;
[0052] Point endP;
[0053] Double slope;
[0054] Double intercept;
[0055] Int length;
[0056] Int locate;
[0057] }
[0058] (2-1-4)、回到步骤(2-1-1),继续水平小线段的提取。
[0059] (2-1-5)、图像中不存在没有搜索过的属性为水平像素点的像素点,停止水平小线段的提取。
[0060] (2-2)、在预处理完的图像上提取垂直小线段,其具体步骤采用与上述步骤(2-1)基本相同的步骤,只是将上述步骤(2-1)中的“水平像素点”改为“垂直像素点”,经步骤(2-2-1)、(2-2-2)、(2-2-3)、(2-2-4)、(2-2-5)提取垂直小线段;
[0061] (2-3)、在预处理完的图像上提取倾斜小线段,其具体步骤采用与上述步骤(2-1)基本相同的步骤,只是将上述步骤(2-1)中“水平像素点”改为“孤立像素点”经步骤(2-3-1)、(2-3-2)、(2-3-3)、(2-3-4)、(2-3-5)提取倾斜小线段;
[0062] (3)、以图像中的各个图像分块中水平、垂直、倾斜小线段数量的分布判断图像中是否存在杆塔,其具体步骤如下:
[0063] (3-1)、将图像纵向等分成10块,分别统计各个图像分块中水平、垂直、倾斜小线段的数量。
[0064] 定义图像分块结构用来保存每个图像分块的信息,该结构包括:
[0065] 1)分块中水平小线段的数量;
[0066] 2)分块中垂直小线段的数量;
[0067] 3)分块中倾斜小线段的数量;
[0068] 4)分块是否为杆塔区域的标志。
[0069] 图像分块结构的定义用伪代码表示为:
[0070] BlockInfo{
[0071] Int Hnum;
[0072] Int Vnum;
[0073] Int Snum;
[0074] BOOL Tower_Area;
[0075] }
[0076] (3-2)、计算各个分块中水平、垂直、倾斜小线段数量的均值和方差,用伪代码表示为:
[0077] Hmean=1/10*∑BlockInfoi.Hnum (1)
[0078] Vmean=1/10*∑BlockInfoi.Vnum (2)
[0079] Smean=1/10*∑BlockInfoi.Snum (3)
[0080] Hvar=1/10*∑(BlockInfoi.Hnum-Hmean)2 (4)
[0081] Vvar=1/10*∑(BlockInfoi.Vnum-Vmean)2 (5)
[0082] Svar=1/10*∑(BlockInfoi.Snum-Smean)2 (6)
[0083] 其中Hmean、Vmean、Smean为整幅图像上水平、垂直、倾斜小线段数量的均值,[0084] H var、V var、S var为整幅图像上水平、垂直、倾斜小线段数量的方差。
[0085] 如果水平小线段、垂直小线段、倾斜小线段数量的方差同时大于预设的三个阈值时,则图像中存在杆塔。该判断过程采用的伪代码表示如下:
[0086] if(Hvar>α1&&Vvar>α2&&Svar>α3)
[0087] Tower_Exist=1 (7)
[0088] else
[0089] Tower_Exist=0
[0090] 其中αi为阈值。
[0091] (3-3)、如果存在杆塔时,则根据分块中水平、垂直、倾斜小线段的数量判断杆塔所在分块。如果图像中某个分块满足:
[0092] 1)水平小线段的数量与整幅图像水平小线段数量的均值之差大于整幅图像水平小线段数量的方差;
[0093] 2)垂直小线段的数量与整幅图像垂直小线段数量的均值之差大于整幅图像垂直小线段数量的方差;
[0094] 3)倾斜小线段的数量与整幅图像倾斜小线段数量的均值之差大于整幅图像倾斜小线段数量的方差。
[0095] 将该判断条件用伪代码表示如下:
[0096] BlockInfoi.Hnum-Hmean>Hvar (8)
[0097] BlockInfoi.Vnum-Vmean>Vvar (9)
[0098] BlockInfoi.Snum-Smean>Svar (10)
[0099] 此时,则认为杆塔在该图像分块中,将杆塔所在分块结构BlockInfo中的字段Tower_Area置为TRUE。
[0100] (3-4)、以杆塔识别的结果为依据,判断当前处理的图像为第一类图像还是第二、第三类图像。如果不存在杆塔时图像为第一类图像,继续步骤(4);如果存在杆塔时图像是第二类图像或第三类图像,跳至步骤(5)继续处理。
[0101] (4)、图像上不存在杆塔,则当前处理的图像为第一类图像,在图像上跟踪、合并小线段生成长直线,在长直线中识别导线,
[0102] 定义长直线结构:
[0103] 1)长直线起点;
[0104] 2)长直线终点;
[0105] 3)长直线斜率;
[0106] 4)长直线截距;
[0107] 5)长直线长度;
[0108] 6)用来标记长直线属于哪个平行线组的字段。
[0109] 长直线结构的定义用伪代码表示为:
[0110] line{
[0111] Point startP;
[0112] Point endP;
[0113] Double slope;
[0114] Double intercept;
[0115] Int length;
[0116] Int Group;
[0117] }
[0118] 定义平行线组结构:
[0119] 1)平行线组的组号;
[0120] 2)平行线组内直线的条数;
[0121] 3)平行线组的起点;
[0122] 4)平行线组的终点;
[0123] 5)平行线组的斜率;
[0124] 6)用来标记平行线组是否接近图像左边缘的字段;
[0125] 7)用来标记平行线组是否接近图像右边缘的字段;
[0126] 8)用来标记平行线组是否接近图像下边缘的字段;
[0127] 9)用来标记平行线组是否接近图像上边缘的字段。
[0128] 平行线组结构的定义用伪代码表示为:
[0129] Parallel{
[0130] Int Group;
[0131] Int size;
[0132] Point startP;
[0133] Point endP;
[0134] Double slope;
[0135] Int left_edge;
[0136] Int right_edge;
[0137] Int bottom_edge;
[0138] Int up_edge;
[0139] }
[0140] 建立一个长直线对象链表,记为Power_line,用来存放跟踪、合并后的长直线。新建一个平行线组链表,记为Parallel,用来存放Power_line中斜率相同的长直线对象。
[0141] 在图像上跟踪、合并小线段生成长直线,在长直线中识别导线的具体步骤如下:
[0142] (4-1)、分别跟踪、合并水平、垂直、倾斜小线段
[0143] (4-1-1)、跟踪、合并水平小线段,其步骤如下:
[0144] (4-1-1-1)、首先在提取出的水平小线段中拿出一条水平小线段,记为seed_line,该小线段需要满足条件:小线段结构中的长度字段length不为-1。在取出后需要将seed_line.length置为-1。如果存在这样的直线段,则转到步骤(4-1-1-2),否则转到步骤(4-1-1-4)。
[0145] (4-1-1-2)、然后再在已提取出的水平小线段中寻找下一条水平小线段,记为curr_line,该条小线段满足如下条件:1)起点的x坐标大于seed_line终点的x坐标;2)curr_line.length字段不为-1。以seed_line的起点,curr_line的终点为一条新的直线的两个端点,计算新直线的斜率,用伪代码表示如下:
[0146]
[0147] 以该斜率、seed_line的终点以及curr_line的起点计算两个截距,用伪代码表示如下:
[0148] int ercept1=seed_line.endP.y-seed_line.endP.x*newslope (12)[0149] int ercept2=curr_line.startP.y-curr_line.startP.y*newslope (13)[0150] 如果上述两条小线段共线,那么上述两个截距应该相同,用伪代码表示为:
[0151] |intercept1-intercept2|<1 (14)
[0152] 如果seed_line与curr_line符合上述共线条件,则将两直线合并,将seed_line的终点重置为curr_line的终点,同时重新计算seed_line的长度,斜率和截距。将curr_line的length字段置为-1。
[0153] (4-1-1-3)、如果在已提取的水平小线段中仍然存在满足步骤(4-1-1-1)中条件的水平小线段,则返回步骤(4-1-1-2),否则结束本次跟踪,将seed_line添加到一个结构中,该结构用来存放跟踪、合并后的长直线对象。如果Hsegment中还存在水平小线段没有进行过跟踪处理,则返回步骤(4-1-1-1)。否则转步骤(4-1-1-4)。
[0154] (4-1-1-4)、Hsegment结构中不存在没有被跟踪处理过的直线段。完成所有水平小线段的跟踪。
[0155] (4-1-2)、跟踪、合并垂直小线段,步骤同(4-1-1),只是将步骤(4-1-1)中的“水平小线段”改成“垂直小线段”,经步骤(4-1-2-1)、(4-1-2-2)、(4-1-2-3)、(4-1-2-4)完成垂直小线段的跟踪、合并。
[0156] (4-1-3)、跟踪、合并倾斜小线段,步骤同(4-1-1),只是将步骤(4-1-1)中的“水平小线段”改成“倾斜小线段”,经步骤(4-1-3-1)、(4-1-3-2)、(4-1-3-3)、(4-1-3-4)完成倾斜小线段的跟踪、合并。
[0157] (4-2)、在长直线中识别导线,其具体步骤如下:
[0158] (4-2-1)统计Power_line中的平行线组。将Power_line中斜率相同的长直线归入同一个平行线组,将对应长直线对象的Group字段置为同一个值,并且在Parallel中记录该组平行线的信息,将Parallel中长直线条数大小不在10~4范围内的长直线从Power_line中删除。
[0159] (4-2-2)、判断Parallel中的每组平行线是否贯穿整幅图像。如果Parallel中的平行线组能满足下列用伪代码表示的条件中任何一个,则该组平行线为第一类图像上的导线,该组平行线贯穿整幅图像,下列伪代码表示的条件为:
[0160] (1)Paralleli.startP.x→0,Paralleli.endP.x→width
[0161] or
[0162] (2)Paralleli.startP.y→0,Paralleli.endP.y →height
[0163] or (17)
[0164] (3)Paralleli.startP.y→height,Paralleli.endP.x→width
[0165] or
[0166] (4)Paralleli.startP.x→0,Paralleli.endP.y→0
[0167] 伪代码(17)中的条件1表示导线从图像左边进入,右边离开,贯穿整幅图像,如图5所示;
[0168] 伪代码(17)中的条件2表示导线从图像的下边进入,上边离开,贯穿整幅图像,如图6所示;
[0169] 伪代码(17)中的条件3表示导线从图像的下边进入,右边离开,贯穿整幅图像,如图7所示;
[0170] 伪代码(17)中的条件4表示导线从图像的左边进入,上边离开,贯穿整幅图像,如图8所示。
[0171] 完成图像上没有杆塔时的导线识别。
[0172] (5)、图像上存在杆塔,根据引流线与杆塔的位置关系选择拟合小曲线段的小线段,采用小线段拟合小曲线段,跟踪、合并拟合小曲线段生成曲线段,在生成的曲线段中识别引流线,判断图像中是否存在引流线,如果不存在引流线,则图像为第二类图像,转步骤(6);如果存在引流线,则图像为第三类图像,则跳至步骤(7);
[0173] 定义曲线段结构:
[0174] 1)组成曲线段的小线段的端点;
[0175] 2)用来标记组成曲线段的小线段中是否包含垂直小线段;
[0176] 3)用来标记组成曲线段的小线段中是否包含水平小线段;
[0177] 4)用来标记组成曲线段的小线段中是否包含倾斜小线段。
[0178] 曲线段结构定义的伪代码表示为:
[0179] Curve{
[0180] List Point;
[0181] Int Vexist;
[0182] Int Hexist;
[0183] Int Sexist;
[0184] };
[0185] 在图像中采用小线段拟合的方式生成小曲线段,跟踪、合并小曲线段生成曲线段,以识别杆塔左边的引流线为例子进行说明,同理可以对杆塔右边的引流线进行识别。
[0186] 如图13所示,其具体步骤如下:
[0187] (5-1)、根据杆塔的位置选取那些位于杆塔左边,且位置紧邻杆塔的小线段用来拟合小曲线段。
[0188] (5-2)、用被选择的小线段来拟合小曲线段,具体步骤如下:
[0189] (5-2-1)、在被选择的小线段中找到第一条垂直小线段,记为seed,以seed为种子,再在这些小线段中找到第二条垂直小线段,记为seg,seed与seg满足条件:
[0190] 1)seed的终点的x坐标小于seg的起点的x坐标;
[0191] 2)seed的终点与seg的起点之间的距离小于一定的阈值;
[0192] 3)seed与seg的内角介于135到180度之间,
[0193] 用伪代码表示如下:
[0194] seg.startP.x>seed.endP.x
[0195] dis(seg.startP,seed.endP)<δ (18)
[0196] 135°<diag(seg,seed)<180°
[0197] (5-2-2)、合并seed与seg,将seed与seg的端点存放入临时的曲线结构,该曲线结构记为Vcurve,同时将Vcurve的Vexist字段置为1。再以seg为新种子,再在被挑选出来的小线段中查找是否仍然存在小线段能与seg满足上述伪代码表示的条件。如果存在这样的垂直小线段,则将满足条件的垂直小线段的端点添加到Vcurve中。同样可以对被选出来的水平小线段、倾斜小线段进行相同的拟合操作,将拟合的结果分别存放到Hcurve、Scurve中;
[0198] (5-3)、对Vcurve、Hcurve、Scurve中的小曲线段进行跟踪、合并,生成曲线段。其具体步骤如下:
[0199] (5-3-1)、从Vcurve中取出一条曲线(记为curve1),查找是否在Hcurve中存在曲线(记为curve2),使得组成curve1的小线段中的最后一条小线段与组成curve2的小线段中的第一条小线段满足用伪代码(18)表示的条件,如果存在这样的曲线段,则将上述两条小曲线段合并,将组成curve2的直线段的端点添加到curve1中,同时将curve1中的Hexist置为1;
[0200] (5-3-2)、同样,再在Scurve中查找是否存在曲线与curve1共曲线;
[0201] (5-3-3)、将每次跟踪合并小曲线段的结果保存到曲线链表(记为FCurve)中;
[0202] (5-4)、定义引流线由垂直小线段、水平小线段、倾斜小线段组成,在生成的曲线段中识别引流线,如果FCurve中存在曲线,该曲线分别由垂直小线段、水平小线段、倾斜小线段组成,则该曲线为引流线;
[0203] (5-5)、判断图像中是否存在引流线,具体步骤如下:
[0204] (5-5-1)、如果FCurve中不存在引流线,则不存在引流线的图像是第二类图像,继续步骤(6);
[0205] (5-5-2)、如果FCurve中存在引流线,则存在引流线的图像是第三类图像,跳至步骤(7)。
[0206] (6)、图像上不存在引流线,在第二类图像中采用小线段跟踪、合并生成长直线,在长直线中识别导线,参照图9进行详细说明,其具体步骤如下:
[0207] (6-1)、跟踪、合并水平、垂直、倾斜小线段生成长直线对象,并将长直线按照斜率分组,构成平行线组;
[0208] (6-2)、计算每组平行线组的起点、终点的x、y坐标的均值,记录在相应的Parallel结构的起点与终点字段中。在Parallel结构中根据起点和终点的x、y坐标判断该组平行线与图像上下左右四个边缘的关系。用伪代码描述如下:
[0209] (1)Paralleli.startP.x→0
[0210] (2)Paralleli.startP.y→0
[0211] (3)Paraleli.startP.y→height (19)
[0212] (4)Paralleli.endP.x→width
[0213] (5)Paralleli.endP.y→height
[0214] 如果存在一组平行线组满足上述伪代码条件(1)同时又有一组平行线组满足上述伪代码条件(4),同时两组平行线组之间的距离小于一定阈值,在图9中,左边那组平行线的终点与右边那组平行线的起点都落在了边长为δ的红色方框中,两组平行线组的夹角为钝角时,则该两组导线为第二类图像上在长直线中识别出的导线;
[0215] (7)图像上存在引流线,在第三类图像上采用小线段拟合的方式生成长直线,在长直线中识别导线。参照图10、11、12进行说明,其具体步骤如下:
[0216] (7-1)、跟踪、合并三种小线段生成长直线对象,将长直线根据斜率进行分类得到平行线组;
[0217] (7-2)、根据杆塔的位置,确定导线与引流线之间的位置关系如下:
[0218] (7-2-1)、如果杆塔在图像的左边时,在平行线组中在杆塔右边查找一组平行线,且与引流线之间存在相交区域,则该组平行线为导线。如图10所示,在图10中导线从距杆塔近的一端开始延伸一直到图像的右边缘,在引流线远离杆塔远一端与导线近杆塔一端之间存在相交区域,在图中用边长为δ的红色方框表示引流线与导线存在相交区域;
[0219] (7-2-2)、如果杆塔在图像的中间时,在平行线组中在杆塔左边查找一组平行线,且与杆塔左边的引流线之间存在相交区域;在杆塔右边查找另一组平行线,且与杆塔右边的引流线之间存在相交区域,则该两组平行线为导线.如图11所示,在图11中杆塔左边的导线从图像左边缘进入一直延伸到引流线远离杆塔一端,且导线与引流线之间存在相交区域,在图中用边长为δ的红色方框表示引流线与导线存在相交区域,杆塔右边的情况相同;
[0220] (7-2-3)、如果杆塔在图像右边时,在平行线组中查找一组平行线在杆塔左边,且与杆塔左边的引流线之间存在相交区域,该组平行线为导线,如图12所示,在图12中杆塔左边的导线从图像的左边缘进入一直延伸到引流线远离杆塔的一端,与引流线存在相交区域,在图中用边长为δ的红色方框表示引流线与导线存在相交区域。