• 沒有找到結果。

背景修正演算法

















“BG” 找到同時符合判斷式(3.5) 與 (3.6) 的 codeword, xij是背景。

“FL” 只有找到符合判斷式(3.5) 的 codeword, xij為前景。

“FC” Otherwise, xij為前景。

(3.7)

此演算法切割出來的背景, 由於影子與亮光的影響, 所以不夠精確。 下節將介紹如何改進背景切 割的正確性。

3.2 背景修正演算法

當一張畫面有陰影投射在背景上時, 會有一些背景像素的亮度與平均值差不多, 有些卻低於平均值很 多。 因此背景模型若要能正確將陰影部分辨識為背景, 必須要將較暗的背景色彩也納入模型中。 但如 此會造成深色前景被誤判為背景的機率 (前景錯誤率) 增加, 這也是背景模型在處理陰影所面對的難 題。 事實上, 此問題的根源是因為背景模型只描述了每個像素的色彩分佈, 這些資訊並不足以分辨陰

b

c

(a)

(b)

(c)

圖 3.3: 邊緣放大圖。(a) 同時有前景與影子的影像; (b) 影子的邊緣; (c) 前景 (人的衣服) 的邊緣。

影與深色背景, 若要正確辨識陰影並同時減少前景錯誤率, 引入其他的資訊是必要的。 本修正演算法 使用了 region-level 的資訊解決上述的問題。

3.2.1 原理

如圖 3.3所示, 一個前景物體的邊緣處會有明顯的色彩變化 (圖3.3c), 而影子會有一些邊緣色彩變化 非常緩慢 (圖 3.3b)。 欲對 codebook model 輸出的前景作修正, 可以從前景邊緣往內逐步檢查, 我 們將正在檢查的像素稱為”生長點”; 在一個以生長點為中心的固定範圍中, 與生長點色彩相近的像 素稱為”參考點”。 若此時生長點是在真正的前景邊緣, 由於背景色彩與前景有差異, 參考點中只會有 前景的像素; 相對來說, 若此時生長點在影子的邊緣, 參考點會含有比較多的背景像素。

3.2.2 修正演算法

首先假設 xij 為原影像在座標 (i, j) 的像素值, codebook model 的分割結果為 Cij (定義請見公 式 (3.7))。 則我們定義 8-neighbors 為與 xij 相鄰的八個像素:

N8(xij) = {xpq|(p, q) 6= (i, j) and |p − i| ≤ 1 and |q − j| ≤ 1}

參考視窗是以 xij 為中心, (2rs+ 1) × (2rs+ 1) 的方形區域:

W (i, j) = {xpq|(p, q) 6= (i, j) and |p − i| ≤ rs and |q − j| ≤ rs},

rs is spatial radius, 參考視窗的空間半徑。

(3.8)

(a)

(b)

(c)

圖 3.4: rs= 2, rr = 20 時, 參考視窗與參考點範例。 (a) 參考視窗在圖中的位置 (綠色方格); (b) 參考視窗 放大圖; (c) 參考點 (黃色部分)。

參考點為參考視窗中, 與中心點色彩相近的像素:

R(i, j) = {xpq|xpq ∈ W (i, j), kxpq− xijk < rr},

rr is range radius, 即色彩差異的允許範圍。

(3.9)

圖 3.4 為參考視窗與參考點的範例。 參考點的數量以 Size(i, j) = |R(i, j)| 表示, 參考點中屬於背 景的像素個數為

Bctr(i, j) = |{xpq|xpq ∈ R(i, j) and Cij = “BG”}|

在演算法的執行過程中, 影像的每個像素 xij 會被賦予一個狀態

State(i, j) ∈ {“未處理”, “生長點”, “潛在生長點”, “非生長點”}

四種狀態的意義如下:

1. “未處理” 演算法尚未處理過的像素。

2. “生長點” 演算法目前要處理的像素。

3. “潛在生長點” 曾經是生長點, 但還不確定是否要修正, 仍有可能在未來成為生長點。

