• 沒有找到結果。

偵測視窗縮放(Detecting Window Scaling)

第四章 模組化設計之即時人形偵測器

4.5 偵測視窗縮放(Detecting Window Scaling)

經由上一個步驟後可以判斷每個偵測視窗候選是否需要進行視窗的切割並且 以人形分類器進行計算與分類,但是人形分類器的視窗輸入大小是固定為 64x128,

所以我們必須將經由偵測視窗切割完畢,要進行分類的視窗進行縮放至 64x128。

在本研究初期,由於需要先行驗證整體演算法,所以初期是採取使用 Open CV[56]所內建的縮放函式,之後為了本研究程式的獨立性與可移植性,我們自行 開發了圖像縮放(Image Scaling)的相關模組化函式設計,並且成功取代 Open CV 的 函式於人形偵測器程式中運作。進行圖像縮放函式撰寫所需要的原理主要參考資 料為 George Wolberg 的著作 Digital Image Warping[57]。底下將針對 Image Scaling 原理與演算法進行介紹。

Image Scaling 的目的即是要將一張已經數位化的圖片或者照片,改變其解析 度大小,但是其所儲存的圖片內容必須是相同的,例如圖 4-13 所示,其中水平與 垂直的縮放倍率稱為比例因子(Scale Factor,SF)。一個良好的 Image Scaling 函式 應該要能適用於各種比例因子,例如長寬非等比例的縮放等。

65

Scale Up

Scale Down

SFu=2 SFv=2

SFu=0.5 SFv=0.5 (64x128)

(128x256) (32x64)

圖 4-13 Image Scaling 示意圖

Image Scaling 屬於仿射變換(Affine Transformation)中的一種相對簡單的演算 法,而仿射變換又屬於 Image Warping 這個大範圍中的一個小分支。其階層關係如 下:

Image Warping 

Affine Transformation  Image Scaling。

所有的 Image Warping 均包含兩個步驟,即空間變換(Spatial Transformation) 與插值(Interpolation)計算。

空間變換所求的為來源圖片(Source)與輸出圖片(Destination)之間的座標對應 關係,不包含求取座標上的像素強度值(Pixel Intensity)。公式(4-3)中(x,y)為輸出圖 片座標系,(u,v)為來源圖片座標系。X、Y 是其轉換函式(Mapping Functions),即公 式(4-4~4-5)。其物理意義為把來源圖片的每個座標位置依序轉移到輸出圖片中。此 方法稱為前向映射法(Forward Mapping)。

66

其中(x,y)為輸出圖片座標系,(u,v)為來源圖片座標系。U、V 是其轉換函式,即公 式(4-7~4-8)。其物理意義是把輸出圖片的每個座標位置依序映射回到來源圖片中。

如果一個輸出像素被映射到來源圖片的四個像素之間。則其像素強度值由插值演 算法計算。此方法稱為後向映射法(Inverse Mapping),又稱為像素填充法(Pixel Filling)。每個輸出像素的像素強度值由最多四個來源像素強度值的插值所決定,

只需經過一次計算。不只使用於 Image Scaling,使用於其他的 Image Warping 均可 以很方便快速的計算。

(1) 近鄰取樣插值(Nearest Neighbor):不進行計算,採用最鄰近點的像素強度 值。

67

(2) 雙線性插值(Bilinear):採用鄰近 4 個點(2x2)的像素強度值進行插值計算 新的像素強度值。

(3) 雙立方插值(Bicubic):採用鄰近 16 個點(4x4)的像素強度值進行插值計算 新的像素強度值。

圖 4-14 是使用三種插值演算法用於將來源影像放大兩倍的效果圖。其中近鄰 取樣插值的運算速度最快,但也有明顯鋸齒邊。雙線性插值的邊緣較為平滑。雙 立方插值雖然較雙線性插值來得好,但是運算速度最慢,經權衡後我們採用雙線 性插值。

Source:

Nearest Neighbor:

Bilinear:

Bicubic:

圖 4-14 三種插值演算法效果

線性插值法是指使用直線連接兩個已知數值點來確定在這兩個已知數值點之 間的一個未知數值點的方法。在空間域中,線性插值是相當於對輸入做迴旋積分 (Convolution),公式(4-9)是其 Kernel 式。可以將其畫成圖 4-15(a)的形式。其水平 軸為像素位置,單位為一個像素,垂直軸為權重。水平軸中的-1、0、1 是已知的 離散數據。透過此 Kernel 可將離散數據連起來,使其有連續性。我們就能從連起

68

來的位置找出我們所需要的點其插值結果。例如圖 4-15(b)。綠色線條為經過 Kernel 後所連接起的連續數據。所求的插值結果即位於綠線上。

(a)線性插值(Linear interpolation) Kernel 圖;

(b)離散數據經由 kernel 運算示意圖

其物理意義是將離散數據放大,再根據需要的大小重新進行採樣。若在 Image Scaling 使用 Kernel 的方式計算線性插值,要將數據放大至完全連續訊號(即類比訊 號),才能要滿足所有類型的縮放因子(Scale Factor)。因為類比訊號理論上為無限 多筆數據,於電腦上並無法儲存。所以實務上並不會使用這種方式計算。實務上

69

70

值 f(u1,v1)、f(u2,v1)、f(u1,v2)、f(u2,v2)為已知,而所求為(u,v)座標的數值 f(u,v)。首先 對 u 方向進行線性插值得到公式(4-11~4-12),再對 v 方向進行線性插值得到公式 (4-13)。

若(u1,v1)、(u2,v1)、(u1,v2)、(u2,v2)的座標分別為(0,0)、(1,0)、(0,1)、(1,1),也就 是其間距離為 1,則公式(4-11~4-13)可以合併整理成公式(4-14),此式即為用於 Image Scaling 的雙線性插值最終公式。

2 1 輸入(src)中,即圖 4-18,接著對其映射到的座標點進行雙線性插值計算,因為圖檔 像素強度值無法儲存浮點數,所以使用四捨五入法取值,結果如圖 4-19 所示。

71

3x2

輸入(src) 輸出(dst)

4x3

1/1.5 2/1.5 1/1.5

30 36.66 43.33 50

40 60

輸入(src) 輸出(dst)

圖 4-19 Scaling Up 範例 Step2

圖 4-20 是我們的系統實際應用關於 Image Scaling 之實際中間成果圖。

72

64x128

圖 4-20 Image Scaling 實際應用於人形偵測系統之中間成果圖