天天看點

【計算機視覺40例】案例03:數字水印

【導讀】本文是專欄《計算機視覺40例簡介》的第3個案例《數字水印》。該專欄簡要介紹李立宗主編《計算機視覺40例——從入門到深度學習(OpenCV-Python)》一書的40個案例。

目前,該書已經在電子工業出版社出版,大家可以在京東、淘寶、當當等平台購買。

大家可以在公衆号“計算機視覺之光”回複關鍵字【案例03】擷取本文案例的源代碼及使用的測試圖檔等資料。

針對本書40個案例的每一個案例,分别錄制了介紹視訊。如果嫌看文字版麻煩,可以關注公衆号“計算機視覺之光”直接觀看視訊介紹版。

數字水印是指在一幅圖像中嵌入另外一幅圖像,其中的圖像包含:

  1. 載體圖像O:相當于容器,要用來裝另外一幅圖像的;
  2. 水印圖像W:要被嵌入到其他圖像中的圖像,通常是版權資訊、秘密資訊等需要被隐藏額資訊;
  3. 含水印載體圖像OW:被嵌入了水印圖像的載體圖像;
  4. 删除水印圖像後的載體圖像OE:從含水印載體圖像OW中删除水印後得到的圖像;
  5. 提取得到的水印圖像EW:從含水印載體圖像OW中提取到的水印圖像,該圖像與水印圖像W一緻。

數字水印的基本示意圖如圖1所示。

【計算機視覺40例】案例03:數字水印

  圖1 數字水印

圖2展示了數字水印(資訊隐藏)的嵌入過程和提取過程。

數字水印中嵌入過程的具體步驟:

第1步:從圖(a)中選擇一塊區域如圖(b)所示。

第2步:在圖(b)中,選取一塊區域作為數值1的前景,如圖中白色區域所示。

第3步:将圖(b)中,數值1的前景(對應圖中白色區域),所有的數值調整為“等于自身值、或比自身值大1”的奇數;數值1的背景(陰影部分)所有數值調整為“等于自身,或比自身值小1”的偶數,得到如圖(c)所示的結果。

第4步:将處理後的圖像(c),替換原圖像(a)内該部分原有值,完成數值1的嵌入,得到圖像(d)。

提取嵌入的資訊時,從圖(d)中提取結果,具體為:

第1步:從圖(d)中選擇包含數值1的區域,得到該部分的數值,如圖(e)所示。

第2步:從圖像(e)中提取資訊:

  1. 如果圖(e)中的數值是偶數,則提取“0”;
  2. 如果圖(e)中的數值是奇數,則提取“1”;

提取結果如圖(f)所示,從圖中可以看到,準确地将數值1的圖像提取出來了。

【計算機視覺40例】案例03:數字水印

 圖2 算法原理

在書中詳細介紹了算法原理和流程,具體如下圖所示。

【計算機視覺40例】案例03:數字水印

圖3 資訊隐藏流程圖

【計算機視覺40例】案例03:數字水印

 圖4 數字水印實作方法

【計算機視覺40例】案例03:數字水印

 圖5 具體實作流程

繼續閱讀