1. 程式人生 > >模板卷積Template Convolution

模板卷積Template Convolution

背景引言

在影象處理中,經常使用不同運算元等進行預處理。它們都有固定模板,稱為模板卷積。本節主要介紹模板卷積。

基本理論

群運算(Group operation)是利用分組處理,根據一個畫素的近鄰來計算新畫素值。群運算通常用模板卷積形式,其中模板是一個加權係數。模板通常是方形,其大小是奇數,從而可恰當定位。通常用大小描述模板;一個3x3模板是寬3個畫素乘長3個畫素。

圖1 模板卷積處理

圖1所示,新影象是通過模板卷積從原影象計算得到的。對原影象上模板的中心畫素進行模板卷積所得的計算結果成為輸出影象中的點。由於模板不能超出影象,而無法計算新影象邊界點的新值,所以新影象比原始影象小。當模板到達一行的終端,它會定位在下一行的開始位置。對於3x3近鄰而言。在9個加權係數Wi用於原影象上的對應來計算新影象上的一個點。新點(中心處)位置表示為模板中的陰影部分。


圖2 3x3模板及加權指係數

為了計算新影象中座標為x,y 的點的畫素值N,圖2中的模板在原影象O上根據下式進行處理:

我們需要注意的是,無法給影象邊界賦置。因為把模板放在邊界上時,模板的一部分落在影象外部,沒有資訊來計算新畫素置。邊界寬度等於模板大小的1/2.要計算邊界畫素值,這時有三種選擇:

  • 設定邊界為黑色(或計算一塊較小影象)。
  • 假設影象沿兩個維度方向無限重複,利用迴圈位移根據另一邊界來計算新值。
  • 利用較小區域來計算畫素值。

上述方法都不是最優的。在此我們採用的是第一種選擇,把邊界設為黑色。我們要注意的是,在許多應用中感興趣目標成像在中心位置,或至少在影象內部。因此,邊界資訊對接下來的處理幾乎沒有影響。我們把邊界點設為黑色,通過零函式來啟動所有函式,零函式將影象上所有點初始化為黑色(0)。

此處理可以利用卷積記號表示為:


其中N是將模板W權重係數和影象O進行卷積所得的新影象。

通用模板卷積運算元convole的Matlab實現如下參考程式碼:

function convolved = convolve(image,template)
%New image point brightenss convolution of template with image
%  Usage: [new image] = convolve(image,template of point values)
%
%  Parameters: image      - array of points
%              template   - array of weighting coefficients

[irows,icols]=size(image); %get image dimensions
[trows,tcols]=size(template); %get template dimensions
temp(1:irows,1:icols)=0; %set a temporary image to black

trhalf=floor(trows/2); %half of template rows is

tchalf=floor(tcols/2); %half of template cols is

%then convolve the template
for x = trhalf+1:icols-trhalf %address all columns except border
  for y = tchalf+1:irows-tchalf %address all rows except border
    sum=0;
    for iwin = 1:trows %address template columns
      for jwin = 1:tcols %address template rows
        sum=sum+image(y+jwin-tchalf-1,x+iwin-trhalf-1)*template(jwin,iwin);
      end
    end
    temp(y,x)=sum;
  end
end

%finally, normalise the image
convolved=normalise(temp);
此函式的引數是影象image以及與它進行卷積運算的模板template。模板卷積的結果是影象convolved。convolve運算元首先將臨時影象temp初始化為0亮度級灰度級。然後計算模板大小。這樣做可以得到外部for迴圈中進行處理的影象點的範圍,for迴圈根據模板卷積給出所有點的座標。此模板通過計算模板視窗內的畫素與相應的模板係數的乘積之和來對每個畫素點進行卷積,最後,對所得影象進行正規化以確保影象亮度級分佈合理。

模板卷積通常在軟體中實現,也可以在硬體中實現,對於輸入視訊資料而言,需要一個two-line store以及一些latch。其輸出是模板卷積的結果,即加權係數與畫素值的乘積之積。常稱為流水線操作

參考文獻

[1]Rafael C.Gonzalez, Rechard E.Woods at. el , "Digital Image Processing Using MatLab (Second Editon)",Gatesamark Publishing.

關於Image Engineering & Computer Vision的更多討論與交流,敬請關注本博和新浪微博songzi_tea.