任喜偉 何立風 宋安玲 姚 斌 趙 曉
1(陜西科技大學電子信息與人工智能學院 陜西 西安 710021) 2(西安交通大學城市學院 陜西 西安 710018)
在石油工業,開采出來的原油是油、水、乳狀液、泥沙等雜質的混合溶液。為了得到相對純凈的石油,需要將原油送至油田聯合站,存放在原油儲罐內,先后經過沉降、破乳、分離等多道工序后,才能分離出達到冶煉標準的石油,這一系列工藝在石油化工過程中非常重要[1-2]。
沉降罐內等待油水分離的原油,其乳狀液液滴大小、分布等特性會隨著沉降時間、破乳反應等因素的變化,而隨時發生變化,這些改變將直接影響破乳方法的改變和油水分離的效果[3-5]。在實際生產和研究過程中,很多學者認為研究原油乳狀液粒徑是個十分復雜而又需要深入的課題,對于掌握乳狀液穩定性、乳狀液粘度等都有重要影響[6-9]。因此,研究原油乳狀液粒徑特性具有十分重要的意義,除了對開發多相流處理和管輸設備非常重要之外,還為指導原油破乳方法和油水分離提供重要的依據[10-11]。
張文玲等[12]采用MA2000穩定分析儀,在已知平均遷移速率、油水兩相密度差、連續相粘度,以及已知與體系平均粒徑建立關系的前提下,通過STOCKES-EINSTEIN定律,計算乳狀液液滴的平均粒徑大小。此方法為基于液滴遷移速度的間接測量液滴粒徑方法。
在獲取原油乳狀液顯微圖片的前提下,既可以通過人工測量的方法,也可以通過圖像分析的方法測量液滴粒徑。人工測量精度不高且操作復雜,效率較低;而圖像分析的方法則較好。李曉平等[13-14]通過設計、開發液滴粒徑測量軟件,分別經過預處理、二值化、邊緣檢測、直徑測量等多個圖像處理環節,最終獲得原油乳狀液液滴粒徑及其分布。在算法設計中,采用中值濾波預處理算法、全局閾值二值化算法、Laplacian算子邊緣檢測算法等常規圖像處理方法為粒徑測量做準備。粒徑檢測時,通過檢測乳狀液液滴二值圖像像素排列,從左至右、從上到下掃描圖像,獲得不同像素矩陣樣式,判斷是否為液滴形狀[15]。此外,李曉平等還借用MATLAB圖像處理軟件中bwlabel、regionprops等函數統計和計算液滴粒徑。獲得原油乳狀液每個液滴所含像素個數后,即可統計每個液滴的面積,再結合圖像分辨率及顯微鏡放大倍數等參數,計算每個液滴的粒徑。此方法為基于圖像處理的直接測量液滴粒徑方法。
上述兩種方法都可以達到測量原油乳狀液液滴粒徑的目的,并且獲得不錯的實驗效果。但是基于液滴平均遷移速率的間接測量液滴粒徑方法只能計算平均粒徑,而不能計算單個液滴粒徑,且應用存在一定的局限性,不能分析所有液滴的分布情況;基于圖像處理的直接測量液滴粒徑方法既可以測量單個液滴粒徑,也可以計算平均粒徑,功能上要優于基于液滴平均遷移速率的液滴粒徑間接測量方法。但是,受原油乳狀液液滴顯微圖像形狀不規則影響,李曉平等提出的測量方法還不能有效識別,程序運行速度相對較慢,且系統開發環境陳舊,兼容性不足。
本文在分析上述兩種方法的前提下,結合原油儲罐油水分離實際需求,提出一種基于連通域標記的原油乳狀液粒徑檢測算法,該算法在識別準確率和內存占用率等方面要優于現有測量方法,為進一步研究原油儲罐內部介質特性和分布提供幫助。
為了更清楚地解釋基于連通域標記的原油乳狀液粒徑檢測算法,首先需要了解什么是圖像連通域和連通域標記。Gonzalez等[16]在《數字圖像處理》一書中指出:對于一個N×M像素大小的二值圖像,用b(x,y)表示位于坐標(x,y)處的一個像素值,其中0≤x≤N-1,0≤y≤M-1。二值圖像中每個像素的值都為1或0,以區分前景像素和背景像素。沒有特別說明,一般假設前景像素的值為1,背景像素的值為0,前景像素也被稱為目標像素。此外,為了分析方便起見,一般假設圖像邊界上的所有像素都是背景像素。如圖1所示,灰色方框表示的像素為前景像素,白色方框表示的像素為背景像素[17]。

