揭祕版權保護下的視訊隱形水印演算法(下篇)
視訊水印,作為保護智慧財產權的重要手段 ,早已被大眾習慣且接受,但是這種方法仍然存在著多方面的不足。對於觀眾來說,蓋在畫面一角的logo多少會影響到他們的觀賞體驗。對於視訊所有者來說,這種直接顯示在畫面上的水印也很容易被定位和攻擊。一些廠家為了應對這些攻擊,將水印時不時地從隨機的方向插入到畫面裡,從而增加delogo的難度,但這就更進一步降低了觀眾的觀看體驗。
針對這些問題, 隱形水印這門技術被提出並逐漸發展了起來 。在《 視訊隱形水印演算法(上篇) 》中,我們給大家介紹了封裝層以及基於LSB的隱形水印技術。這些方法雖然運算量較低,易於實現,但新增的水印也比較脆弱。比起保護知識版權,它們更多地被應用於隱藏資料或傳輸附屬資訊。接下來, 本文將介紹一些在變換域上操作的隱形水印演算法,它們能夠更好地應對各類攻擊 。
在閱讀本文前可能需要一些前置知識,包括 離散餘弦變換(DCT) , 離散小波變換(DWT) 以及 奇異值分解(SVD) 等等。若你對這些內容感到陌生,可以瀏覽以下幾個知乎專欄文章連結大致瞭解一下:
-
詳解離散餘弦變換(DCT):https://zhuanlan.zhihu.com/p/85299446
-
形象易懂講解演算法I——小波變換:https://zhuanlan.zhihu.com/p/22450818
-
奇異值分解(SVD): https://zhuanlan.zhihu.com/p/29846048
01
DCT隱形水印
基於DCT的隱形水印是一類很常見的隱形水印演算法,選擇DCT的原因有很多。
一是人眼對影象中不同頻率的訊號敏感程度不同,直接在頻率域上操作資料有利於控制主觀感知到的失真程度,以保證水印的“隱形”。
二是不同頻率的訊號穩定性不同,在頻率域加水印有助於控制水印的魯棒性,保證水印在載體經歷各類損傷後依然能夠還原出來。三是理論上這類方法可以直接嵌入一些編碼器,從而減少運算量。
但需要注意的是,上述一二兩點其實是有矛盾的, 水印資料所屬的頻率範圍越 低,魯棒性越高,但影象失真也越大,反之亦然 。因此大部分實現會選擇在中頻範圍內新增水印。
下圖是一個常見的水印嵌入流程。影象經過DCT變換後,把水印資料加到選好的頻率係數上,再使用IDCT還原影象,這樣水印的嵌入就完成了。
常見的基於DCT的水印嵌入流程
如果在提取水印時有原始影象作為參考,則圖中的嵌入邏輯一般有如下幾種選擇。式中v i 表 示 原始係數,xi表示水印係數,α為 常量 。
有參時的 水印嵌入公式
對應的水印提取流程
如果沒有原始影象做參考,那麼可以參考上篇的LSB方法,在嵌入時將原始係數以低精度形式量化,再將水印資料儲存在高精度的區域中。
02
DWT與SVD
上文有提到隱形水印演算法需要同時 滿足低視覺損失和高魯棒性 。能達到這個效果的工具不止DCT,DWT和SVD也是兩個常見的選擇。
其中DWT一般使用Haar小波,其運算量較低,可以將影象分解成不同頻帶的四份,並且可以遞迴地執行多次,顯著減少後續需要處理的資料量。因此它常被用來做隱形水印的預處理。 而 SVD則是將影象資料單純地視為二維矩陣,利用奇異值的穩定性來保護水印。
下圖是一個結合DWT和SVD的隱形水印例子。 圖中雖然僅進行了一輪DWT,並選擇了LL低頻資料進行處理。 但實際上也存在使用多輪DWT,以及利用LH和HL資料做SVD的實現。 它們對應的水印提取流程也只是個逆過程,這裡就不再貼圖了。
基於DWT與SVD的水印嵌入例子
03
萬事皆可機器學習
為了進一步提升效果,一些研究者們也跟著流行的腳步,嘗試使用機器學習的方法實現隱形水印。例如筆者撰寫此文時參考的Python開源庫invisible-watermark[2]中,就有 一種機器學習實現,名叫RivaGAN 。其框架如下圖所示。Attention模組根據原始影象推匯出目標資料的分佈Attention Mask,Encoder模組再利用這個資料將水印資料D嵌入視訊中。RivaGan在訓練過程中分別使用了一個Critic網路評估畫面失真和一個Adversary網路模擬主動攻擊,並且增加了人工設計的Noise網路模擬常見的傳輸失真(包括縮放、裁剪、有失真壓縮),以期同時在畫面失真和魯棒性方面得到較好的結果。
RivaGAN的水印處理流程
04
水印的混淆與加密
使用隱形水印時一般需要公開演算法,畢竟沒有人信任一個黑盒子的提取結果。但公開後,再複雜的水印嵌入方法都有被攻擊者提取、抹除甚至替換可能性。為了防止這種情況,在嵌入水印時,往往會對水印資料本身或者嵌入的座標資訊進行混淆加密,通過key的形式管理。這樣一來,只要攻擊者沒有金鑰,即便他們已經知道水印的嵌入方式,也沒辦法探測出原有的水印資料。
完整的隱形水印系統
05
總結
本文簡單介紹了隱形水印的頻域方法和機器學習方法。由於這半篇內容涉及到了一些專業知識,無法像上篇那樣詳細地解釋原理和細節。若讀者對省略的部分感興趣,除了相關論文,閱讀Python的invisibal-watermak庫原始碼也是一個不錯的選擇,它實現了三種水印嵌入方案,本文提到的幾種變換都有用到。
參考文獻
[1] I.J. Cox, J. Kilian, F.T. Leighton, T. Shamoon. Secure spread spectrum watermarking for multimedia. 1997.
[2] https://github.com/ShieldMnt/invisible-watermark
[3] Zhang, Kevin Alex and Xu, Lei and Cuesta-Infante, Alfredo and Veeramachaneni, Kalyan. Robust Invisible Video Watermarking with Attention. MIT EECS, September 2019.
[4] C.I. Podilchuk, E.J. Delp. Digital watermarking: algorithms and applications. 2001.
- 音視訊進階教程-實現直播間的自定義視訊渲染
- 音視訊開發進階|第六講:色彩和色彩空間·上篇
- H264 視訊檔案如何縮放解析度?
- 星球專享 | 播放器 FFmpeg 依賴庫的配置
- 乾貨收藏 || Vulkan Game Engine 視訊教程
- HDR技術趨勢淺析
- WebRTC 實現 Android 傳屏 demo
- 技術群裡如何提問才能獲得更高的回覆率呢?
- 【建議收藏】30 分鐘入門 Vulkan (中文翻譯版)
- 淺談音視訊自動化測試
- 揭祕版權保護下的視訊隱形水印演算法(下篇)
- 如何用研發效能搞垮一個團隊
- 如何實現H.264的實時傳輸?
- 短視訊中解決音視訊混音出現雜音的問題
- 位元組跳動招聘:30-60k 不限工作經驗!什麼崗位這麼香?
- 進擊的斜槓程式設計師 | 音視訊技術內容變現
- 面試官:RecyclerView佈局動畫原理了解嗎?
- 音視訊開發進階-學習筆記3-使用LAME編碼mp3檔案
- 音視訊開發進階-學習筆記2-LAME交叉編譯
- 網際網路寒冬之下,Android開發的港灣:音視訊進階學習