水印嵌入乘性嵌入代码matlab
时间: 2023-06-26 19:10:07 浏览: 37
以下是一个基于乘性嵌入算法的水印嵌入Matlab代码示例:
```
%原始图像
I = imread('lena.tif');
I = imresize(I,0.5);
I = double(I)/255;
%水印图像
M = imread('watermark.png');
M = imresize(M,[32 32]);
M = double(M)/255;
%设置参数
alpha = 0.05;
K = 3;
%乘性嵌入算法
Iw = I;
for i = 1:size(I,1)
for j = 1:size(I,2)
w = M(mod(i-1,32)+1,mod(j-1,32)+1);
a = I(i,j);
b = round(a/alpha)*alpha;
d = a-b;
if abs(d) < alpha/2
if d >= 0
Iw(i,j) = b + alpha/2 + K*w;
else
Iw(i,j) = b - alpha/2 + K*w;
end
else
Iw(i,j) = a + K*w;
end
end
end
%显示结果
subplot(1,2,1);
imshow(I)
title('原始图像');
subplot(1,2,2);
imshow(Iw)
title('嵌入水印后的图像');
```
该代码中使用了lena.tif作为原始图像,watermark.png作为水印图像。alpha和K是算法的参数,需要根据具体情况进行调整。乘性嵌入算法的流程为:对每个像素进行处理,将其分解为一个整数和一个小数部分,然后根据水印像素的值对小数部分进行调整,最后将整数部分和调整后的小数部分合并得到嵌入水印后的像素值。