摘 要: 为了实现对视电阻率等值线图中的疑似水体区域进行识别,开发了一种基于不规则三角网(TIN)等值线填充与OpenCV轮廓提取对各个水体区域进行涂色与识别的系统,改进了等值线填色过程,并根据提取的水体区域轮廓拓扑关系树,计算各个区域面积,给出区域在图像中的具体位置。通过对自动识别结果与人工识别结果的对比,验证系统的实用性,说明系统能够快速准确地识别出视电阻率等值线图的水体区域。
关键词: 视电阻率; 等值线图; 水体区域; 识别系统
0 引 言
变电站基础设施在建设过程中需详细分析建设点的地质条件。像水体(如溶洞充水、破碎带积水和浅层水)这种能给大型设施带来不安全因素的地质特征需要进行超前探测,并且进行位置与大小的判别对于变电站工程勘探具有重要意义。
传统利用瞬变电磁法探测水体区域,且对视电阻率等值线图呈现出的水体状态与位置需要人工标记[1~6],效率较低。本文开发了一种在自动生成等值线图的基础上计算出各个水体区域的面积与位置的系统,从而达到自动识别的目的。本系统利用基于Delaunay三角网与线性插值的方法对探测得到的离散视电阻率数据生成等值线图[7],在填色过程中根据区域颜色对应的视电阻率值分离出水体区域,基于OpenCV提取区域轮廓,且对识别出的对应水体视电阻率的低阻区域进行划分,对划分出的各个区域进行面积计算,并给出区域分布位置。
1 视电阻率等值线的绘制
目前对于离散视电阻率的等值线绘制方法已经非常成熟,常用的有基于规则矩形网格(grid)和基于不规则三角网(triangular irregular network ,TIN)两种方法。基于TIN的方法在反映视电阻率分布情况的真实性上更具有优势。故本系统采用TIN来绘制等值线,具体方法参见文献[7]。
2 视电阻率图低阻区域的一次标识
2.1 水体与非水体区域颜色确定
传统基于拓扑关系[8]、面积大小[9]等方法都可以实现对等值线图的填色。出于效率的考虑,本系统先根据文献[10]的算法对开区域进行填充,再按照封闭区域最左端横坐标从小到大排序的方法确定封闭区域的填充顺序,从而达到整个等值线图的填充。
彩色等值线图被划分为n个等级,则有n-1种具有不同属性值的等值线,且有n种不同的颜色值Color[n]。为了识别水体区域,本系统采用RGB(255,255,255)来确定水体区域的颜色,其他区域的颜色则用RGB(0,0,0)来确定。
如图1(a)所示,如果等值线图边界Contour为不规则多边形,对于开区域RO1或RO2,如果为水体区域,需对其设置为RGB(255,255,255),这时,如果图像背景颜色也为RGB(255,255,255),则区域RO1或RO2会被忽略掉。所以,需将图像背景色置为RGB(0,0,0),如图1(b)所示,这样当对非水体区域进行置色时,便很好地区分了水体与非水体区域。

图1 等值线图背景色设置
Fig 1 Setting of contour diagram background color
2.2 水体区域填色方法
如果一个区域R颜色值为Color[i],则其视电阻率范围ZR=[Z(i-1),Z(i)]与水体视电阻率范围ZW=[Z(d),Z(u)}满足公式
ZR∩ZW≠∅
(1)
则区域R便为水体区域。
如图2所示,当ContourLine[i+1]的视电阻率Z(i+1)大于水体区域视电阻率上限Z(u),ContourLine[i-1]的视电阻率Z(i-1)小于水体区域视电阻率下限Z(d),ContourLine[i]的视电阻率Z(i)小于Z(u)且大于Z(d)时,标记颜色为Color[i+1]和Color[i]的区域为水体区域,且置颜色为RGB(255,255,255)。

