摘 要: 針對在背景圖像開出任意形狀的剪裁區(qū)域(膜版)填充前景圖像的問題,采用多圖層方法,在背景和前景圖像之間增加一個存放膜版的圖層,提出一種多圖層任意形狀膜版的圖像疊加技術(shù),介紹了其工作原理和具體算法,并討論了其運行實例。
關(guān)鍵詞: 圖像疊加 區(qū)域連通性 膜版 多圖層
在處理圖像的過程中,常常需要在背景圖像開出任意形狀的剪裁區(qū)域來填充前景圖像,使得前景圖像在背景給定范圍內(nèi)顯示和活動。Photoshop軟件采用套索工具,微軟的畫圖軟件采用“任意形狀的剪裁”工具,二種方式均可獲得任意形狀的圖像。但這種疊加需求實際上是想要事先獲得一個任意形狀外輪廓,然后在背景的該輪廓區(qū)域內(nèi)填充上前景圖像,現(xiàn)有軟件較難實現(xiàn)或?qū)崿F(xiàn)起來較繁瑣。
為解決該問題,本文借鑒Photoshop軟件的多圖層制作思想,先提取或勾勒出任意形狀的剪裁區(qū)域(膜版),形成底色為白色的膜版圖層。再通過程序?qū)υ搱D層進行二值化、求取膜版外接矩形、消除其內(nèi)部白色孤立點、利用區(qū)域連通性消除其內(nèi)部白色孤立區(qū)域等處理,形成黑色膜版,再將它與背景和前景疊加獲得復(fù)合圖像。本文給出了該疊加技術(shù)的工作原理和具體算法,通過實例說明達到的效果,并討論了該技術(shù)的擴展使用。
1 多圖層膜版疊加技術(shù)的工作原理
本疊加技術(shù)的主要思路是,先由美工人員運用Photoshop的套索工具或畫圖軟件的“任意形狀的剪裁”工具在一張包含有目標(biāo)膜版的原始圖像上,提取所需的任意形狀的剪裁區(qū)域,然后復(fù)制、粘貼到一個底色為白色的圖像上,此時膜版內(nèi)部仍保留原始圖像。當(dāng)圖像結(jié)構(gòu)和顏色復(fù)雜時,如果采用手工將膜版內(nèi)部填充或涂成黑色則很繁瑣。因此這里采取專門的處理算法可將膜版內(nèi)部全部變成黑色,得到的就是完整的膜版圖層,再將膜版圖像存成文件即可。進行圖像疊加時,判斷背景上的點是否屬于膜版區(qū)域,如果屬于,則把背景上該點顏色用前景上相應(yīng)點顏色替代,就可達到預(yù)期的疊加目標(biāo)。整個多圖層膜板疊加技術(shù)的工作原理如圖1所示。
膜版處理算法先對膜版原始圖像進行二值化,變成白色或黑色,再消除膜版內(nèi)部白色孤立奇異點(四周8個鄰點均為黑色的白色點)。求取膜版的外接矩形是為了加快處理速度。為消除膜版內(nèi)部的白色區(qū)域(白色空洞),利用區(qū)域連通性原理對膜版外接矩形內(nèi)的白色點進行區(qū)域連通性計算,獲得白色點的連通標(biāo)記。由于膜版內(nèi)部白色區(qū)域點的連通標(biāo)記大于膜版外部白色點的連通標(biāo)記,由此判定該白色點為膜版內(nèi)部點,可變成黑色,從而消除膜版內(nèi)的白色空洞,產(chǎn)生完整的黑色膜版,為疊加準(zhǔn)備好所需的膜版圖層。
2 具體算法
2.1 膜版圖像二值化
對膜版原始圖像進行二值化,對圖層每個點進行處理,保留白色和黑色點,把非白非黑的點顏色變成黑色。
2.2 消除膜版內(nèi)白色孤立點
二值化后的膜版圖像可能存在一些白色孤立點,會影響后面的疊加處理,因此需消除。消除方法是對圖像中每個白色點判斷其四周8個鄰點是否均為黑色,如果是,則將該點變成黑色。
2.3 求取膜版的外接矩形
為縮小后面區(qū)域連通性計算的范圍,需要求取膜版的外接矩形,即獲得膜版的最左邊界點和最右邊界點的橫坐標(biāo)Xmin、Xmax及最上邊界點和最下邊界點的縱坐標(biāo)Ymin、Ymax。
2.4 區(qū)域連通性計算
為消除膜版內(nèi)部的白色區(qū)域,同時避免錯誤地消除膜版外部的白色點,采用4鄰域法[1][2]計算圖層中外接矩形以內(nèi)白色點所屬的連通區(qū)域標(biāo)記。這里采用的技巧:將膜版外接矩形向外擴大1個象素,得到外擴矩形。求取膜版的外擴矩形如圖2所示。該外擴矩形上都是白色點,先將這些點的連通區(qū)域標(biāo)記賦為1,再計算外接矩形內(nèi)白色點的連通區(qū)域標(biāo)記。這樣外接矩形以內(nèi)而膜版以外的白色點的標(biāo)記肯定為1,膜版內(nèi)部白色區(qū)域的標(biāo)記將大于1。圖2中,A點為膜版以外的白色點,C點為膜版內(nèi)的白色區(qū)域中的點,B點為白色孤立點。
計算區(qū)域連通性的算法描述如下:
(1)對連通標(biāo)記數(shù)組初始化,外擴矩形四邊上的點標(biāo)記為1,外擴矩形內(nèi)部黑色點的標(biāo)記為0。
(2)從左至右、從上到下掃描圖像。
(3)對于每行的各點,如果某點的象素值為白色,則:如果上面點和左面點有一個標(biāo)記,則復(fù)制該標(biāo)記;如果2點有相同的標(biāo)記,則復(fù)制該標(biāo)記;如果2點有不同的標(biāo)記,則復(fù)制2點中較小標(biāo)記;將2標(biāo)記寫入等價表中作為等價標(biāo)記;否則給這個象素點分配一個新標(biāo)記,并將這一標(biāo)記寫入等價表。
第一遍從上到下4連通序貫的相關(guān)Delphi代碼如下:
MaxEquValue:=1;//連通標(biāo)記變量,初始為1
for j:=Ymin to Ymax do
for i:=Xmin to Xmax do
begin
if ImgTempGood.Canvas.Pixels[i,j]=clWhite then //是否白色
begin
if(ImgTempGood.Canvas.Pixels[i,j-1]=clBlack) and
(ImgTempGood.Canvas.Pixels[i-1,j]=clBlack) then
begin //上點和左點均為黑色點
MaxEquValue:=MaxEquValue+1; //新的連通標(biāo)記
EquTable[i,j]:=MaxEquValue; //賦值到標(biāo)記數(shù)組
end
else if (ImgTempGood.Canvas.Pixels[i,j-1]=clWhite)
and (ImgTempGood.Canvas.Pixels[i-1,j]=clWhite) then
begin //上點和左點同時為白色點
Lj_1:=EquTable[i,j-1]; //上邊點的標(biāo)記
Li_1:=EquTable[i-1,j]; //左邊點的標(biāo)記
if(Li_1>0) and (Lj_1>0) then //標(biāo)記同時存在
begin
if Li_1=Lj_1 then //上點和左點標(biāo)記相同
EquTable[i,j]:=Li_1
else //上點和左點標(biāo)記不相同,取二者中小的
EquTable[i,j]:=MIN(Li_1,Lj_1);
end;
end //end for else if
else //上點或左點只有一個為白色點
begin
//上點為1,且有標(biāo)記L,則該點的標(biāo)記也為L,上點優(yōu)先
if(ImgTempGood.Canvas.Pixels[i,j-1]=clWhite) and
(EquTable[i,j-1]>0) then
EquTable[i,j]:=EquTable[i,j-1]
//左點為1,且有標(biāo)記L,則該點的標(biāo)記也為L
else if(ImgTempGood.Canvas.Pixels[i-1,j]=clWhite) and
(EquTable[i-1,j]>0) then
EquTable[i,j]:=EquTable[i-1,j];
end;//end for else
end;//end for if
end;//end for i
(4)考慮下一行,則重復(fù)第(3)步。
(5)從下到上掃描圖像,重復(fù)(3)、(4)步。
(6)在等價表的每一等價集中找到該等價集中最低的標(biāo)記。
(7)掃描圖像,用等價表中的最低標(biāo)記取代每一標(biāo)記,即標(biāo)記出較大的連通域。
2.5 消除膜版內(nèi)白色區(qū)域
對外接矩形內(nèi)各點,判斷其連通標(biāo)記是否大于1,若是,則說明該點是膜版內(nèi)部白色點(空洞點),則置為黑色。
2.6 多圖層疊加
圖層疊加時,對于膜版外接矩形內(nèi)各點,如果是黑色點,則用該點坐標(biāo)對應(yīng)的前景點顏色去替代背景上相應(yīng)點的顏色來完成圖像的復(fù)合疊加。相關(guān)代碼如下:
for y:=Ymin to Ymax do
for x:=Xmin to Xmax do
//點(x,y)是否屬于模版區(qū)域?
if ImgTempGood.Canvas.Pixels[x,y]=clBlack then
ImgObject.Canvas.Pixels[x,y]:=ImgForgrd.Canvas.Pixels[x,y];
//背景圖像上屬于膜版區(qū)域的點填充成前景顏色
3 運行實例
本算法采用Delphi7實現(xiàn),一個疊加的運行實例如圖3所示。圖中,B、T0、F分別是背景、膜版的原始圖像及前景,圖T1是二值化后的膜版圖像,圖T2是去掉白色空洞后的膜版。從圖中可看到二值化后的膜版包含許多白色孤立點和白色區(qū)域,需要消除掉。圖O是最后疊加產(chǎn)生的合成結(jié)果。有關(guān)本疊加技術(shù)的擴展使用討論如下:
(1)上述方法是針對在背景上開一個裁減窗口設(shè)計的。如果想開多個不交叉的裁減窗口,同樣可為每個裁減窗口準(zhǔn)備一個膜版圖層,分別把前景、背景和每個膜版疊加。還可通過在膜版圖層移動膜版的位置,實現(xiàn)前景被移動過濾的效果。(2)當(dāng)多個裁減窗口有交叉部分,就要注意事先安排好各膜版對應(yīng)前景的遮擋關(guān)系,然后程序依照預(yù)定的前后順序進行疊加。(3)本疊加技術(shù)可用于人物拍攝時,在背景上給出藝術(shù)化外輪廓,其內(nèi)部區(qū)域供被拍攝者來拍照。也可用于電視節(jié)目的制作,屏幕上留出專門形狀的區(qū)域來播放其他文字或視頻圖像。還可用于游戲制作程序,屏幕上限制某區(qū)域,供顯示游戲中人物或動畫。
4 結(jié) 論
本文采用多圖層方法,在背景和前景之間增加一個膜版圖層來過濾前景實現(xiàn)圖像復(fù)合,利用區(qū)域連通性原理消除膜版內(nèi)部白色孤立區(qū)域,產(chǎn)生黑色膜版。這些技術(shù)的運用只是圖像疊加處理中的部分方法,起到拋磚引玉的效果。
參考文獻
1 賈云得.機器視覺.北京:科學(xué)出版社,2000
2 童曉陽,楊名利.人臉輪廓定位和歸一化的研究.系統(tǒng)仿真學(xué)報,2005;17(3)