基於FPGA視頻圖像水印的實現

基於FPGA視頻圖像水印的實現

1 背景知識

日常生活中我們經常見到數字圖像水印的存在。例如圖1所示。數字圖像水印在日常生活中也起到非常重要的作用。它們以各種方法來保護所有者的權益,包括:
1.版權識別;
2.著作權認定;
3.複製保護。
在這裏插入圖片描述

圖1 數字圖像水印

數字圖像的水印疊加公式爲:
在這裏插入圖片描述-------------------------------(1)
如公式1所示,未加水印的圖像表示爲f水印表示爲w,常數a控制水印和襯底圖像的相對可見性。如果a爲1,則水印是不透明的,並且襯底圖像完全是暗的;隨着a接近0,會逐漸看到更多的襯底圖像和更少的水印。通常a在0和1之間。如圖2所示,a爲數字水印,b圖像中a=0.3,c圖像中是已加水印的b和原圖f的差值。

在這裏插入圖片描述

圖2 一個簡單的可見水印

2 數字圖像水印的FPGA實現

在這裏插入圖片描述

圖3 視頻圖像的數字圖像水印的FPGA實現流程圖

我們要在視頻圖像採集系統終端顯示一個五角星水印:

1)水印的製作

如圖4所示,我們使用畫圖工具來製作一個圖案。
在這裏插入圖片描述

圖4 紅色五角星水印圖

2)rom文件的生成

如圖5所示,我們使用BMP2MIF工具生成.mif文件。
在這裏插入圖片描述

圖5 BMP2MIF工具

3)FPGA watermark源碼:

/*
Module name:  watermark.v
Description:            
Data:         2018/06/08
Engineer:     
e-mail:       [email protected]
*/

module watermark(
         input clk,
		 input rst_n,
		 
		 input        TFT_VS,
		 input        TFT_DE,
		 input [11:0] hcount,
         input [11:0] vcount,
		 
		 input  [15:0] rgb,
		 output reg [15:0] watermark_data
		 
		 );
		 
reg          rd_rom;
reg	[14:0] rom_address;
wire  [15:0] rom_data;
	
always @(posedge TFT_VCLK or negedge rst_n) begin
  if(!rst_n)
    watermark_data <= 16'b0;
  else if((hcount>100 && hcount<201) && (vcount>100 && vcount<151))
    watermark_data <= rom_data;
  else
    watermark_data <= rgb;
end

always @(posedge TFT_VCLK or negedge rst_n) begin
  if(!rst_n)
    rom_address <= 15'b0;
  else if(TFT_VS)
    if((hcount>100 && hcount<201) && (vcount>100 && vcount<151))
	   rom_address <= rom_address + 1'b1;
	 else
	   rom_address <= rom_address;
  else
    rom_address <= 15'b0;
end
	
star_rom u_star_rom(
	      .address(rom_address),
	      .clock(TFT_VCLK),
	      .q(rom_data)
			);
endmodule 

4)圖像水印的實現

我們分別取了a =1 和 a = 0.5兩種效果。
在這裏插入圖片描述

圖6 未加水印的圖像

在這裏插入圖片描述

圖7 加了水印的圖像(a = 0.5)

在這裏插入圖片描述

圖8 加了水印的圖像(a = 1)

歡迎關注微信公衆號:FPGA開源工作室
獲取更多學習資料。
FPGA開源工作室

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章