本發(fā)明涉及視頻處理的技術(shù)領(lǐng)域,尤其是指一種自然背景視頻摳圖方法。
背景技術(shù):
摳圖是指從靜態(tài)圖像或者連續(xù)的視頻序列中精確地將感興趣的前景對象從背景中分離出來的過程。在照片編輯、影視動畫制作、虛擬現(xiàn)實等領(lǐng)域有著廣泛的應(yīng)用。
具體地,通過估計圖像中每個像素的顏色和透明度信息來從背景中提取前景對象。像素的透明度值被稱為α值,而所有像素透明度組成的圖像被稱為α掩碼圖。摳圖的形式化描述如下:
Iz=αzFz+(1-αz)Bz (1)
其中,Iz、Fz、Bz、αz分別為像素z的觀察顏色、前景顏色、背景顏色、α值,αz∈[0,1],當αz=0時,像素z為確定背景,當αz=1時,像素z為確定前景,當αz∈(0,1)時,z為混合像素,亦即該像素的顏色值由前景和背景物體的共同作用得到。
摳圖是一個欠約束問題,如果沒有任何附加約束,公式(1)有無窮多解。因此,大多數(shù)摳圖算法都要求用戶通過交互的方式提供已知信息作為輸入。如要求用戶為每一幅圖像指定確定的前景區(qū)、確定的背景區(qū)和待計算的未知區(qū)域,這種具有三種不同標記區(qū)域的三元圖稱為Trimap圖?;蛘咭笥煤唵蔚墓P畫標記出圖像中的一部分前景像素和背景像素,如GrabCut摳圖、簡易摳圖(Easy matting)等,但這種方式往往由于輸入太少而效果不佳。
視頻摳圖則是將前景對象的提取技術(shù)應(yīng)用到視頻序列中。最終計算得到一個α掩碼圖序列,利用該序列可以合成新的視頻。同樣地,第t幀的像素z的顏色可表示如下:
視頻摳圖就是求解所有幀中像素的前景色背景色和透明度值
視頻就是連續(xù)的圖像序列,其每一幀都是一幅圖像,且一般都是背景較為復(fù)雜的自然圖像。直觀意義上講,我們需要對每一幀圖像得到一個摳圖結(jié)果,構(gòu)成新的視頻序列。這樣的話,用戶也就需要為視頻的每一幀圖像提供Trimap圖等作為已知信息。
視頻摳圖的挑戰(zhàn)是顯而易見的:其一,視頻是由很多幀圖像組成的,數(shù)據(jù)量大,求解時需要提供更多的已知信息,即更多的用戶交互,且對算法的時間性能提出更高要求。其二,人類視覺對時間連貫性敏感,摳圖結(jié)果必須很好地保持時間上的連貫性,避免出現(xiàn)閃爍和抖動等不連續(xù)現(xiàn)象,而逐幀獨立摳圖顯然難以保證得到的前景序列在視覺上保持空間以及時間上的連貫性。最后,需要解決高速運動和低時間分辨率之間的矛盾。標準攝像設(shè)備每秒拍攝30幀圖像,對高速運動物體來說,這樣的采樣率過低,使得構(gòu)造幀間對應(yīng)關(guān)系變得更加困難。
目前大多數(shù)的視頻摳圖算法都是在已有的圖像摳圖算法的基礎(chǔ)上進行相應(yīng)的擴展和優(yōu)化。如Chuang等提出的復(fù)雜場景的視頻摳圖及Apostoloff等提出的學習先驗知識的貝葉斯視頻摳圖就是基于貝葉斯摳圖;Lee等提出的時間連貫的視頻摳圖及Bai等提出的保持時間連貫的視頻摳圖則是基于魯棒摳圖、隨機行走摳圖。E.Shahrian等于2012年提出的綜合顏色和紋理采樣的圖像摳圖算法也被很好的擴展應(yīng)用到其2014年提出的時間連貫和空間精確的視頻摳圖中。其中大部分現(xiàn)有的視頻摳圖算法都采用了以下流程框架:首先,對輸入視頻通過添加適當?shù)挠脩艚换ギa(chǎn)生每一幀的Trimap;然后,將圖像摳圖算法應(yīng)用到視頻的每一幀,產(chǎn)生α掩碼圖;最后,通過某些方式加強幀與幀之間的時間連貫性,得到最終的動態(tài)前景序列。
以上這些方法大都過多的依賴于用戶交互,不但需要消耗較多的時間,還增加了視頻摳圖結(jié)果的不確定性。且一些方法在單幀上分別運用摳圖算法,并未充分利用視頻幀與幀之間的時空相關(guān)性,使得摳圖結(jié)果缺少連貫性,在新的合成視頻中出現(xiàn)閃爍和抖動的現(xiàn)象。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種自然背景視頻摳圖方法,可以有效的減少摳圖過程中的用戶交互,充分利用幀與幀之間的時空連貫性,提高視頻摳圖結(jié)果的時效性和準確性,使最后的合成視頻更加的具有真實感。
為實現(xiàn)上述目的,本發(fā)明所提供的技術(shù)方案為:一種自然背景視頻摳圖方法,包括以下步驟:
1)關(guān)鍵幀自動選取,通過計算幀間差異自動地選取視頻中的關(guān)鍵幀,并根據(jù)當前視頻運動情況得到一個自適應(yīng)的結(jié)果;
2)關(guān)鍵幀Trimap圖的生成,允許用戶通過手工交互提供有效信息,采用GrabCut分割算法與高斯模糊方法半自動地生成關(guān)鍵幀上的Trimap圖;
3)中間幀Trimap圖的生成,利用雙向光流傳播生成中間各幀的Trimap圖,并利用顏色、梯度信息修正光流傳播產(chǎn)生的誤差;
4)根據(jù)所有視頻幀的Trimap圖,以及加入三維時空優(yōu)化的貝葉斯摳圖算法計算出視頻每一幀的α掩碼圖,將α掩碼圖與新的背景進行合成,得到新的合成視頻。
在步驟1)中,所述的計算幀間差異自動選取關(guān)鍵幀,具體如下:
假設(shè){It:t=0,1...,F-1}為給定的視頻序列,It為時刻t對應(yīng)的視頻幀,F(xiàn)為幀數(shù);It(x,y)則為像素z=(x,y)處的亮度值,假定每幀有NR行、NC列;從第二幀開始,對于每一幀圖像,按照下式計算前一幀到當前幀的亮度差異,得到幀差圖 像Dt;
Dt(x,y)=|It(x,y)-It-1(x,y)|
然后,定義閾值T對幀差圖像Dt進行二值化:
接下來遍歷二值圖像Bt,統(tǒng)計其中非0元的個數(shù)為At,作為當前幀相對于前一幀的運動區(qū)域的面積,計算運動區(qū)域在整幅圖像中所占的面積比例Rt:
然后利用運動區(qū)域占比,針對當前視頻運動情況分布自適應(yīng)地選取關(guān)鍵幀;
所述的自適應(yīng)地選取關(guān)鍵幀,具體如下:
a)設(shè)定一個關(guān)鍵幀平均間隔tK,進而得到需要選取的關(guān)鍵幀總數(shù)Nk=F/tK;
b)將運動區(qū)域面積比例序列按照從大到小的順序進行排序;對這個排序后的序列,依次從大到小取前NK個元素的幀序號插入關(guān)鍵幀集合,其中,視頻的第一幀和最后一幀默認為關(guān)鍵幀;
c)在物體高速運動時,會出現(xiàn)一些連續(xù)幀的運動區(qū)域面積比例都較大,在取得的關(guān)鍵幀中出現(xiàn)連續(xù)幀序號的情況,導致冗余現(xiàn)象;為了使關(guān)鍵幀的分布更加均勻,在b)步的過程中添加了適當?shù)財_動,對于每一個將要依序插入關(guān)鍵幀集合的幀序號t,首先查找關(guān)鍵幀集合中是否有在區(qū)間[t-r,t+r]的幀序號,若沒有,則將t插入關(guān)鍵幀集合,若有,則說明集合中已有與第t幀相鄰的幀,不插入序號t,繼續(xù)向下取幀序號。
在步驟2)中,所述的關(guān)鍵幀Trimap圖半自動生成,具體如下:
用矩形框選出It的前景對象的大致區(qū)域,方框外均為確定背景像素,而方框 內(nèi)則為可能的前景像素;將這個矩形框的劃分結(jié)果作為輸入,利用GrabCut算法得到初始的分割結(jié)果;
根據(jù)初始分割的精確程度,作為可選操作適當添加一些筆畫交互,標記確定前景像素和/或確定背景像素作為補充信息,再進行Grabcut得到更為精細的二值分割結(jié)果;
所述的關(guān)鍵幀Trimap圖計算區(qū)域的生成,具體如下:
為得到Trimap圖的計算區(qū)域,對二值分割圖的x和y方向上各進行一次一維高斯模糊,從而在前景背景邊緣上產(chǎn)生模糊區(qū)域,用高斯核半徑來控制邊緣的模糊程度,進而控制計算區(qū)域的寬度;然后計算模糊后的圖像在各個像素處的梯度的模長:
記Gmax=max{G(x,y),1≤x≤NC,1≤y≤NR},如果將(x,y)置為待計算的未知像素,最后得到關(guān)鍵幀的Trimap圖;
所述的中間幀Trimap圖的生成,具體如下:
對于每一個中間幀,計算并結(jié)合兩個方向的光流:從前一個關(guān)鍵幀正向傳遞過來的光流,以及從后一個關(guān)鍵幀反向傳遞過來的光流,將關(guān)鍵幀上的Trimap圖結(jié)果逐幀傳遞到各中間幀,然后結(jié)合真實的觀察圖像來度量每個像素上方向流的準確性,從而決定中間幀Trimap圖上每個像素的標記。
在步驟3)中,所述的利用顏色、梯度信息修正光流傳播產(chǎn)生的誤差,具體如下:
根據(jù)光流得到的預(yù)測圖像和實際的觀察圖像之間在RGB空間的顏色距離分別計算光流在逐幀傳遞過程中,連續(xù)兩幀之間的正向誤差圖和反向誤差圖;
然后利用正向誤差圖和反向誤差圖,分別計算從兩個方向的關(guān)鍵幀逐幀傳遞到當前幀所產(chǎn)生的正向累積光流誤差圖和反向累積光流誤差圖;
計算區(qū)域位于前景和背景的過渡區(qū)域,是整幅圖像中梯度變化較大的地方,因此計算區(qū)域像素的梯度值往往比較大,而相反則能夠認為梯度較小即鄰域較為平滑的像素為未知像素的概率較小;因此能夠根據(jù)當前像素的梯度信息來修正累積誤差,即當某一方向傳遞過來的Trimap標記為計算區(qū)域,且該像素的梯度小于閾值時,則為這個方向的累計誤差加上一個懲罰值P;
最后,對于各中間幀上的每一個像素,選擇累計誤差較小的那個方向傳遞過來的Trimap圖的標記作為當前像素的標記。
在步驟4)中,所述的根據(jù)所有視頻幀的Trimap圖,以及加入三維時空優(yōu)化的貝葉斯摳圖算法計算出視頻每一幀的α掩碼圖,具體如下:
基于貝葉斯摳圖算法完成視頻每一幀α掩碼圖的計算,并對其加入三維的時空優(yōu)化,最大化能量如下公式:
εORG(z)=lnP(Iz|Fz,Bz,αz)+lnP(Fz)+lnP(Bz)
首先在顏色采樣時加入時間維的顏色樣本,在連續(xù)的三幀上分別采樣,即不僅僅在當前幀上進行采用,也在當前幀的前一幀和后一幀上進行采樣,三維顏色采樣的詳細過程如下:
a)在當前幀中,滑動窗口從已知區(qū)域的邊界逐漸向未知區(qū)域移動,對每一個未知像素z,在以當前位置(xz,yz,t)為圓心的鄰域內(nèi)由內(nèi)向外逐漸擴大采樣半徑,依次采集鄰近的已知像素和完成計算的未知像素的前景或背景顏色值當作樣本點,直到樣本數(shù)目達到K個;
b)在當前幀的前一幀中,在以像素z的對應(yīng)位置(xz,yz,t-1)處為圓心的鄰域內(nèi)采取a)中的同樣的策略,由內(nèi)向外逐漸擴大采樣半徑,依次采集鄰近的已知像素和完成計算的未知像素的前景或背景顏色值,直到樣本數(shù)目達到K個;
c)在當前幀的后一幀中,在位置(xz,yz,t+1)處按照b)中的方式采集顏色樣本。
記得到的新像素集合為Ns;為每個顏色樣本點i∈Ns,定義權(quán)重wi,加入時間維的信息,wi定義:
同樣,對背景像素,將αi2改為(1-αi)2即可;得到前景或背景顏色值的樣本集,通過貝葉斯摳圖算法得到每個未知像素的初始前景值F和初始背景值B;
α求解算法過程如下:
a)獲取第t幀的圖像及其Trimap圖;
b)從已知區(qū)域與未知區(qū)域的邊界開始依次為每個未知像素采集三維的前景顏色樣本點和背景顏色樣本點,定義每個顏色樣本點的權(quán)值;
c)以當前未知像素鄰域內(nèi)的像素點α的均值作為αz的初始值,采用貝葉斯摳圖算法求解F,B作為初始值;
d)構(gòu)造三維平滑約束項εALP(z),最大化求解能量公式εIMP,得到當前幀中每個像素的透明度值α;
e)更新αz(z=1,2,...N)的值,重新利用貝葉斯摳圖算法求解F,B;
f)當能量公式收斂或者達到規(guī)定迭代次數(shù),跳到步驟g),否則,跳到e);
g)輸出當前幀的αz,Fz,Bz(z=1,2...N),計算下一幀。
對每一個未知像素,加入時間維的平滑約束;將α的平滑約束由8鄰域擴充 到26鄰域,即不僅包括當前幀中未知像素位置處為中心的3×3窗口內(nèi)的像素,還包括其前一幀、后一幀對應(yīng)位置處3×3的窗口內(nèi)的像素;使得未知像素的α值不僅僅在當前幀的8鄰域內(nèi)盡量保持平滑,還要與加上前一幀、后一幀的共26鄰域內(nèi)的像素α值盡可能地保持平滑,以確保摳圖結(jié)果在時間上的連貫性;
像素z的26領(lǐng)域,用N(z)來表示,對j∈N(z),定義如下權(quán)重:
其中σ=8,這樣使得距離未知像素z更近的點的權(quán)重更大,且當前幀像素的權(quán)重比前一幀和后一幀的像素點的權(quán)重更大,則εALP(z)定義為:
其中,W=∑j∈N(z)w'j,使前景到背景的α值按照高斯衰減函數(shù)的曲線變化過渡,其中σf=2,dz為未知像素z到已知區(qū)域的距離;
在實際計算過程中,由于當前幀的前一幀已經(jīng)計算完畢,而后一幀還未開始計算,當前幀的26鄰域內(nèi)位于后一幀的像素可能包含未知像素,即其αj未知,令其權(quán)重為0,不納入計算。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點與有益效果:
1、本發(fā)明采用幀差法自適應(yīng)地選取關(guān)鍵幀,計算過程簡單,效率較高,且不易受到光照變化的干擾。根據(jù)幀與幀之間的像素差異來衡量運動的變化,選取運動較大的幀作為關(guān)鍵幀,符合視頻摳圖對于關(guān)鍵幀的要求。同時,本文在關(guān)鍵幀的選取過程中添加適當?shù)財_動,可以使關(guān)鍵幀的分配相對均勻,避免出現(xiàn)相鄰過近或者相鄰過遠的關(guān)鍵幀,這樣可以保證后續(xù)兩個關(guān)鍵幀之間的光流傳播更加高效和可信。
2、本發(fā)明采用關(guān)鍵幀和雙向光流傳播結(jié)合的方式,生成視頻所有幀的 Trimap圖,并充分利用圖像顏色信息、梯度信息等來對光流傳播產(chǎn)生的誤差進行糾正,以提高Trimap圖的正確度。
3、本發(fā)明在貝葉斯摳圖算法的基礎(chǔ)上提出三維的時空優(yōu)化,加入三維顏色采樣和三維平滑約束,充分利用視頻幀與幀之間的相關(guān)性,使得摳圖結(jié)果更加的真實自然,加強了視頻摳圖結(jié)果的連貫性,減少了閃爍和抖動現(xiàn)象的產(chǎn)生。
附圖說明
圖1是視頻摳圖與合成流程圖。
圖2是關(guān)鍵幀自動選取流程圖。
圖3是關(guān)鍵幀Trimap圖生成流程圖。
圖4是中間幀Trimap圖的自動生成流程。
圖5是α求解及背景合成流程圖。
圖6是關(guān)鍵幀與雙向光流結(jié)合產(chǎn)生中間幀Trimap結(jié)果。
圖7是本發(fā)明與Chuang等人技術(shù)的比較。
圖8是本發(fā)明與Chuang等人技術(shù)合成結(jié)果及α圖的局部放大對比圖。
具體實施方式
下面結(jié)合具體實施例對本發(fā)明作進一步說明。
本實施例所述的一種自然背景視頻摳圖方法,包括以下步驟:
1)關(guān)鍵幀自動選取,通過計算幀間差異自動地選取視頻中的關(guān)鍵幀,并根據(jù)當前視頻運動情況得到一個自適應(yīng)的結(jié)果;
2)關(guān)鍵幀Trimap圖的生成,允許用戶通過少量的手工交互提供有效信息,采用GrabCut分割算法與高斯模糊方法半自動地生成關(guān)鍵幀上的Trimap圖;
3)中間幀Trimap圖的生成,利用雙向光流傳播生成中間各幀的Trimap圖, 并利用顏色、梯度等信息修正光流傳播產(chǎn)生的誤差;
4)根據(jù)所有視頻幀的Trimap圖,以及加入三維時空優(yōu)化的貝葉斯摳圖算法計算出視頻每一幀的α掩碼圖,將α掩碼圖與新的背景進行合成,得到新的合成視頻。
步驟1)中,所述的計算幀間差異自動選取關(guān)鍵幀,具體如下:
假設(shè){It:t=0,1...,F-1}為給定的視頻序列,It為時刻t對應(yīng)的視頻幀,F(xiàn)為幀數(shù)。It(x,y)則為像素z=(x,y)處的亮度值,假定每幀有NR行、NC列。從第二幀開始,對于每一幀圖像,按照下式計算前一幀到當前幀的亮度差異,得到幀差圖像Dt。
Dt(x,y)=|It(x,y)-It-1(x,y)|
然后,定義閾值T對幀差圖像Dt進行二值化:
接下來遍歷二值圖像Bt,統(tǒng)計其中非0元的個數(shù)為At,作為當前幀相對于前一幀的運動區(qū)域的面積,計算運動區(qū)域在整幅圖像中所占的面積比例Rt:
然后利用運動區(qū)域占比,針對當前視頻運動情況分布自適應(yīng)地選取關(guān)鍵幀。
所述的自適應(yīng)地選取關(guān)鍵幀,具體如下:
a)設(shè)定一個關(guān)鍵幀平均間隔tK,進而得到需要選取的關(guān)鍵幀總數(shù)Nk=F/tK;
b)將運動區(qū)域面積比例序列按照從大到小的順序進行排序;對這個排序后的序列,依次從大到小取前NK個元素的幀序號插入關(guān)鍵幀集合,其中,視頻的第一幀和最后一幀默認為關(guān)鍵幀;
c)在物體高速運動時,會出現(xiàn)一些連續(xù)幀的運動區(qū)域面積比例都較大,在取得的關(guān)鍵幀中出現(xiàn)連續(xù)幀序號的情況,導致冗余現(xiàn)象。為了使關(guān)鍵幀的分布更加均勻,在b)步的過程中添加了適當?shù)財_動,對于每一個將要依序插入關(guān)鍵幀集合的幀序號t,首先查找關(guān)鍵幀集合中是否有在區(qū)間[t-r,t+r](實驗中r取3)的幀序號,若沒有,則將t插入關(guān)鍵幀集合,若有,則說明集合中已有與第t幀相鄰的幀,不插入序號t,繼續(xù)向下取幀序號。
步驟2)中,所述的關(guān)鍵幀Trimap圖半自動生成,具體如下:
用矩形框選出It的前景對象的大致區(qū)域,方框外均為確定背景像素,而方框內(nèi)則為可能的前景像素。將這個矩形框的劃分結(jié)果作為輸入,利用GrabCut算法得到初始的分割結(jié)果。
根據(jù)初始分割的精確程度,作為可選操作適當添加一些筆畫交互,標記確定前景像素和/或確定背景像素作為補充信息,再進行Grabcut得到更為精細的二值分割結(jié)果。
所述的關(guān)鍵幀Trimap圖計算區(qū)域的生成,具體如下:
為得到Trimap圖的計算區(qū)域,我們對二值分割圖的x和y方向上各進行一次一維高斯模糊,從而在前景背景邊緣上產(chǎn)生模糊區(qū)域,用高斯核半徑來控制邊緣的模糊程度,進而控制計算區(qū)域的寬度。然后計算模糊后的圖像在各個像素處的梯度的模長:
記Gmax=max{G(x,y),1≤x≤NC,1≤y≤NR},如果將(x,y)置為待計算的未知像素,最后得到關(guān)鍵幀的Trimap圖;
步驟3)中,所述的中間幀Trimap圖的生成,具體如下:
對于每一個中間幀,計算并結(jié)合兩個方向的光流:從前一個關(guān)鍵幀正向傳 遞過來的光流,以及從后一個關(guān)鍵幀反向傳遞過來的光流,將關(guān)鍵幀上的Trimap圖結(jié)果逐幀傳遞到各中間幀。然后結(jié)合真實的觀察圖像來度量每個像素上方向流的準確性,從而決定中間幀Trimap圖上每個像素的標記。
所述的利用顏色、梯度等信息修正光流傳播產(chǎn)生的誤差,具體如下:
根據(jù)光流得到的預(yù)測圖像和實際的觀察圖像之間在RGB空間的顏色距離分別計算光流在逐幀傳遞過程中,連續(xù)兩幀之間的正向誤差圖和反向誤差圖。
然后利用正向誤差圖和反向誤差圖,分別計算從兩個方向的關(guān)鍵幀逐幀傳遞到當前幀所產(chǎn)生的正向累積光流誤差圖和反向累積光流誤差圖。
計算區(qū)域位于前景和背景的過渡區(qū)域,是整幅圖像中梯度變化較大的地方,因此計算區(qū)域像素的梯度值往往比較大,而相反則可以認為梯度較小(鄰域較為平滑)的像素為未知像素的概率較小。因此可以根據(jù)當前像素的梯度信息來修正累積誤差,即當某一方向傳遞過來的Trimap標記為計算區(qū)域,且該像素的梯度小于閾值(實驗中取10)時,則為這個方向的累計誤差加上一個懲罰值P(實驗中P取50)。
最后,對于各中間幀上的每一個像素,選擇累計誤差較小的那個方向傳遞過來的Trimap圖的標記作為當前像素的標記。
步驟4)中,所述的根據(jù)所有視頻幀的Trimap圖,以及加入三維時空優(yōu)化的貝葉斯摳圖算法計算出視頻每一幀的α掩碼圖,具體如下:
基于貝葉斯摳圖算法完成視頻每一幀α掩碼圖的計算,并對其加入三維的時空優(yōu)化。最大化能量如下公式:
εORG(z)=lnP(Iz|Fz,Bz,αz)+lnP(Fz)+lnP(Bz)
首先在顏色采樣時加入時間維的顏色樣本,在連續(xù)的三幀上分別采樣,即不僅僅在當前幀上進行采用,也在當前幀的前一幀和后一幀上進行采樣。三維顏色采樣的詳細過程如下:
a)在當前幀中,滑動窗口從已知區(qū)域的邊界逐漸向未知區(qū)域移動,對每一個未知像素z,在以當前位置(xz,yz,t)為圓心的鄰域內(nèi)由內(nèi)向外逐漸擴大采樣半徑,依次采集鄰近的已知像素和完成計算的未知像素的前景(或背景)顏色值當作樣本點,直到樣本數(shù)目達到K個(實驗中取K=85);
b)在當前幀的前一幀中,在以像素z的對應(yīng)位置(xz,yz,t-1)處為圓心的鄰域內(nèi)采取a)中的同樣的策略,由內(nèi)向外逐漸擴大采樣半徑,依次采集鄰近的已知像素和完成計算的未知像素的前景(或背景)顏色值,直到樣本數(shù)目達到K個;
c)在當前幀的后一幀中,在位置(xz,yz,t+1)處按照b)中的方式采集顏色樣本。
記得到的新像素集合為Ns;為每個顏色樣本點i∈Ns,定義權(quán)重wi,加入時間維的信息,wi定義:
同樣,對背景像素,將αi2改為(1-αi)2即可。得到前景(或背景)顏色值的樣本集,通過貝葉斯摳圖算法得到每個未知像素的初始前景值F和初始背景值B。
對每一個未知像素,加入時間維的平滑約束;將α的平滑約束由8鄰域擴充到26鄰域,即不僅包括當前幀中未知像素位置處為中心的3×3窗口內(nèi)的像素,還包括其前一幀、后一幀對應(yīng)位置處3×3的窗口內(nèi)的像素;使得未知像素的α值不僅僅在當前幀的8鄰域內(nèi)盡量保持平滑,還要與加上前一幀、后一幀的共26鄰域內(nèi)的像素α值盡可能地保持平滑,以確保摳圖結(jié)果在時間上的連貫性。
像素z的26領(lǐng)域,用N(z)來表示,對j∈N(z),定義如下權(quán)重:
其中σ=8,這樣使得距離未知像素z更近的點的權(quán)重更大,且當前幀像素的權(quán)重比前一幀和后一幀的像素點的權(quán)重更大,則εALP(z)定義為:
其中,W=∑j∈N(z)w'j,使前景到背景的α值按照高斯衰減函數(shù)的曲線變化過渡,其中σf=2,dz為未知像素z到已知區(qū)域的距離;
在實際計算過程中,由于當前幀的前一幀已經(jīng)計算完畢,而后一幀還未開始計算,當前幀的26鄰域內(nèi)位于后一幀的像素可能包含未知像素,即其αj未知,令其權(quán)重為0,不納入計算。
本發(fā)明設(shè)計的視頻摳圖與合成的完整流程如圖1。讀取視頻文件之后,我們首先自動地選取所需的關(guān)鍵幀;然后在關(guān)鍵幀上添加少量的手工交互,半自動地生成關(guān)鍵幀的Trimap圖;接下來,將關(guān)鍵幀的Trimap圖通過雙向光流傳播到中間幀,自動地生成中間各幀的Trimap圖;然后,對視頻的每一幀應(yīng)用第四章中所描述的摳圖算法,生成所有幀的α掩碼圖;最后依照生成的α掩碼圖將前景序列與新的背景進行合成,輸出并保存新的視頻。具體地:
1.關(guān)鍵幀自動選取的流程如圖2所示。首先,對讀取的視頻,從第二幀開始計算每一幀相對于前一幀的幀差圖像;然后對每一幀的幀差圖像進行二值化,并統(tǒng)計二值圖像中值為1(代表運動像素)的像素個數(shù),計算運動區(qū)域占比;然后將運動區(qū)域占比從大到小排序,依次取前NK個幀序號,在取的過程中,添加適當?shù)財_動,如圖中所示,以避免取到鄰近的幀序號。我們采用STL中的multimap關(guān)聯(lián)容器保存運動區(qū)域占比及其對應(yīng)的幀序號,以運動區(qū)域占比為關(guān)鍵字,自 動從小到大排序。使用反向迭代器,從multimap末尾開始向前依次取前NK大的元素,關(guān)鍵幀集合采用STL中的set容器保存,最后得到一個有序的關(guān)鍵幀序列。
2.關(guān)鍵幀Trimap圖生成的流程如圖3所示。首先用一個矩形框框出前景的大致區(qū)域,作為可能的前景;應(yīng)用GrabCut分割算法得到前景背景的分割結(jié)果,如果對分割不滿意,可添加手工交互指定確定的前景像素或確定的背景像素作為輸入,再進行依次GrabCut分割,若滿意,則利用高斯模糊生成計算區(qū)域,得到Trimap圖;同樣,如果對生成的Trimap圖不滿意,我們提供畫刷工具,可直接修改前景區(qū)域、背景區(qū)域及計算區(qū)域。最終的Trimap圖,如圖6中左邊第2列第一行和第4列最后一行。
3.中間幀Trimap圖自動生成的流程如圖4所示。在每兩個關(guān)鍵幀區(qū)間內(nèi),分別通過正向和反向光流逐幀的傳播,為每一個中間幀生成一個正向的Trimap圖和反向的Trimap圖;在計算的過程中,利用顏色信息和梯度信息為每一個方向上的光流計算其傳播誤差,對每一個像素,選擇誤差較小的方向上傳遞過來的Trimap圖標記作為其最終的標記,進而得到整幅圖像的Trimap圖。光流傳播生成的中間幀Trimap圖結(jié)果如圖6中左邊第3列所示。
4.α求解及背景合成流程如圖5所示。α求解算法過程如下:
a)獲取第t幀的圖像及其Trimap圖;
b)從已知區(qū)域與未知區(qū)域的邊界開始依次為每個未知像素采集三維的前景顏色樣本點和背景顏色樣本點,定義每個顏色樣本點的權(quán)值;
c)以當前未知像素鄰域內(nèi)的像素點α的均值作為αz的初始值,采用貝葉斯摳圖算法求解F,B作為初始值;
d)構(gòu)造三維平滑約束項εALP(z),最大化求解能量公式εIMP,得到當前幀中每個像素的透明度值α;
e)更新αz(z=1,2,...N)的值,重新利用貝葉斯摳圖算法求解F,B;
f)當能量公式收斂或者達到規(guī)定迭代次數(shù),跳到步驟g),否則,跳到e);
g)輸出當前幀的αz,Fz,Bz(z=1,2...N),計算下一幀。
在與新背景進行合成時,視頻幀圖像f、與背景圖像b在RGB三通道上根據(jù)掩碼圖像α,按照以下公式進行合成,得到新的圖像c:
c=α*f+(1-α)b
在實際計算過程中,將上述公式改寫為下面的形式,以減少乘法的運算次數(shù),提高程序的效率:
c=α*(f-b)+b
新的合成結(jié)果如圖6中左邊第5列及圖7中左邊第3列。在圖7和圖8的對比中可以看到最后合成結(jié)果圖里背景到前景的過渡更加平滑與真實。新的合成視頻在播放時也更加的連貫自然。
以上所述實施例只為本發(fā)明之較佳實施例,并非以此限制本發(fā)明的實施范圍,故凡依本發(fā)明之形狀、原理所作的變化,均應(yīng)涵蓋在本發(fā)明的保護范圍內(nèi)。