【導讀】本文是專欄《計算機視覺40例簡介》的第3個案例《數字水印》。該專欄簡要介紹李立宗主編《計算機視覺40例——從入門到深度學習(OpenCV-Python)》一書的40個案例。 目前,該書已經在電子工業出版社出版,大家可以在京東、淘寶、當當等平台購買。 大家可以在公衆号“計算機視覺之光”回複關鍵字【案例03】擷取本文案例的源代碼及使用的測試圖檔等資料。 針對本書40個案例的每一個案例,分别錄制了介紹視訊。如果嫌看文字版麻煩,可以關注公衆号“計算機視覺之光”直接觀看視訊介紹版。 |
數字水印是指在一幅圖像中嵌入另外一幅圖像,其中的圖像包含:
- 載體圖像O:相當于容器,要用來裝另外一幅圖像的;
- 水印圖像W:要被嵌入到其他圖像中的圖像,通常是版權資訊、秘密資訊等需要被隐藏額資訊;
- 含水印載體圖像OW:被嵌入了水印圖像的載體圖像;
- 删除水印圖像後的載體圖像OE:從含水印載體圖像OW中删除水印後得到的圖像;
- 提取得到的水印圖像EW:從含水印載體圖像OW中提取到的水印圖像,該圖像與水印圖像W一緻。
數字水印的基本示意圖如圖1所示。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM2UjNyMDMhVWO2UTMiljZyYzXwEzNzATM1EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
圖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)中提取資訊:
- 如果圖(e)中的數值是偶數,則提取“0”;
- 如果圖(e)中的數值是奇數,則提取“1”;
提取結果如圖(f)所示,從圖中可以看到,準确地将數值1的圖像提取出來了。
圖2 算法原理
在書中詳細介紹了算法原理和流程,具體如下圖所示。
圖3 資訊隐藏流程圖
圖4 數字水印實作方法
圖5 具體實作流程