4. “非生長點” 已經修正過或確定不需要修正的像素, 未來不會再成為生長點。

一個像素 xij 要能成為生長點, 必須符合以下條件:

Cij = “FL” (3.10)

kxijk ≥ Ie (3.11)

由於背景被影子投射或照到強光時, 只會造成亮度偏離背景範圍。 判斷式 (3.11) 是用來篩選出符 合判斷式 (3.5) (與背景色彩的色相與飽和度相近) 但不符合判斷式 (3.6)(與背景色彩的亮度差距較 大), 而被判定為前景的像素, 這類像素事實上有可能為背景。

修正演算法假設前景物體的邊緣有明顯的色彩變化。 當光源被嚴重遮蔽時, 拍攝到的影像中可能會出 現亮度很低的區域 (如圖 3.5 ), 在這樣的區域中各種物體的色彩資訊都會嚴重流失, 背景與前景的交 界不會有明顯的色彩變化, 所以使用修正演算法的前提是生長點的亮度必須大於一個預設值 (符合 判斷式 (3.11))。

圖 3.5: 光源被嚴重遮蔽的範例影像

所有生長點置於一個佇列 Q 中。 決定一個生長點 xij 要被改判為背景, 必須符合以下兩條件:

Size(i, j) > Tr, Tr is a threshold. (3.12) Bctr(i, j) ≥ κ Size(i, j) (3.13)

生長點的修正與否是由參考點決定, 所以參考點的數量必須夠多 (符合判斷式 (3.12)), 其決定才 被認為是可靠的; 使用判斷式 (3.13) 的的意義在於當參考點中屬於背景像素的比例高於一個預設值 時, 我們才認為此生長點應該修正為背景。 κ 是一個小於 1的常數。

演算法分成兩個部分, 一是初始化, 二是演算法主體, 詳細內容如下。

Initialize()

For each xij ∈ I

If Cij = “FL” and kxijk ≥ Ie

If ∃ xpq ∈ N8(xij) s.t. Cpq = “BG”

State(i, j) ← “生長點”

Q ← xij

Else

State(i, j) ← “未處理”

Else

State(i, j) ← “非生長點”

背景修正演算法

I. Initialize() II. While Q 6= ∅

1. xij ← Q 2. 檢查下列兩條件

(a) Size(i, j) > Tr

(b) Bctr(i, j) ≥ κ Size(i, j) 3. If (a)(b) 都成立

• Cij ← “BG”

• State(i, j) ← “非生長點”

• Wake Up:

For each xpq ∈ N8(xij) s.t. State(p, q) = “未處理”, State(p, q) ← “生長點”

Q ← xpq

• Update:

For each xpq ∈ R(i, j) s.t. State(p, q) = “潛在生長點”, Bctr(p, q) ← Bctr(p, q) + 1

If Bctr(p, q) ≥ κ Size(p, q) State(p, q) ← “生長點”

Q ← xpq

4. If (a) 成立,(b) 不成立, 且 ∃ xpq ∈ R(i, j) s.t. State(p, q) 6= “非生長點”

State(p, q) ← “潛在生長點”

5. Otherwise

State(p, q) ← “非生長點”

3.2.3 時間複雜度

背景修正演算法的時間複雜度計算如下。 定義 N 為影像的像素個數, Nf 為影像中前景部分的像素 個數, 初始化時每個像素只會處理一次, 每次花費時間為常數, 所以初始化的時間為 O(N) 。

只有前景像素能成為生長點, 而一個像素最多只能成為生長點兩次, 所以進入佇列 Q 的生長點 最多只有 O(2Nf) = O(N) 個。

每個生長點計算 Size(i, j) 與 Bctr(i, j)的時間為 O(r2s) , update 需要 O(rs2) , 其餘的動作 只需要 O(1) 的時間, 所以一個生長點的處理時間為 O(2rs2+ 1) = O(r2s) 。

所以全部花費的時間為 O(N + N × rs2) = O(Nr2s)

Chapter 4

實驗

相關文件