图2 等值线与视电阻率范围关系
Fig 2 Relationship between contour and scope of apparent resistivity
设区域R(i)颜色代表视电阻率范围为[Z(left),Z(right)],又设原始离散数据点的最小视电阻率值为Z(min),最大视电阻率值为Z(max),则当R(i)的颜色为Color[0]或Color[n]时,其视电阻率范围应分别为[Z(left)=Z(min),Z(right)=Z(0)],[Z(left)=Z(n-1),Z(right)=Z(max)]。根据图2所给示例,给出通用的识别水体区域的方法,代码如下:
if((Z(left)<=Z(u) && Z(left)>=Z(d))‖(Z(right)<=Z(u) && Z(right)>=Z(d))‖(Z(right)>=Z(u) && Z(left)<=Z(d)))
{
Color(R(i))=RGB(255,255,255);
}
else
{
Color(R(i))=RGB(0,0,0);
}
3 水体区域轮廓识别
3.1 基于OpenCV的轮廓检测与水体区域轮廓分析
OpenCV是一种开源的计算机视觉处理库,其中对于轮廓的识别函数cvFindContours可以快速识别出图像中的不规则形状轮廓,并且可以建立轮廓之间的包含关系拓扑树。
由2.2节方法识别出的水体区域可能存在图3所示情况,即水体区域RW1内部会有个别非水体区域如NRW1,NRW2的存在。在这种情况下,对水体区域RW1的实际面积计算需减去NRW1和NRW2的面积,即:RealArea(RW1)=Area(RW1)-Area(NRW1)-Area(NRW2),则对于水体区域RW内部含有n个非水体区域的情况,可以表示为

(2)

图3 水体区域内部含有非水体区域示意
Fig 3 Diagram of water regions contains non-water regions
cvFindContours可以建立所有轮廓的整个层次树结构。如图3所示水体区域分布,则可以建立如图4所示轮廓层次结构,反映了等值线图中水体区域及其包含的分散非水体区域的层次关系。

图4 水体区域轮廓层次结构
Fig 4 Hierarchy of water regions outline
3.2 水体区域特征计算
设有n个水体区域,则计算每个水体区域的实际面积的具体代码为:
for(k=1∶n)
RealAreaofR(k)=AreaofR(k);
for(t=1∶m)
RealAreaofR(k)=RealAreaofR(k)-SubAreaofR(t);
设区域R(k)的轮廓为CR,且CR由m个点组成,则根据形心的定义可以对每个区域R(k)的中心位置计算。在人工识别时,往往需对区域的左端起始位置xStart与上端起始位置yStart进行判别,本系统也给出了具体的自动计算方法:
for(k=1∶n)
{
PosofR(k).).x;
PosofR(k).).y;
}
xStart=min(CR(1∶n).x);
yStart=min(CR(1∶n).y).
上述方法计算出的是水体区域在等值线图中的像素面积,如果等值线图的分辨率为X pixel×Y pixel,实际探测点跨度宽为cx,地下探测深度为cy,则在计算实际横断面中水体区域的面积还要考虑实际距离与图像像素距离的比例问题。如果xPropotion= Xpixel/cx,yPropotion= Ypixel/cy,再根据平面比例原则可得:
RealAreaofR(k)=RealAreaofR(k)/x Propotion/y Propotion;
PosofR(k).x=PosofR(k).x /x Propotion;
PosofR(k).y=PosofR(k).y/ y Propotion;
xStart=xStart / xPropotion;
yStart=yStart / yPropotion。
4 实 验
利用有256个平面空间离散视电阻率的一组数据对本系统进行实际测试。首先生成具有16个等级且分辨率为1 024×768的视电阻率等值线图,如图5所示。

图5 彩色视电阻率等值线图
Fig 5 Color contour map of apparent resist
设水体视电阻率范围为0~139,则在图5等值线图基础上,利用2节的方法将水体区域和非水体区域划分出来,结果如图6所示。

图6 识别出的水体区域
Fig 6 Recognized water regions
根据图6划分出的水体区域,结合3节给出的方法进行面积、中心位置与左上端起始位置计算,结果如表1所示。可见如果由人工来识别图5生成的等值线图,水体区域分布特征也为表1给出的识别结果。
表1 等值线图中的水体区域数据
Tab 1 Data of water regions in contour map

5 结 论
视电阻率等值线图水体区域自动识别系统改进了基于TIN的等值线填色过程,精确划分了水体与非水体区域,并且利用OpenCV轮廓提取方法建立了水体区域与包含的非水体区域的层次结构,计算了实际面积、中心位置和左上端起始位置,给出了计算结果。经过大量数据的实验,验证了本系统在水体等低阻区域的识别应用中具有较高的效率与准确性。根据本系统可以对任意指定视电阻率值范围的区域进行识别,且投入到了实际应用中。