郭佳
(國(guó)家超級(jí)計(jì)算天津中心,天津300457)
在石油、勘探、氣象等行業(yè)中,常常要將采集數(shù)據(jù)或計(jì)算結(jié)果以二維圖像的方式直觀地展示在電子或紙質(zhì)材料中,漸變圖就是其中一種常見(jiàn)的成圖方式,而當(dāng)科研人員在原始數(shù)據(jù)缺失的情況下,如何從漸變圖中還原出原始數(shù)據(jù),以便于做進(jìn)一步的科研用途,這對(duì)于數(shù)據(jù)還原或降低數(shù)據(jù)重新獲取成本方面都具有重要意義。
本文采用圖像處理庫(kù)OpenCV[1]結(jié)合二維差值算法設(shè)計(jì)并實(shí)現(xiàn)出從漸變圖還原數(shù)據(jù)的基本流程,不僅能有效還原出原始數(shù)據(jù),對(duì)于因?yàn)闃?biāo)注等原因造成的缺失數(shù)據(jù)圖像也能有很好的還原效果。
將數(shù)據(jù)生成漸變圖的一般過(guò)程是:選擇一種數(shù)值到顏色的映射表,然后遍歷二維數(shù)據(jù)中的每個(gè)標(biāo)量值,計(jì)算該值對(duì)應(yīng)的映射顏色,于是二維數(shù)據(jù)轉(zhuǎn)化成了二維圖像,如圖1。
而從圖像還原數(shù)據(jù)的過(guò)程可以看成圖的逆過(guò)程,它的過(guò)程如下:
(1)矩形檢測(cè):識(shí)別圖像中的漸變圖主區(qū)域,以及顏色棒區(qū)域;
(2)建立映射表:根據(jù)顏色映射區(qū)域,建立顏色到數(shù)值的映射表;
(3)離散點(diǎn)識(shí)別:遍歷漸變圖,將各像素點(diǎn)顏色值識(shí)別成其標(biāo)量值;
(4)數(shù)據(jù)網(wǎng)格化:將識(shí)別出的散點(diǎn)值網(wǎng)格化為二維數(shù)據(jù)。

圖1 數(shù)據(jù)成圖的一般過(guò)程
矩形檢測(cè)的目的是識(shí)別出圖像中的顏色棒區(qū)域和漸變圖區(qū)域。矩形檢測(cè)和識(shí)別是機(jī)器視覺(jué)領(lǐng)域中的重要內(nèi)容,人們已經(jīng)研究出了很多矩形檢測(cè)算法,如C.Rosito Jung 和R. Schramm 提出的一種基于窗口化的Hough 變換的矩形檢測(cè)方法[2],張從鵬等人提出的基于Harris 角點(diǎn)的矩形檢測(cè)算法[3]。
在大部分矩形檢測(cè)算法中,首先要檢測(cè)出組成矩形的4 條直線,再計(jì)算這些直線的4 個(gè)交點(diǎn)作為矩形的角點(diǎn)位置,于是矩形檢測(cè)問(wèn)題就轉(zhuǎn)化為直線檢測(cè)問(wèn)題,在直線檢測(cè)中應(yīng)用最廣的當(dāng)屬霍夫直線變換算法,但是該算法會(huì)容易檢測(cè)出多余的直線,結(jié)果冗余信息較多,尤其是顏色棒區(qū)域的邊長(zhǎng)很短,非常容易受到干擾,所以本文通過(guò)像素搜索方法去尋找矩形4 個(gè)邊界的位置。
在OpenCV 中進(jìn)行尋找漸變圖矩形和顏色棒矩形邊界的實(shí)現(xiàn)過(guò)程為:
(1)通過(guò)cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)函數(shù)將原始彩色圖像轉(zhuǎn)換為單通道灰度圖,其中img為原始輸入的彩色圖像;
(2)通過(guò)cv2.threshold(gray,thresh,maxval,type)對(duì)灰度圖進(jìn)行二值化處理,將圖像區(qū)分為空白和非空白部分,其中g(shù)ray 為上一步驟輸出的灰度圖;
(3)從整個(gè)圖像的中間列開(kāi)始向右搜索,可以找到漸變圖區(qū)域與顏色棒之間的白色部分,以此為界限將圖像分割成兩部分分別處理,然后從各部分的四個(gè)邊界向內(nèi)推進(jìn)搜索,當(dāng)找到一行或列的像素當(dāng)中黑色像素占比超過(guò)設(shè)定閾值時(shí),將該行或列作為矩形邊界;
(4)根據(jù)矩形的各個(gè)邊界位置,可以分別計(jì)算出矩形的4 個(gè)角點(diǎn),得到原始漸變圖主區(qū)域?qū)?yīng)矩形以及顏色棒矩形。
需要注意的是,如果原始圖像中的矩形邊界寬度占據(jù)多個(gè)像素時(shí),需要將檢測(cè)出來(lái)的矩形邊界向內(nèi)推移,以使得矩形準(zhǔn)確框選目標(biāo)區(qū)域。