圖1 8鄰域目標像素及連通域
對于一個像素b(x,y),其周圍的像素b(x-1,y)、b(x,y-1)、b(x+ 1,y)和b(x,y+ 1)被稱為4鄰域像素。4鄰域像素加上b(x-1,y-1)、b(x-1,y-1)、b(x+1,y-1)和b(x-1,y+1)被稱為8鄰域像素。假如有一條路徑,它包含目標像素a1,a2,…,an,其中:a1為像素p,an為像素q,并且所有的ai和ai+1都彼此為8鄰域像素,那么稱目標像素p和q互為8連通像素(參照圖1(a))。二值圖像中的一個8連通域是圖像中所有8連通像素的集合。一個連通域也稱之為一個物體。比如,如圖1 所示的二值圖像中,有4個8連通域(物體)。
在二值圖像中為了區分不同物體,連通域標記是一項必不可少的操作。連通域標記是將二值圖像中各個連通域的像素用唯一的標記值進行標記,以區別圖像中其他的連通域。通過連通域標記處理,一個二值圖像將被轉化成為標記圖像[18]。例如,圖1(b)是圖1(a)的標記圖像。因此,連通域標記之后,可以通過標記值提取已標記圖像中的每一個物體,然后進一步計算物體的形狀特征[19]。對于乳狀液圖像而言,可以統計液滴個數、計算液滴面積和液滴粒徑等。
本文算法是基于連通域標記的算法,通過對原油乳狀液二值圖像進行連通域標記,來識別原油乳狀液中液滴,統計液滴個數、液滴面積、液滴粒徑、平均粒徑和液滴分布情況。算法功能流程如圖2所示。

圖2 算法功能流程
本文算法基本思想描述如下:
① 對所得原油乳狀液顯微圖片進行濾波處理,去除噪聲[20-21]。由于本文所用圖像的噪聲主要是由線路傳送產生的,選擇中值濾波處理乳狀液圖像。
② 對濾波后的圖像進行二值化處理[22-23]。針對乳狀液圖像中主要包含油相和水相兩種介質狀態,本文選擇全局閾值Otsu算法對乳狀液圖像進行二值化。
③ 獲取乳狀液二值圖像,用“0”代表背景像素,用“1”代表前景像素(目標像素),用數組存放“0”、“1”表示像素類別的乳狀液二值圖像。并為圖像四周增加一圈背景像素,標記所有像素為背景像素。
④ 逐行掃描乳狀液二值圖像,并檢測當前像素b(x,y)周圍左方b(x-1,y)、左上方b(x-1,y-1)、上方b(x,y-1)、右上方b(x+1,y-1)四個像素的值,把這5個像素所在的區域稱之為工作面[17],如圖3所示。若當前像素為前景像素,則標記當前像素一個大于0的值作為該像素的標記值,該標記值不能與已標記的其他連通域標記值重復;若當前像素為背景像素,則不用標記,在標記數組中用“0”代替。

圖3 連通域標記工作面
⑤ 若當前像素為前景像素,在標記時,如果存在該像素上方像素為“0”,左方像素和右上方像素為“1”(如圖4(a)所示),或左上方像素和右上方像素為“1”(如圖4(b)所示)時,則取當前像素左方、右上方,或左上方、右上方較小的標記值標記當前像素,并重新遍歷已經掃描的像素,將所有已掃描像素中標記值等于較大標記值的像素標記值全部替換為較小標記值,此過程為乳狀液連通域標記與連通域等價標記替換過程。

