近年來,為了降低成本,提高圖像處理的效果,國內外無論是工業界、學術界還是政府相關部門都日益關注相關理論與應用問題的研究.當前主要側重于對基于FPGA\\(Field Programmable Gate Array即:現場可編程門陣列\\)的圖像處理算法研究.由于FPGA內部嵌入的硬件乘法器模塊數量有限,仍然不能夠滿足圖像處理系統的需求.人們為了提高圖像處理效率,不得不提高CPU的頻率,這樣就致使造價昂貴,而且很多性能瓶頸無法得到突破.
本文通過實驗在多處理機系統中以基于CCD圖像傳感的圖像測量系統為測量主體,研究了曲面輪廓測量中提高圖像測量精度和速度的圖像處理技術的并行化問題.分析了多處理機系統在數字圖像處理中的并行化情況,提出了在圖像預處理過程中的并行化實現方法,進而使多個處理機之間能夠更加協調工作,充分利用CPU,提高了多處理機系統的性能,提高了圖像處理的效率和效果.
1 提高圖像預處理效果的有效途徑
如圖1所示,被測對象經過傳感器變換以及由視頻采集卡送到計算機的過程中常常受到各噪聲源的影響和干擾,使圖像的質量變差,不僅影響圖像視覺效果,而且還會影響目標信息的獲取及進一步處理.因此,在進行邊緣檢測、圖像分割、特征提取、模式識別等處理之前,采用適當的方法以減少圖像噪聲是至關重要的圖像預處理步驟.由于噪聲的存在,使得原本均勻和連續變化的圖像灰度分布突然變大或變小,以至于出現一些虛假的物體的邊緣或輪廓.【圖1】
在圖像的處理過程中,通過平滑、銳化和噪聲消減這三種圖像預處理的操作可以有效提高圖像處理的效果.平滑、銳化和噪聲消減是閾值化處理、對比度擴展的下一級的預處理操作.由于這些操作均需要鄰近像素值,因此它們均是局部操作.在已有的圖像內可能含有不良影響的隨機“噪聲”.
我們可用減少高頻成分的方法來實現圖像平滑即將圖像區域內抑止亮度的巨大波動.至于如何突出變化和增強細節方面,其實現方法有兩種:一是減少低頻成分,二是通過微分突出變化.噪聲消減將抑制圖像中噪聲信號,噪聲信號本身可能具有各種形式,可能是與圖像信號完全無關的一個隨機信號.平滑雖然可以減少噪聲,但它也將使圖像變得模糊,為了解決這個問題,我們可以采用多次捕獲圖像并取每一像素值的平均值的方法來減少純隨機噪聲信號.至此我們己經闡述了提高圖像處理效果的有關方法,下面將繼續討論圖像處理效率問題.
2 平均值法噪聲消減的原理
圖像可能受到各種噪聲源的干擾,如信道傳輸誤差所引起的噪聲等,這些噪聲在數字圖像上表示為隨機的孤立噪聲點,可以認為與像素灰度是空間不相關的,即噪聲點像素與其鄰近像素具有顯著不同,采用平均值法可以有效地去除此噪聲.
取一組像素的平均值\\(mean或average\\)作為中心像素的新值\\(一般推薦使用mean,表示兩極值中間值\\).它需要對欲更新像素的周圍像素組進行訪問,并完成局部操作.通常一個組的大小為3×3,如圖2所示.對于一個給定的3×3組,其數學模型為:【1】
其中x′4是x4的新值.【圖2】
2.1 平均值法噪聲消減順序實現的效率分析
在單處理機系統中,若要按圖2所示的3×3組的像素值進行平均值操作的話,那么所有像素都必須進行該操作,并且操作時都要使用像素的原始值.對每一像素計算平均值需要9步,若有n個像素進行平均值操作則進行需要9n步操作.
2.2 平均值法噪聲消減并行化實現的效率分析
首先假定為每一個像素分配一個處理機\\(不大可能是給定像素數,除了某些非常專用的圖像處理硬件之外\\).一種直接的并行實現將需要每個處理機完成9步操作,而所有處理機同時進行操作.
由于對像素數據的訪問僅是讀訪問,對共享存儲器實現而言,不會出現沖突.并行方法能利用每個處理機為它相鄰的處理機和自身進行部分和的計算.
假定像素值是X0,X1,X2,X3,X4,X5,X6,X7和X8,如圖2所示,通過將計算分成四個數據傳送步可減少計算步數,如圖3所示?!緢D3】
每個處理器以鎖步方式完成以下四步:
第1步每個處理器接收來自左邊的像素值,并將這些值加到自身的像素值上生成累加和.中心處理器\\(x4\\)將生成x3+x4的累加和.
第2步每個處理器接收來自右邊的像素值,并將些值加到自身的累加值上.中心處理機將生成x3+x4+x5累加和.
第3步每個處理器接收來自上邊的在第2步中生成的累加值,并將其加到自身的累加和中,為了進行下一步的計算,每個處理必須保留原來的累加值.中心處理器生成累加和x0+x2+x3+x4+x5,與此同時,它必須將x3+x4+x5分開保存.
第4步每個處理器接收來自下方的在第2步中生成的累加值,將其加到自身的累加值上.此時中心處理器將生成x0+x2+x3+x4+x5+x6+x7+x8的累加和.
圖4中示出了執行以上每一步后生成的結果.最后每個進程自身的累加和除以9來獲得它們的平均值.對于n個像素來說,總共需4步通信與1步累加和的除法.顯然,此算法也可使每個處理機處理一組像素.【圖4】
綜上所述,對于有n個像素的圖像,用平均值法噪聲消減順序處理共需要9n步;而用平均值法噪聲消減的并行處理,每個處理機處理共需要4步通信與1步累加和的除法而所有處理機同時進行操作.這樣大大提高了圖像處理的效率。
3 中值法濾除噪聲的原理
經過CCD圖像采集系統獲得的數字圖像,經過閾值化處理、對比度擴展等一些處理后雖然可以去除各種干擾,提高圖像的質量,但是,這樣的數字圖像還不足以滿足高精度幾何測量的要求,為了進一步改善數字圖像的質量,還需要對圖像作進一步的處理.
數字圖像在成像和傳輸過程中往往會夾雜一些噪聲,如椒鹽噪聲和高斯噪聲等,這些噪聲可能會對圖像處理結果產生消極影響,所以在圖像處理前要對該圖像進行平滑.由于平均值方法會使邊緣和其他銳化細節變得模糊,為減少噪聲,可采用鄰近像素的中值\\(Median\\)來替代原來的像素值,當圖像屬于強“尖峰”圖像時,這種方法在保持邊緣的銳化性方面就顯得更為有效.將像素值從最小到最大按序排列,并選取位于中間的像素值\\(假定像素數為奇數\\)就可得到中值.
3.1 中值法濾除噪聲順序實現的效率分析
假定像素值按遞升序排列為y0,y2,y3,y4,y5,y6,y7和y8,則中值便為y4.這種操作要求組中所有值必須先排序,然后用第5個元素替代像素的原來值.采用如冒泡法那樣的順序排序算法將依次找到較小值,因而事實上排序在獲得第5個最低值后便可終止.在這種情況下,找到每一個中值所需的步數為8+7+6+5+4=30,而對n個像素便需30n步.
3.2 中值法濾除噪聲并行化實現的效率分析
為方便并行操作和提高速度,我們采用近似的排序算法,它只需使所有行和列排序一次,且各行均以相同方向排序.在每一階段使用有效的冒泡排序且只需三步.
首先,對每一行進行比較和交換操作,它需要三步.對于第i行,我們有:【2】
其中 代表“比較和交換,如果左邊灰度值大于右邊灰度值”\\(通常的冒泡排序動作是將最大值冒泡到右邊\\).
然后,用三次比較和交換操作對各列進行排序.對于第j列,我們有:【3】
圖5中顯示出了全過程.pi,j的值將取第5個最大像素值,該算法并不總是選取第5個最大值.例如,如果第5個最大值為X2\\(圖5b\\),且它也是所在行中的最大值,則它將被保留在原來位置而不被此算法選中.【圖5】
盡管如此,此算法是一個合理的漸近算法,如果每個像素被分配一個處理機,則整個圖像僅需6步就可以完成取中值.同樣,該算法可擴展為每個處理機處理一組像素.綜上所述:假設一幅圖像有n個像素,在中值法濾除噪聲的順序實現中,總共需要進行30n步操作;而在中值法濾除噪聲的并行化實現中,每個處理機總共只需要進行6步操作,而所有處理機同時進行操作,這樣大大提高了圖像處理的效率.
4 邊緣檢測過程的并進化實現
為了進行計算機識別,以從圖像的其他對象中區別出所需識別的對象,常常需要增亮對象邊緣即邊緣檢測,其中邊緣是指在灰度值強度上有顯著變化,為了體現這種變化在現實中的應用,我們引入了梯度和幅度這兩個概念.
4.1 梯度和幅度
我們首先考慮一維灰度值函數f\\(x\\)\\(例如沿行方向\\).如果對此函數f\\(x\\)進行微分,則一階求導\ue785f/\ue785x就表明了梯度變化,而在變化時將出現一個正向和負向尖峰.而函數的變化方向\\(增加或減少方向\\)可由如圖6所示的一階導數的極性來加以標識.圖6中還示出了二階導數\ue7852f/\ue785x2,它在處將空越零點,這可能有助于識別轉換的位置.【圖6】
一個圖像是一個二離散化的灰度值函數f\\(x,y\\).它的灰度值改變有一個梯度幅值\\(或簡稱梯度\\)和一個用角度表示的梯度方向,這里是相對于y軸的 角 度,如 圖7所 示.【圖7】
對 給 定 的 二 維 函 數f\\(x,y\\),f\\(x,y\\)的梯度\\(幅值\\)\ue065f由下式給定:【4】
以減少所需計算量.在圖像處理過程中Prewitt算子和Sobel算子是計算數字梯度時最常用的算子.
4.2 邊緣檢測掩碼
對于離散函數,導數可近似地用差分來代替,使用帶權掩碼可用若干種方法數字地實現求導.\ue785f/\ue785x項是指x方向差分,而\ue785f/\ue785y為y方向差分.因此我們就可取行中相鄰像素灰度值之差和列中相鄰像素之差.假定有一個如圖2中所示的3×3像素值的集.我們可考慮用x5和x3的值來計算近似梯度\\(以得到\ue785f/\ue785x\\)以及用x7和x1以得到\ue785f/\ue785y,即:【5】
需要使用兩個掩碼,一個用來得到x7-x1,而另一個用來獲得x5-x3.每一個掩碼結果的絕對值將加在一起.可使用負的權值來實現減法.\\(為進行求導,沒給出任何比例因子,但若要獲取合適對比度,就需要選擇比例因子.\\)
4.2.1 Prewitt算子
Prewitt算子是一種一階微分算子的邊緣檢測,利用像素點上下、左右鄰點的灰度差,在邊緣處達到極值檢測邊緣,去掉部分偽邊緣,對噪聲具有平滑作用.
其原理是在圖像空間利用兩個方向模板與圖像進行鄰域卷積來完成的,這兩個方向模板一個檢測水平邊緣,一個檢測垂直邊緣.在Prewitt算子中,若使用更多的像素值就可獲得更好的結果.例如,近似梯度可由下式得到:【6】
它需要使用兩個稱為Prewitt算子的3×3掩碼,如圖8所示.同樣,每個掩碼的結果絕對值需加在一起.的b和d分別是按圖8所示的Previtt算子對原圖a和c所進行圖像處理的輸出結果圖.【圖8】
4.2.2 Sobel算子
它是一離散性差分算子,用來運算圖像亮度函數的梯度之近似值.在圖像的任何一點使用此算子,將會產生對應的梯度矢量或是其法矢量.下面是一個非常流行的邊緣檢測例子,它使用如圖10所示的兩種掩碼.這里,導數可近似表示為:【7】
實現一階導數的算子將增強噪聲.然而,Sobel算子同時具有平滑作用.由Sobbel的兩個掩碼運算符可算得\ue785f/\ue785x和\ue785f/\ue785y,并可方便地計算梯度"f和梯度方向φ.的b和d分別是按圖所示的Sobel算子對原圖a和c所進行圖像處理的輸出結果圖.
4.2.3 兩種掩碼的并行實現
因為兩種掩碼的結果相互獨立,其并行實現方法是,對每一種掩碼使用均可按如圖4中所示的四步操作,不同之處是在進行加法時要帶上權值.
4.2.4 兩種掩碼的適用環境分析
實驗結果表明,Prewitt算子有一定的抗噪能力,但是這種抗噪能力是通過像素平均來實現的,相當于低通濾波,所以圖像有一定模糊,其邊緣檢測時會受到一定影響.Soble算子對噪聲有抑制作用,但對邊緣的定位不是很準確,不適合對邊緣定位的準確性要求很高的應用.
5 結束語
綜上所述,我們從CCD圖像采集系統獲得曲面輪廓的數字圖像入手,以多核處理器為實驗環境,通過對圖像預處理過程中實現并行化來提高圖像處理的速度,達到了預期的效果.