基於FPGA視頻圖像水印的實現
1 背景知識
日常生活中我們經常見到數字圖像水印的存在。例如圖1所示。數字圖像水印在日常生活中也起到非常重要的作用。它們以各種方法來保護所有者的權益,包括:
1.版權識別;
2.著作權認定;
3.複製保護。
數字圖像的水印疊加公式爲:
-------------------------------(1)
如公式1所示,未加水印的圖像表示爲f水印表示爲w,常數a控制水印和襯底圖像的相對可見性。如果a爲1,則水印是不透明的,並且襯底圖像完全是暗的;隨着a接近0,會逐漸看到更多的襯底圖像和更少的水印。通常a在0和1之間。如圖2所示,a爲數字水印,b圖像中a=0.3,c圖像中是已加水印的b和原圖f的差值。
2 數字圖像水印的FPGA實現
我們要在視頻圖像採集系統終端顯示一個五角星水印:
1)水印的製作
如圖4所示,我們使用畫圖工具來製作一個圖案。
2)rom文件的生成
如圖5所示,我們使用BMP2MIF工具生成.mif文件。
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兩種效果。
歡迎關注微信公衆號:FPGA開源工作室
獲取更多學習資料。