Loading

Matlab实现空间域水印的三种叠加方式


Matlab实现空间域水印的嵌入


 

原理

对原图空特定区域内间域灰度值(0-255)的修改,预期将会在生成水印部分形成不同灰度值的特定形状,
可通过修改水印的灰度值验证算法的实现以及性能表现。
 
 
 
 
这里可以利用这个公式来辅助理解
Xij为原图          Wij为二值水印         T是水印且存在(使用灰度水印时可调节Wij条件)

 

 

步骤

◼ Matlab 读入待嵌入图像 , 生成水印矩阵
imread
◼ Matlab读入载体图像
◼ 依次处理每一个载体图像像素,根据相应位置
水印矩阵元素完成嵌入修改
◼ Matlab保存含水印图像imwrite
 
 

创建三个函数

1.test.m

1 input.cover='C:\KC2021\images\cover.bmp';
2 input.message='C:\KC2021\images\watermark_s.bmp';
3 output.cover='D:\jj.bmp';
4 options.adapt=1;    %1替换, 2加性叠加,3乘性叠加
5 Visible_S(input, output, options);

 

2.Visible_Embed.m

 1 function mat_marked = Visible_Embed(mat_image, mat_mark, option)
 2 mat_marked = mat_image;
 3 switch option
 4    case 1%直接替换
 5      for i=1:size(mat_mark,1)
 6           for j=1:size(mat_mark,2)
 7               mat_marked(i,j) =mat_mark(i,j);
 8               if mat_mark(i,j)>0
 9                   mat_marked(i,j) = mat_image(i,j);
10               end
11           end
12       end
13    case 2%加性叠加
14         for i=1:size(mat_mark,1)
15           for j=1:size(mat_mark,2)
16               mat_marked(i,j) =mat_mark(i,j);
17               if mat_mark(i,j)>0
18                   mat_marked(i,j) = mat_image(i,j);
19                   else
20                   mat_marked(i,j) = mat_image(i,j)+30;%30为水印的参数
21                   
22               end
23           end
24       end
25    case 3%乘性叠加
26         for i=1:size(mat_mark,1)
27           for j=1:size(mat_mark,2)
28               mat_marked(i,j) =mat_mark(i,j);
29               if mat_mark(i,j)>0
30                   mat_marked(i,j) = mat_image(i,j);
31                   else
32                   mat_marked(i,j) = mat_image(i,j)*(1+10);%10为水印的参数
33               end
34           end
35       end
36     otherwise
37 end
38 end

 

 

3.Visible_S.m

 1 function Visible_S(input, output, options)
 2 %
 3 %
 4 %options.adapt自适应嵌入的方式:1替换, 2加性叠加,3乘性叠加
 5 
 6 im_c = imread(input.cover);
 7 im_w = imread(input.message);
 8 im_m = im_c;
 9 
10 if ndims(im_w)==3 %彩色图像RGB
11     im_m(:,:,1) = Visible_Embed(im_c(:,:,1),im_w(:,:,1),options.adapt);
12     im_m(:,:,2) = Visible_Embed(im_c(:,:,2),im_w(:,:,2),options.adapt);
13     im_m(:,:,3) = Visible_Embed(im_c(:,:,3),im_w(:,:,3),options.adapt);
14 else %灰度图像
15     im_m = Visible_Embed(im_c,im_w,options.adapt);
16 end
17 imwrite(im_m,output.cover);
18 end

 

 三个函数写完

 

 

 

 

 

 

原图

 

水印

 

 

直接替换结果

 

 加性叠加结果

 

 乘性叠加结果

 

posted @ 2021-08-01 09:20  adsarea  阅读(505)  评论(0)    收藏  举报