视频智能去水印:从数学建模到工程实现
羅偉
網(wǎng)易資深研發(fā)工程師
先后參與KMS流媒體服務(wù)器及NTS分布式任務(wù)處理系統(tǒng)的開(kāi)發(fā)
作者簡(jiǎn)介大部分時(shí)候,為了表明作品來(lái)源,我們需要對(duì)拍攝制作的圖片或者視頻加上水印logo。不過(guò),我們有時(shí)候也需要對(duì)視頻已經(jīng)加上的水印進(jìn)行移除處理,然后加上新的水印。加水印的自動(dòng)處理是很容易實(shí)現(xiàn)的,而檢測(cè)并去除水印的自動(dòng)處理就有相當(dāng)?shù)奶魬?zhàn)性了。
?
問(wèn)題已經(jīng)拋出,網(wǎng)易云信的分布式視頻處理系統(tǒng),于近期發(fā)布了支持視頻自動(dòng)去水印的轉(zhuǎn)碼功能,我們是怎么自動(dòng)化、智能化地解決這一問(wèn)題的呢?
?
其實(shí)很簡(jiǎn)單,它總共分三步:
分析并檢測(cè)出視頻所有水印的區(qū)域;
根據(jù)區(qū)域?qū)@些水印進(jìn)行移除處理;
加上新的水印。
?
細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn),這事情"簡(jiǎn)單"地好比如何把大象放進(jìn)冰箱,那我們就來(lái)試試把大象放進(jìn)冰箱。
?
本文分三個(gè)部分來(lái)描述:數(shù)學(xué)建模、工程實(shí)現(xiàn)、實(shí)際效果。
●●●
數(shù)學(xué)建模
因?yàn)橐曨l是由一幀一幀的圖像組成,所以視頻去水印其實(shí)就是一組圖像的去水印。這部分內(nèi)容比較偏學(xué)術(shù),筆者爭(zhēng)取描述得通俗易懂。
1-1 image matting問(wèn)題
視頻去水印的本質(zhì)是multi-image matting問(wèn)題,圖像處理中的image matting問(wèn)題最早由Alvy Ray Smith在其SIGGRAPH論文《Blue screen matting》中提出和定義,中文意思就是摳圖。
?
AlvyRay Smith認(rèn)為一張圖片I,應(yīng)該由前景F和背景B合成,合成方式就是通過(guò)透明度α來(lái)操作。在不同的區(qū)域兩者的比例不一樣,對(duì)于只有背景的地方,前景的參與比例為0%,對(duì)于只有前景的地方,背景的參與比例為0%。具體公式如下:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ?
可以看出來(lái),matting問(wèn)題研究的是,如何通過(guò)左邊的I,推測(cè)出右邊的三個(gè)變量α、F和B,方程數(shù)量嚴(yán)重少于未知數(shù)數(shù)量,理論上是無(wú)精確解的,實(shí)際工程上根據(jù)不同場(chǎng)景或者一些先驗(yàn)前提,我們是可以一定程度上求出近似解的,不過(guò)其難度仍然巨大。
?
這項(xiàng)技術(shù)主要被用在電影工業(yè)中,比如你在觀看一些電影花絮視頻時(shí),有時(shí)會(huì)看到拍攝現(xiàn)場(chǎng)有綠色背景和一群穿著綠色衣服的工作人員,這些都會(huì)在后期的摳圖技術(shù)下被摳掉換上“真正的”背景。這種Blue Screen Matting 技術(shù),使用純色背景可以確保前景被準(zhǔn)確摳出。
?
在2001年的CVPR會(huì)議上,貝葉斯公式被引入解決matting問(wèn)題,在04年的SIGGRAPH上,MSRA的Jian Sun等人發(fā)表了基于泊松方程的Poisson Matting這篇文章,其實(shí)際上是將透明度作為圖像的一種內(nèi)在屬性—“場(chǎng)”,變向地尋求其最優(yōu)解。后來(lái)同在MSRA工作的KaiMing He,在圖像去霧算法中發(fā)現(xiàn)了暗通道先驗(yàn),并獲得2009年的CVPR最佳論文。
?
1-2 水印估計(jì)與去除算法
今年,Google在CVPR2017會(huì)議上發(fā)表了一篇去水印的論文《On the Effectiveness of Visible Watermarks》,其幾近完美地解決了具有共同水印的一組圖像去水印問(wèn)題,研究人員提出了廣義的multi-image matting模型。
?
對(duì)于水印圖像 J ,我們認(rèn)為其通過(guò)將水印 W 疊加到自然圖像 I 來(lái)獲得,類似于上面的公式,可以有下面的公式:
?
其中p =(x,y)是像素位置,α(p)是空間變化的不透明度,最常用的水印是半透明的,以保持底層的圖像內(nèi)容部分可見(jiàn)。
?
給定W和α,可以對(duì)每個(gè)像素進(jìn)行計(jì)算操作來(lái)獲取原圖像:
?
如果沒(méi)有先驗(yàn)信息,單獨(dú)給予J來(lái)恢復(fù)I的問(wèn)題是非常困難的,因?yàn)槊總€(gè)像素點(diǎn)都有三個(gè)未知的(W,α,I)變量和一個(gè)約束方程。
?
但是,大部分場(chǎng)景下,水印是以一致的方式添加到一組圖像中,所以,對(duì)于圖像集合{Ik},由相同的W和α標(biāo)記,我們有(為了簡(jiǎn)潔省略像素索引p):
?
換句話說(shuō),我們的目標(biāo)是,給定{Jk} k = 1…K,恢復(fù)W,α和{Ik} k = 1..K。大致算法如下:
?
A、估計(jì)檢測(cè)水印
?
廣義上來(lái)說(shuō),在一組圖像中將所有圖像中屬于水印的圖像結(jié)構(gòu)檢測(cè)還原出來(lái),這是一個(gè)先有雞還是先有蛋的問(wèn)題,因?yàn)樗D像內(nèi)容的檢測(cè)估計(jì)和水印的區(qū)域位置是相互依賴的關(guān)系。對(duì)于有共同水印的一組圖像來(lái)說(shuō)(視頻),即W(p)相同,這將不是問(wèn)題。
?
B、多圖像匹配和重建
?
有了所有圖像中水印的檢測(cè)位置信息,我們可以真正解決 multi-image matting problem,即由J 得到 W 、α、原始圖像 I,這一部分是核心步驟,在后文的工程實(shí)現(xiàn)中我們會(huì)詳細(xì)描述我們的實(shí)現(xiàn)。
?
C、刪除新圖像中的水印
?
有了W和α,根據(jù)公式我們就可以輕松地將任意新圖像中的水印去除,當(dāng)然前提是使用了相同的 W和α。
●●●
工程實(shí)現(xiàn)
2-1 模塊框架
引擎的整體框架模塊如下:
?
如上圖所示,左側(cè)是視頻的水印檢測(cè),與谷歌的算法不盡一致,但是核心思路是一致的,仍然是對(duì)所有圖像幀進(jìn)行迭代處理,最終收斂出水印圖像的結(jié)構(gòu)。為提升運(yùn)行效率,我們未必需要將所有的視頻幀提取出來(lái),當(dāng)視頻幀數(shù)量較多時(shí),我們會(huì)進(jìn)行跨幀的提取,丟棄一些GOP,避免不必要的解碼運(yùn)算。
?
右側(cè)則是對(duì)視頻中所有的圖像進(jìn)行水印去除操作,其依賴左側(cè)模塊所計(jì)算得出的水印信息。
2-2 算法實(shí)現(xiàn)
我們選擇了一個(gè)示例視頻,展示這個(gè)過(guò)程。
?
(1)記錄圖片序列每個(gè)位置最大值和最小值,并確定每個(gè)位置的像素值范圍。由于在添加水印時(shí)的算法通常如下:
因此水印添加區(qū)的像素范圍為:
當(dāng)α值小于0.5時(shí),水印添加區(qū)的像素范圍低于127,因此標(biāo)記像素范圍小于127的區(qū)域?yàn)橛行^(qū)域
?
(2)對(duì)圖片逐幀水平垂直方向梯度進(jìn)行疊加,無(wú)水印區(qū)域是動(dòng)態(tài)區(qū)域,在空間域上梯度期望為0,即:
在水印與邊界交界處,梯度期望不為0,例如在邊界(????0,????0) ,有:
(3)針對(duì)有效區(qū)域內(nèi)的梯度圖使用Canny算子進(jìn)行運(yùn)算,初步標(biāo)記的區(qū)域如下圖所示:
?
?
(4)可以看出有部分靜態(tài)區(qū)域也被識(shí)別出紋理,由于水印區(qū)域邊界的梯度值并不穩(wěn)定,因此水印區(qū)域的邊緣梯度線呈現(xiàn)出非連續(xù)狀態(tài),可通過(guò)去除長(zhǎng)線段的方式去除非水印靜態(tài)區(qū)域邊緣梯度線段,處理后的效果如下:
?
?
(5)此時(shí)可發(fā)現(xiàn)水印區(qū)域紋理密度要遠(yuǎn)高于其它區(qū)域,對(duì)圖像進(jìn)行均值濾波,然后通過(guò)大津閾值法對(duì)圖像進(jìn)行二值化,處理后的效果如下所示:
?
(6)最后通過(guò)連通域算法和聚類算法,過(guò)濾掉不符合規(guī)定的區(qū)域,從而確定水印區(qū)域,結(jié)果如下所示:
?
?
●●●
效果展示
?
我們重新選取一個(gè)視頻,經(jīng)過(guò)我們的去水印引擎,可以自動(dòng)檢測(cè)出水印位置,并進(jìn)行去除操作,效果圖見(jiàn)下面的圖和視頻。
?
去除水印之后的視頻,如下:
?
【推薦閱讀】Android短視頻中如何實(shí)現(xiàn)720P磨皮美顏錄制
總結(jié)
以上是生活随笔為你收集整理的视频智能去水印:从数学建模到工程实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android微信视频播放填坑指南
- 下一篇: 网易云信直播sdk的整体传输优化