圖2 矩形檢測(cè)過(guò)程
上一步驟識(shí)別出來(lái)的顏色棒區(qū)域反應(yīng)的是顏色到數(shù)值的映射關(guān)系,結(jié)合顏色棒的最大最小值,可以將顏色棒還原成數(shù)值到顏色的映射表,識(shí)別過(guò)程如下:從下向上遍歷顏色棒各像素點(diǎn),將各個(gè)像素點(diǎn)的RGB 顏色值映射到具體數(shù)值,形成顏色到標(biāo)量值的映射關(guān)系表。
通過(guò)OpenCV 載入漸變圖所在的矩形區(qū)域,可以讀取指定像素點(diǎn)的像素坐標(biāo)及其顏色,假設(shè)某像素點(diǎn)的顏色為(r,g,b),距離顏色棒底部高度為hpixel像素,已知顏色棒對(duì)應(yīng)數(shù)值的最小值為Vmin,最大值為Vmax,顏色棒高度為Hpixel像素,根據(jù)差值可以計(jì)算得到該顏色(r,g,b)的對(duì)應(yīng)數(shù)值為:

最終建立的顏色映射表形式如表1。

表1
離散點(diǎn)識(shí)別的過(guò)程是遍歷漸變圖主區(qū)域中的各個(gè)像素點(diǎn),根據(jù)像素點(diǎn)的像素坐標(biāo)位置及顏色值,結(jié)合已經(jīng)建立的顏色映射表,將顏色值轉(zhuǎn)換為標(biāo)量值的過(guò)程。
假設(shè)漸變圖矩形的像素寬度為Wpixel,高度為Hpixel,橫坐標(biāo)范圍為(Xmin,Xmax),縱坐標(biāo)范圍為(Ymin,Ymax),假設(shè)某像素點(diǎn)的像素坐標(biāo)為(xpixel,ypixel) ,其顏色值為C(r,g,b),根據(jù)顏色值去遍歷已建立的顏色映射表的各個(gè)顏色區(qū)間,可以確認(rèn)出它所處的映射表區(qū)間
將該點(diǎn)的像素坐標(biāo)換算成真實(shí)物理坐標(biāo)為:

而該點(diǎn)的顏色值對(duì)應(yīng)的標(biāo)量值為:

其中,|C2-C1|,表示兩種顏色之間的“距離”,通過(guò)顏色三分量可以計(jì)算得到:

當(dāng)將漸變圖主區(qū)域內(nèi)的各個(gè)像素點(diǎn)都識(shí)別出其對(duì)應(yīng)的坐標(biāo)及標(biāo)量值之后,整個(gè)漸變圖已經(jīng)被還原成一個(gè)個(gè)離散數(shù)據(jù),示例如下,每行存放一個(gè)離散點(diǎn)的坐標(biāo)及對(duì)應(yīng)標(biāo)量值:

離散數(shù)據(jù)并不是最初成圖或進(jìn)行科學(xué)計(jì)算的常用數(shù)據(jù)格式,因此還要將識(shí)別后的各個(gè)散點(diǎn)值重新組織生成二維網(wǎng)格化數(shù)據(jù)文件。
以比較常用的Surfer 二維空間網(wǎng)格化數(shù)據(jù)格式(*.grd)為例。這種數(shù)據(jù)格式頭部包括文件頭(DSAA)、X及Y 方向點(diǎn)數(shù)、X 方向最小與最大值、Y 方向最小與最大值、標(biāo)量的最小與最大值,然后是網(wǎng)格內(nèi)各點(diǎn)的標(biāo)量值。因此,只需要遍歷各個(gè)離散點(diǎn),根據(jù)散點(diǎn)的坐標(biāo),將散點(diǎn)的標(biāo)量值放在二維矩陣的對(duì)應(yīng)位置上,即可生成二維網(wǎng)格化數(shù)據(jù)(*.grd)文件,其格式如下:
DSAA
列數(shù) 行數(shù)
x 最小值 x 最大值
y 最小值 y 最大值
v 最小值 v 最大值
第1 行標(biāo)量值
第2 行標(biāo)量值
…
第n 行標(biāo)量值
當(dāng)原始圖像中有等值線、數(shù)字標(biāo)注或其他符號(hào)標(biāo)注時(shí),標(biāo)注所在位置的像素點(diǎn)就很難通過(guò)映射表還原成最初的標(biāo)量數(shù)據(jù),對(duì)于這種情況,可以暫時(shí)不去識(shí)別這些不能識(shí)別的像素點(diǎn),而在網(wǎng)格化環(huán)節(jié)上通過(guò)數(shù)據(jù)插值的手段將這些空缺位置的值補(bǔ)上。
二維數(shù)據(jù)插值的方法在理論研究和工程計(jì)算中都有著廣泛的應(yīng)用,比較常見(jiàn)的有拉格朗日插值法、牛頓插值法、等距結(jié)點(diǎn)插值法、有理函數(shù)插值法、三角插值法以及樣條函數(shù)插值法等,它們的共同特點(diǎn)是利用與待計(jì)算點(diǎn)位置接近的多個(gè)已知數(shù)據(jù)點(diǎn),構(gòu)建插值函數(shù)來(lái)計(jì)算出插值點(diǎn)的函數(shù)近似值。除此之外,還有克里金(Kriging)插值法,由1951 年南非采礦師D.G.Krige提出,它是對(duì)空間分布的數(shù)據(jù)求解線性最優(yōu)、無(wú)偏內(nèi)插估計(jì)的一種方法,相對(duì)前面的算法,金克里金插值不僅考慮到了待計(jì)算點(diǎn)與已知數(shù)據(jù)點(diǎn)之間的關(guān)系,還考慮到了變量的空間相關(guān)性,與反距離加權(quán)法相比具有明顯優(yōu)點(diǎn)[4]。其實(shí),克里金插值法在數(shù)據(jù)補(bǔ)全和圖像修復(fù)方面已有了很多應(yīng)用,蔡占川、姚菲菲等人提出的基于克里金插值法的圖像修復(fù)方法在油畫(huà)修復(fù)方面獲得了很好的修復(fù)效果[5]。
因此,本次研究中以克里金插值來(lái)試驗(yàn)數(shù)據(jù)插值對(duì)數(shù)據(jù)還原的效果。
以某二維網(wǎng)格數(shù)據(jù)為例,它的橫軸范圍為[0,12.75],縱軸范圍為[0,14.75],標(biāo)量數(shù)據(jù)的范圍為[-62.86,347.33],將該數(shù)據(jù)生成漸變圖如圖3(a)所示,然后對(duì)生成的漸變圖圖像進(jìn)行上述數(shù)據(jù)還原操作得到還原后的網(wǎng)格數(shù)據(jù)結(jié)果,還原結(jié)果成圖如圖3(b)所示,還原結(jié)果從整體上看與原始數(shù)據(jù)相差并不大,我們進(jìn)一步將還原網(wǎng)格數(shù)據(jù)與原始網(wǎng)格數(shù)據(jù)做差值計(jì)算的結(jié)果成圖如圖3(c)所示,可以看出原始數(shù)據(jù)變化大的地方還原結(jié)果誤差更大,兩者相差最大值5.5,誤差約1.33%,還原數(shù)據(jù)非常接近原始數(shù)據(jù)。

圖3 漸變圖還原結(jié)果
我們將圖3(a)中的漸變圖加上等值線和數(shù)字標(biāo)注得到圖4,然后對(duì)生成的漸變圖圖像進(jìn)行數(shù)據(jù)還原操作,等值線以及數(shù)字標(biāo)注等無(wú)法識(shí)別的地方我們不去識(shí)別,后續(xù)再通過(guò)克里金差值補(bǔ)充不能識(shí)別的地方,還原結(jié)果成圖如圖4(b)所示,可以看出即使存在干擾像素,還原結(jié)果從整體上看與原始數(shù)據(jù)也相差不大,我們進(jìn)一步將還原網(wǎng)格數(shù)據(jù)與原始網(wǎng)格數(shù)據(jù)做差值計(jì)算的結(jié)果成圖如圖4(c)所示,可以看出兩者相差最大值9.3,誤差約2.26%,還原數(shù)據(jù)非常接近原始數(shù)據(jù)。
在二維網(wǎng)格數(shù)據(jù)生成漸變圖的基礎(chǔ)上,分析如何從漸變圖反推出原始網(wǎng)格數(shù)據(jù),并解決了圖像中存在等值線、數(shù)字、標(biāo)注影響圖像還原的問(wèn)題,結(jié)合OpenCV圖像處理庫(kù)編程能夠快速自動(dòng)的實(shí)現(xiàn)從漸變圖還原出原始網(wǎng)格數(shù)據(jù),且最終的還原數(shù)據(jù)誤差很小,能解決數(shù)據(jù)缺少或者獲取數(shù)據(jù)成本和難度高的問(wèn)題。

圖4 帶標(biāo)注漸變圖還原結(jié)果