高密度电法数据2D可视化预处理软件的开发
2013-01-17高晓伟
高晓伟,张 吉
(1.核工业二一六大队,新疆乌鲁木齐 830011;2.铁道第三勘察设计院集团有限公司,天津 300142)
0 引言
高密度电法在物探外业工作中,由于某些操作或仪器原因,往往使数据中包含人为错误,或外界干扰产生的量值较大的“过失误差”以及量值较小的“偶然误差”。因此,在对高密度电法或电测深法数据进行反演之前要先对其进行预处理,目的是限制“过失误差”和压制“偶然误差”对反演结果的影响。
常规的电法处理软件一般具有数据预处理功能,但这些功能有些人机交互性不好;有些则对数据格式有着严格的限制,只能处理少数数据。为解决上述问题,本文基于Visual Studio 2010平台,采用VC++语言,开发出了一套人机交互界面友好、数据格式简单、通用性强的电法数据预处理软件。
1 电法数据可视化预处理技术路线[1]
电法数据可视化预处理软件的核心在于可视化的人机交互数据编辑,其具体步骤为:
(1)打开数据,并将其以图形(图像)的方式实时显示于计算机屏幕等输出设备上;
(2)人工选择或自动标识畸变数据点;
(3)对畸变数据点进行调整;
(4)重复(2)、(3)步骤直至所有畸变数据点都做好调整;
(5)保存数据。
图1为本电法数据预可视化预处理软件电阻率畸变点编辑流程图。
预处理软件开发的关键点在于电法数据的显示及畸变点人机交互选择与编辑,为解决上述问题,实现优秀、高效的数据编辑,本文采用了微软MFC类库提供的CToolTipCtrl类实现了电阻率数值的实时显示,并采用反色绘图模式实现了视电阻率畸变点调整过程中的高效重绘。
图1 高密度电法数据预可视化预处理软件电阻率畸变点编辑流程Fig.1 Editing process of distortion point of resistivity of pre-processing software by high density electrical method
2 电法数据预处理软件开发的关键点[2]
2.1 数据结构设计
为加强软件通用性,高密度电法数据预处理软件在设计时采用了最简单的数据结构,即横坐标、纵坐标(或数据点层号)及视电阻率三列的文本数据格式,三列之间可采用任意数量的空格或制表符加以分割。图2为本软件兼容的一个典型的高密度电法测试数据的数据格式截图,对于其他仪器的数据,可利用Excel等常规软件将其整理成本格式即可。
2.2 基于VC++的Tip提示类实现数据实时显示
数据实时交互显示是可视化预处理软件的核心技术之一,为了提高本软件的使用便捷性,采用CToolT-ipCtrl类提供的实时Tip技术,实现了让鼠标提示窗口跟着鼠标在屏幕上移动。
图2 本电法数据预处理软件兼容数据格式Fig.2 Compatible data format of pre-processing software
具体实现方法如下:
(1)在View里添加CToolTipCtrl变量m_tool;
(2)重载View类的OnMouseMove函数,并在其中添加如下代码:
str.Format("横 坐 标:%6.3f 层 序 号:%3d 视电阻率:%6.3f",
m_HDRData.m_Data[m_nSelectedPoint].x,//当前选择数据点的横坐标
m_HDRData.m_Data[m_nSelectedPoint].y,//当前选择数据点的纵坐标
m_HDRData.m_Data[m_nSelectedPoint].rho);//当前选择数据点的视电阻率
m_ToolTip.UpdateTipText(str,this);//实时 Tip 显示更新
在进行数据编辑时,随着鼠标的移动,Tip提示框的电阻率也实时变化,方便将电阻率调整到需要的数值。
2.3 数据人机交互编辑过程中的重绘技术
在数据编辑过程采用局部重绘的方式实现了电阻率数据的高效实时显示,其关键在于选择反色绘图模式,重载OnMouseMove函数,在鼠标移动过程中随着鼠标移动不断对上一个像素点所绘图形进行反色重绘,并对新像素点位置进行绘图,具体实现方式如下。
dc.SetROP2(R2_NOT);//选择反色的绘图模式
//以下为对鼠标位于上一个像素点时所绘图形进行反色重绘
dc.MoveTo(CPoint(cp - GetDeviceScrollPosition()));
dc.LineTo(CPoint(lp - GetDeviceScrollPosition()));
dc.MoveTo(CPoint(cp - GetDeviceScrollPosition()));
dc.LineTo(CPoint(rp - GetDeviceScrollPosition()));
dc.Rectangle((cp.x - m_HDRData.m_nPointRadious-GetDeviceScrollPosition().x),
(cp.y- m_HDRData.m_nPointRadious- GetDeviceScrollPosition().y),
(cp.x+m_HDRData.m_nPointRadious- GetDeviceScrollPosition().x),
(cp.y+m_HDRData.m_nPointRadious- GetDeviceScrollPosition().y));
//以下为鼠标位于本像素点时实时绘制图形
dc.MoveTo(CPoint(point- GetDeviceScrollPosition()));
dc.LineTo(CPoint(lp - GetDeviceScrollPosition()));
dc.MoveTo(CPoint(point- GetDeviceScrollPosition()));
dc.LineTo(CPoint(rp - GetDeviceScrollPosition()));
dc.Rectangle((point.x - m_HDRData.m_nPointRadious-GetDeviceScrollPosition().x),
(point.y - m_HDRData.m_nPointRadious- GetDeviceScrollPosition().y),
(point.x+m_HDRData.m_nPointRadious - GetDeviceScrollPosition().x),
(point.y+m_HDRData.m_nPointRadious - GetDeviceScrollPosition().y));
cp.y=point.y;
3 应用效果及结论
依照上述技术路线,采用在Visual Studio平台下,采用VC++语言开发出了本高密度电法数据预处理软件。
经过大量的试验验证及若干铁路勘查、公路路基勘查项目的使用,证明本软件人机交互界面友好,数据兼容性强,数据处理效果良好,是一款优秀的高密度电法数据预处理软件,并值得推广应用。
图3 高密度电法数据与处理软件界面截图Fig.3 Sectional drawing of data of high density electrical method and processing software interface
图4 畸变点手工编辑及电阻率实时Tip显示Fig.4 Manual editing of distortion point and real-time tip display of resistivity
[1] 利奕年,罗延钟.高密度电法视电阻率数据预处理算法[J].物探化探计算技术,2006,28(4):328.
[2] 董浩斌,王传雷.高密度电法的发展与应用[J].地学前缘,2003,10(1):171-176.