数字水印实验报告 王菲飞 根据数字水印的嵌入方式一般分为空间域和变换域方法两大类,前者通过改变某些像素的灰度值,后者则是通过改变图像变换域的一些系数值来隐藏信息。DCT 变换域数字水印是目前研究最多的一种数字水印,它具有鲁棒性强、隐蔽性好的特点。其主要思想是水印信号应该嵌入在频谱空间源数据中人类感觉最重要的部分,这种重要部分就是低频分量。本文主要研究 DCT 变换域数字水印技术。 实验过程: 使用图像:lena.bmp,8 位灰度,尺寸为 256*256。 嵌入的水印图像:w atermark.bmp,二值图像,32*32 根据资料,在数字水印系统中有两种常用的嵌入公式,分别为加性嵌入和乘性嵌入方式 'iiiVVW '(1)iiiVVW 其中,iV ,'iV 分别代表载体图像和嵌入水印的图像像素;iW 为水印信号分量,0ik ; 为嵌入强度因子。为了保证在水印不可见的前提下,尽可能的提高嵌入水印的强度, 取值的选择必须考虑嵌入载体的性质和视觉系统的特性。本实验选用后者——乘性嵌入。 1、 嵌入水印,提取水印 M 文件如下,定义 w atermark 函数 function [result]=watermark( input, Alpha ) infile = imread(input); [sizeX,sizeY,bitplane] = size(infile); block = 8; block_X_num = sizeX / block; block_Y_num = sizeY / block; D1 = zeros(sizeX,sizeY); infile_gray = rgb2gray(infile); subplot(2,3,1);imshow(infile_gray);title('Original image'); mark=imread('wang.tif'); subplot(2,3,2);imshow(mark);title('Watermark'); for m = 1 : block_X_num for n = 1 : block_Y_num x = (m - 1) * block + 1; y = (n - 1) * block + 1; dct_block1 = infile_gray(x:x+block-1,y:y+block-1); dct_block1 = dct2(dct_block1); dct_block1(1,1) = dct_block1(1,1) * (1 + Alpha * mark(m,n)); dct_block1 = idct2(dct_block1); D1(x:x+block-1,y:y+block-1) = dct_block1; end end subplot(2,3,3);imshow(D1,[]);title('vi" = vi * (1 + a * xi)'); result=D1; end 提取水印代码 function [ result ] = exactwatermark(bfile,lfile) [sizeX,sizeY] = size(bfile); block = 8; block_X_num = sizeX / block; block_Y_num = sizeY / block; result=zeros(block_X_num,block_Y_num...