水印嵌入算法加性嵌入的matlab代码
时间: 2023-09-03 07:08:13 浏览: 39
以下是一个简单的加性水印嵌入算法的Matlab代码示例:
```matlab
% 读取原始图像
I = imread('lena.png');
imshow(I);
title('原始图像');
% 生成水印图像
W = randi([0,1], size(I,1), size(I,2));
imshow(W);
title('水印图像');
% 设置嵌入强度
alpha = 0.1;
% 计算加性水印嵌入
I_wm = I + alpha*W;
% 显示加入水印后的图像
imshow(I_wm);
title('加入水印后的图像');
% 保存加入水印后的图像
imwrite(I_wm, 'lena_wm.png');
```
这个代码使用了一个简单的加性水印嵌入算法:将随机生成的二进制水印图像与原始图像相加,然后乘以一个嵌入强度因子。在这个示例中,我们使用了 Lena 图像和一个随机生成的与 Lena 图像相同大小的二进制水印图像。您可以根据需要修改此代码来使用您自己的图像和水印图像。
相关问题
水印嵌入算法乘性嵌入的matlab代码
以下是乘性水印嵌入算法的 MATLAB 代码示例:
```matlab
% 读入原始图像
I = imread('lena.bmp');
% 显示原始图像
imshow(I);
% 将图像转换为灰度图像
I = rgb2gray(I);
% 将图像转换为双精度型
I = im2double(I);
% 设置水印图像
W = imread('watermark.bmp');
% 将水印图像转换为灰度图像
W = rgb2gray(W);
% 将水印图像转换为二值图像(0或1)
W = imbinarize(W, 0.5);
% 获取原始图像的尺寸
[m, n] = size(I);
% 获取水印图像的尺寸
[wm, wn] = size(W);
% 将水印图像缩放到与原始图像相同的尺寸
W = imresize(W, [m, n]);
% 设置水印强度
alpha = 0.1;
% 计算嵌入系数
beta = alpha / (1 - alpha);
% 生成小波变换矩阵
[Lo_D, Hi_D, Lo_R, Hi_R] = wfilters('haar');
[H, V, D] = dwt2(I, Lo_D, Hi_D, Lo_R, Hi_R);
% 嵌入水印
for i = 1:m
for j = 1:n
H(i, j) = H(i, j) + beta * W(i, j) * D(i, j);
end
end
% 进行逆小波变换
J = idwt2(H, V, D, Lo_R, Hi_R, Lo_D, Hi_D);
% 显示嵌入水印后的图像
imshow(J);
% 保存嵌入水印后的图像
imwrite(J, 'watermarked.bmp');
```
以上代码实现了乘性水印嵌入算法。该算法的基本思想是,在小波域中对原始图像进行分解,并将水印嵌入到高频子带中,然后再将分解后的图像进行逆小波变换,得到嵌入水印后的图像。其中,嵌入系数是根据水印强度计算得到的。
水印嵌入乘性嵌入代码matlab
以下是一个基于乘性嵌入算法的水印嵌入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是算法的参数,需要根据具体情况进行调整。乘性嵌入算法的流程为:对每个像素进行处理,将其分解为一个整数和一个小数部分,然后根据水印像素的值对小数部分进行调整,最后将整数部分和调整后的小数部分合并得到嵌入水印后的像素值。