郭佳
(國家超級計算天津中心,天津300457)
在石油、勘探、氣象等行業(yè)中,常常要將采集數(shù)據(jù)或計算結(jié)果以二維圖像的方式直觀地展示在電子或紙質(zhì)材料中,漸變圖就是其中一種常見的成圖方式,而當科研人員在原始數(shù)據(jù)缺失的情況下,如何從漸變圖中還原出原始數(shù)據(jù),以便于做進一步的科研用途,這對于數(shù)據(jù)還原或降低數(shù)據(jù)重新獲取成本方面都具有重要意義。
本文采用圖像處理庫OpenCV[1]結(jié)合二維差值算法設(shè)計并實現(xiàn)出從漸變圖還原數(shù)據(jù)的基本流程,不僅能有效還原出原始數(shù)據(jù),對于因為標注等原因造成的缺失數(shù)據(jù)圖像也能有很好的還原效果。
將數(shù)據(jù)生成漸變圖的一般過程是:選擇一種數(shù)值到顏色的映射表,然后遍歷二維數(shù)據(jù)中的每個標量值,計算該值對應(yīng)的映射顏色,于是二維數(shù)據(jù)轉(zhuǎn)化成了二維圖像,如圖1。
而從圖像還原數(shù)據(jù)的過程可以看成圖的逆過程,它的過程如下:
(1)矩形檢測:識別圖像中的漸變圖主區(qū)域,以及顏色棒區(qū)域;
(2)建立映射表:根據(jù)顏色映射區(qū)域,建立顏色到數(shù)值的映射表;
(3)離散點識別:遍歷漸變圖,將各像素點顏色值識別成其標量值;
(4)數(shù)據(jù)網(wǎng)格化:將識別出的散點值網(wǎng)格化為二維數(shù)據(jù)。
圖1 數(shù)據(jù)成圖的一般過程
矩形檢測的目的是識別出圖像中的顏色棒區(qū)域和漸變圖區(qū)域。矩形檢測和識別是機器視覺領(lǐng)域中的重要內(nèi)容,人們已經(jīng)研究出了很多矩形檢測算法,如C.Rosito Jung 和R. Schramm 提出的一種基于窗口化的Hough 變換的矩形檢測方法[2],張從鵬等人提出的基于Harris 角點的矩形檢測算法[3]。
在大部分矩形檢測算法中,首先要檢測出組成矩形的4 條直線,再計算這些直線的4 個交點作為矩形的角點位置,于是矩形檢測問題就轉(zhuǎn)化為直線檢測問題,在直線檢測中應(yīng)用最廣的當屬霍夫直線變換算法,但是該算法會容易檢測出多余的直線,結(jié)果冗余信息較多,尤其是顏色棒區(qū)域的邊長很短,非常容易受到干擾,所以本文通過像素搜索方法去尋找矩形4 個邊界的位置。
在OpenCV 中進行尋找漸變圖矩形和顏色棒矩形邊界的實現(xiàn)過程為:
(1)通過cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)函數(shù)將原始彩色圖像轉(zhuǎn)換為單通道灰度圖,其中img為原始輸入的彩色圖像;
(2)通過cv2.threshold(gray,thresh,maxval,type)對灰度圖進行二值化處理,將圖像區(qū)分為空白和非空白部分,其中g(shù)ray 為上一步驟輸出的灰度圖;
(3)從整個圖像的中間列開始向右搜索,可以找到漸變圖區(qū)域與顏色棒之間的白色部分,以此為界限將圖像分割成兩部分分別處理,然后從各部分的四個邊界向內(nèi)推進搜索,當找到一行或列的像素當中黑色像素占比超過設(shè)定閾值時,將該行或列作為矩形邊界;
(4)根據(jù)矩形的各個邊界位置,可以分別計算出矩形的4 個角點,得到原始漸變圖主區(qū)域?qū)?yīng)矩形以及顏色棒矩形。
需要注意的是,如果原始圖像中的矩形邊界寬度占據(jù)多個像素時,需要將檢測出來的矩形邊界向內(nèi)推移,以使得矩形準確框選目標區(qū)域。
圖2 矩形檢測過程
上一步驟識別出來的顏色棒區(qū)域反應(yīng)的是顏色到數(shù)值的映射關(guān)系,結(jié)合顏色棒的最大最小值,可以將顏色棒還原成數(shù)值到顏色的映射表,識別過程如下:從下向上遍歷顏色棒各像素點,將各個像素點的RGB 顏色值映射到具體數(shù)值,形成顏色到標量值的映射關(guān)系表。
通過OpenCV 載入漸變圖所在的矩形區(qū)域,可以讀取指定像素點的像素坐標及其顏色,假設(shè)某像素點的顏色為(r,g,b),距離顏色棒底部高度為hpixel像素,已知顏色棒對應(yīng)數(shù)值的最小值為Vmin,最大值為Vmax,顏色棒高度為Hpixel像素,根據(jù)差值可以計算得到該顏色(r,g,b)的對應(yīng)數(shù)值為:
最終建立的顏色映射表形式如表1。
表1
離散點識別的過程是遍歷漸變圖主區(qū)域中的各個像素點,根據(jù)像素點的像素坐標位置及顏色值,結(jié)合已經(jīng)建立的顏色映射表,將顏色值轉(zhuǎn)換為標量值的過程。
假設(shè)漸變圖矩形的像素寬度為Wpixel,高度為Hpixel,橫坐標范圍為(Xmin,Xmax),縱坐標范圍為(Ymin,Ymax),假設(shè)某像素點的像素坐標為(xpixel,ypixel) ,其顏色值為C(r,g,b),根據(jù)顏色值去遍歷已建立的顏色映射表的各個顏色區(qū)間,可以確認出它所處的映射表區(qū)間
將該點的像素坐標換算成真實物理坐標為:
而該點的顏色值對應(yīng)的標量值為:
其中,|C2-C1|,表示兩種顏色之間的“距離”,通過顏色三分量可以計算得到:
當將漸變圖主區(qū)域內(nèi)的各個像素點都識別出其對應(yīng)的坐標及標量值之后,整個漸變圖已經(jīng)被還原成一個個離散數(shù)據(jù),示例如下,每行存放一個離散點的坐標及對應(yīng)標量值:
離散數(shù)據(jù)并不是最初成圖或進行科學計算的常用數(shù)據(jù)格式,因此還要將識別后的各個散點值重新組織生成二維網(wǎng)格化數(shù)據(jù)文件。
以比較常用的Surfer 二維空間網(wǎng)格化數(shù)據(jù)格式(*.grd)為例。這種數(shù)據(jù)格式頭部包括文件頭(DSAA)、X及Y 方向點數(shù)、X 方向最小與最大值、Y 方向最小與最大值、標量的最小與最大值,然后是網(wǎng)格內(nèi)各點的標量值。因此,只需要遍歷各個離散點,根據(jù)散點的坐標,將散點的標量值放在二維矩陣的對應(yīng)位置上,即可生成二維網(wǎng)格化數(shù)據(jù)(*.grd)文件,其格式如下:
DSAA
列數(shù) 行數(shù)
x 最小值 x 最大值
y 最小值 y 最大值
v 最小值 v 最大值
第1 行標量值
第2 行標量值
…
第n 行標量值
當原始圖像中有等值線、數(shù)字標注或其他符號標注時,標注所在位置的像素點就很難通過映射表還原成最初的標量數(shù)據(jù),對于這種情況,可以暫時不去識別這些不能識別的像素點,而在網(wǎng)格化環(huán)節(jié)上通過數(shù)據(jù)插值的手段將這些空缺位置的值補上。
二維數(shù)據(jù)插值的方法在理論研究和工程計算中都有著廣泛的應(yīng)用,比較常見的有拉格朗日插值法、牛頓插值法、等距結(jié)點插值法、有理函數(shù)插值法、三角插值法以及樣條函數(shù)插值法等,它們的共同特點是利用與待計算點位置接近的多個已知數(shù)據(jù)點,構(gòu)建插值函數(shù)來計算出插值點的函數(shù)近似值。除此之外,還有克里金(Kriging)插值法,由1951 年南非采礦師D.G.Krige提出,它是對空間分布的數(shù)據(jù)求解線性最優(yōu)、無偏內(nèi)插估計的一種方法,相對前面的算法,金克里金插值不僅考慮到了待計算點與已知數(shù)據(jù)點之間的關(guān)系,還考慮到了變量的空間相關(guān)性,與反距離加權(quán)法相比具有明顯優(yōu)點[4]。其實,克里金插值法在數(shù)據(jù)補全和圖像修復(fù)方面已有了很多應(yīng)用,蔡占川、姚菲菲等人提出的基于克里金插值法的圖像修復(fù)方法在油畫修復(fù)方面獲得了很好的修復(fù)效果[5]。
因此,本次研究中以克里金插值來試驗數(shù)據(jù)插值對數(shù)據(jù)還原的效果。
以某二維網(wǎng)格數(shù)據(jù)為例,它的橫軸范圍為[0,12.75],縱軸范圍為[0,14.75],標量數(shù)據(jù)的范圍為[-62.86,347.33],將該數(shù)據(jù)生成漸變圖如圖3(a)所示,然后對生成的漸變圖圖像進行上述數(shù)據(jù)還原操作得到還原后的網(wǎng)格數(shù)據(jù)結(jié)果,還原結(jié)果成圖如圖3(b)所示,還原結(jié)果從整體上看與原始數(shù)據(jù)相差并不大,我們進一步將還原網(wǎng)格數(shù)據(jù)與原始網(wǎng)格數(shù)據(jù)做差值計算的結(jié)果成圖如圖3(c)所示,可以看出原始數(shù)據(jù)變化大的地方還原結(jié)果誤差更大,兩者相差最大值5.5,誤差約1.33%,還原數(shù)據(jù)非常接近原始數(shù)據(jù)。
圖3 漸變圖還原結(jié)果
我們將圖3(a)中的漸變圖加上等值線和數(shù)字標注得到圖4,然后對生成的漸變圖圖像進行數(shù)據(jù)還原操作,等值線以及數(shù)字標注等無法識別的地方我們不去識別,后續(xù)再通過克里金差值補充不能識別的地方,還原結(jié)果成圖如圖4(b)所示,可以看出即使存在干擾像素,還原結(jié)果從整體上看與原始數(shù)據(jù)也相差不大,我們進一步將還原網(wǎng)格數(shù)據(jù)與原始網(wǎng)格數(shù)據(jù)做差值計算的結(jié)果成圖如圖4(c)所示,可以看出兩者相差最大值9.3,誤差約2.26%,還原數(shù)據(jù)非常接近原始數(shù)據(jù)。
在二維網(wǎng)格數(shù)據(jù)生成漸變圖的基礎(chǔ)上,分析如何從漸變圖反推出原始網(wǎng)格數(shù)據(jù),并解決了圖像中存在等值線、數(shù)字、標注影響圖像還原的問題,結(jié)合OpenCV圖像處理庫編程能夠快速自動的實現(xiàn)從漸變圖還原出原始網(wǎng)格數(shù)據(jù),且最終的還原數(shù)據(jù)誤差很小,能解決數(shù)據(jù)缺少或者獲取數(shù)據(jù)成本和難度高的問題。
圖4 帶標注漸變圖還原結(jié)果