高曉偉,張 吉
(1.核工業二一六大隊,新疆烏魯木齊 830011;2.鐵道第三勘察設計院集團有限公司,天津 300142)
高密度電法在物探外業工作中,由于某些操作或儀器原因,往往使數據中包含人為錯誤,或外界干擾產生的量值較大的“過失誤差”以及量值較小的“偶然誤差”。因此,在對高密度電法或電測深法數據進行反演之前要先對其進行預處理,目的是限制“過失誤差”和壓制“偶然誤差”對反演結果的影響。
常規的電法處理軟件一般具有數據預處理功能,但這些功能有些人機交互性不好;有些則對數據格式有著嚴格的限制,只能處理少數數據。為解決上述問題,本文基于Visual Studio 2010平臺,采用VC++語言,開發出了一套人機交互界面友好、數據格式簡單、通用性強的電法數據預處理軟件。
電法數據可視化預處理軟件的核心在于可視化的人機交互數據編輯,其具體步驟為:
(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為本軟件兼容的一個典型的高密度電法測試數據的數據格式截圖,對于其他儀器的數據,可利用Excel等常規軟件將其整理成本格式即可。
數據實時交互顯示是可視化預處理軟件的核心技術之一,為了提高本軟件的使用便捷性,采用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提示框的電阻率也實時變化,方便將電阻率調整到需要的數值。
在數據編輯過程采用局部重繪的方式實現了電阻率數據的高效實時顯示,其關鍵在于選擇反色繪圖模式,重載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;
依照上述技術路線,采用在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.