水印嵌入算法乘性嵌入的matlab代码
时间: 2023-09-03 16:10:39 浏览: 89
利用matlab实现水印嵌入的源码
4星 · 用户满意度95%
以下是乘性水印嵌入算法的 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');
```
以上代码实现了乘性水印嵌入算法。该算法的基本思想是,在小波域中对原始图像进行分解,并将水印嵌入到高频子带中,然后再将分解后的图像进行逆小波变换,得到嵌入水印后的图像。其中,嵌入系数是根据水印强度计算得到的。
阅读全文