圖4 存在等價標記的工作面
⑥ 若不屬于④、⑤之情形的,即當前像素左方、左上方、上方、右上方四個像素中至少有一個像素為“1”時,那么取其四個像素中標記值最小的數作為當前像素的標記值。
⑦ 按文獻[19]中提出的物體形狀特征計算算法獲得標記圖像中的各個液滴Y[i](i=1,2,…,L)的面積和周長。由于液滴基本為圓形,可以通過式(1)計算液滴Y[i]的粒徑。
(1)
式中:D[i]為液滴Y[i]的粒徑;A[i]為液滴Y[i]的面積;P[i]為液滴Y[i]的周長。
⑧ 根據原油乳狀液圖像的解像度(分辨率)和顯微鏡的放大倍數,液滴Y[i]的實際粒徑可由式(2)計算,單位為μm。
(2)
式中:d[i]為液滴Y[i]的實際粒徑;H為圖像高度;W為圖像寬度;DPIH為圖像垂直分辨率;DPIW為圖像水平分辨率;m1為顯微鏡物鏡放大倍數;m2為顯微鏡目鏡放大倍數。
⑨ 原油乳狀液中液滴的平均粒徑可由式(3)計算。
(3)
式中:d為平均液滴粒徑;d[i]為第i個液滴實際粒徑;L為液滴總數。
⑩ 按照粒徑d[i]大小排序,可以統計液滴粒徑大小分布,以柱狀圖或曲線圖的形式表示。
上述算法標記過程中,用EquivalentLaber(x,y,p)函數表示等價標記替換函數,其中:x和y為等價標記變量,p為當前像素出現在第幾行的位置變量。該函數核心部分偽代碼如下:
//EquivalentLaber(x,y,p)等價標記替換函數
fori← 1 toi<=pdo
forj← 1 toj<= bmp.Heigh do
if LabelArr[i,j] =x//查找所有已標記像素中是否有等
//價標記x,如果有則替換為y,y LabelArr[i,j] ←y //LabelArr為存放像素標記值的數組 end of if end of for end of for 上述算法計算液滴粒徑過程,通過統計LabelArr數組中有多少個不重復的數字便可知圖像中有多少個連通域,即液滴個數;統計每個不重復數字出現的次數便可知每個連通域面積,即每個液滴的面積;根據式(2)便可計算每個液滴的粒徑;進一步,統計每個液滴的粒徑,加上已知的液滴個數,由式(3)便可計算出平均粒徑;最后,可統計不同液滴粒徑范圍內液滴的個數,分析液滴分布情況。 本文實驗硬件環境在ThinkPad R400電腦(Intel(R) Core(TM)2 Duo CPU P7570,2.26 GHz,RAM 2 GB)上進行,軟件環境在Visual Studio.Net中完成程序設計,所用程序設計語言為C#。在此基礎上設計基于連通域標記的原油乳狀液粒徑檢測算法,并開發了原油乳狀液粒徑檢測系統,在系統上進行了驗證性實驗。本文以文獻[13]中所提供的乳狀液顯微圖像為例進行算法驗證和對比分析。圖像如圖5(a)所示,是一幅原油乳狀液顯微圖像,分辨率為611像素×348像素。 (b) 濾波處理后乳狀液圖像 (c) 二值化處理后乳狀液圖像圖5 原油乳狀液顯微圖像標記前處理 圖5(a) 所示圖像噪聲可能是因傳輸線路受到突如其來的強烈干擾而產生的椒鹽噪聲,因此,實驗首先對該圖像進行中值濾波,得到圖5(b);其次采用自適應閾值Otsu二值化方法,得到圖5(c);最后運行基于連通域標記的乳狀液粒徑檢測算法,標記圖像中連通域(液滴)。標記完畢后,經過統計LabelArr數組中不同數值個數和同一數值的數據個數,通過式(1)-式(3)計算,獲得該乳狀液圖像中共有117個液滴,平均粒徑為2.2 μm。 原油乳狀液液滴粒徑分布如圖6所示。可以看出,液滴主要分布在粒徑為1~4 μm范圍內。手工識別出來的液滴最小粒徑不足1.2 μm,而通過本文算法識別出來的液滴粒徑可以達到0.32 μm,甚至更小的液滴都能檢測得到,檢測精度提高。然而,本文算法的準確率未能達到100%,由圖5(c)二值圖像可知,圖像中存在不規則液滴形狀,這個液滴正好是圖6中117號液滴,肉眼觀測可能包含4個液滴。因此,對于這幅乳狀液圖像而言,本文算法的準確率為96.58%。上述現象可能是由于乳狀液中存在不規則雜質、液滴粘連和水包油包水等產生的。不過,對于測量乳狀液液滴平均粒徑而言,此問題不受影響,這種現象只是在統計液滴個數和計算單個液滴粒徑時會產生誤差。 圖6 液滴粒徑分布統計 本文還分別對其他環境下10組原油乳狀液顯微圖像進行算法運行測試,運行結果同上。在乳狀液圖像中液滴不存在粘連且規則的情況下,本文算法準確率保持在100%;反之,會存在一定誤差。目前本文算法還未對這些現象做相應處理,我們將會在接下來的研究中進一步深入分析乳狀液顯微圖像,解決這些問題,提高準確率。 由上述實例分析可知,基于連通域標記的原油乳狀液粒徑檢測算法可以有效應用于原油乳狀液顯微圖像粒徑分析中,且獲得不錯的應用效果。下面將基于連通域標記的乳狀液粒徑檢測算法與第1節提到的兩種算法進行對比,分析本文算法的優點。 因為基于液滴遷移速度的液滴粒徑間接測量方法只計算平均粒徑,且通過公式即可得出結果,不需要編寫程序計算,不存在算法復雜度分析;其準確率高低與液滴遷移速度有很大的關系,遷移速度計算準確率高,則平均粒徑計算準確率高,反之準確率低。因此,本文主要討論與文獻[13-15]提供的直接測量算法進行對比分析。 (1) 算法準確率分析。文獻[13-15]雖未給出算法具體實現過程和偽代碼,但根據所給方法簡單思路編寫程序,經過對比發現,該算法的準確率不高。因為受乳狀液液滴形狀或拍攝過程偏差影響,液滴并非完全都是標準圓形形狀,除了其所屬一種情況外,還可能出現其他情況,如一個液滴最左、最右、最上、最下處可能出現2個或2個以上多個像素,且排列組合后形成多種情況。因此,僅通過上述一種情況判斷是否為液滴,準確率不高。而本文提出基于連通域標記的原油乳狀液粒徑檢測算法從另外一個角度識別液滴,算法準確性顯著提高,不僅可以計算平均粒徑,還可以計算每個液滴粒徑、統計液滴分布等。 (2) 算法復雜度分析。對于一個N×N的乳狀液二值圖像,本文算法在最壞情況下的時間復雜度為O(n2)。因為需要創建2個N×N/4大小的數組分別用來記錄每個連通域標記值和每個連通域像素個數,所以內存需要分配N2/2大小的數組空間。文獻[13,15]算法在最壞情況下的時間復雜度為O(n2),同本文算法一樣;因為需要記錄每個液滴4個方位的位置,并且需要統計液滴個數和每個液滴所含像素個數,因此,內存需要分配4×N2/2大小的數組空間,比本文算法多占用3倍內存空間。基于液滴遷移速度的液滴粒徑間接測量方法不需要編寫程序,不需要分析算法復雜度。 分析原油乳狀液特性,計算乳狀液液滴粒徑、液滴面積、液滴個數、液滴分布等,對原油乳狀液破乳過程有重要的指導意義,進一步,對精確測量原油儲罐油水界面,順利完成油水分離過程提供保障。因此,本文在深入探討現有乳狀液粒徑檢測方法的前提下,提出基于連通域標記的原油乳狀液粒徑檢測算法。該算法需要在乳狀液顯微圖像濾波、二值化處理之后,進行連通域標記,并進行等價標記替換,最后經過統計、計算,才能獲得液滴個數,計算液滴粒徑和分布等信息。通過算法應用與對比分析可知:基于連通域標記的乳狀液粒徑檢測算法可提供相對準確的計算結果,并且占用較小的內存空間。3 實驗及分析
3.1 實驗環境與過程



3.2 實驗對比與分析
4 結 語