【图像隐藏】基于离散小波变换实现数字水印嵌入提取,含NC附Matlab代码

% 原始图像和水印图像
original_image = imread(‘lena.jpg’);
watermark_image = imread(‘watermark.png’);

% 离散小波变换
[cA, cH, cV, cD] = dwt2(original_image, ‘db4’);

% 水印嵌入
alpha = 0.1; % 嵌入强度因子
watermarked_cH = cH + alpha * watermark_image;
watermarked_image = idwt2(cA, watermarked_cH, cV, cD, ‘db4’);

% 水印提取
extracted_watermark = (watermarked_image - original_image) / alpha;

% 计算归一化相关系数(NC)
nc = normxcorr2(watermark_image, extracted_watermark);
nc = nc(size(watermark_image,1):end-size(watermark_image,1)+1, …
size(watermark_image,2):end-size(watermark_image,2)+1);

% 显示结果
figure;
subplot(1,3,1);
imshow(original_image);
title(‘原始图像’);
subplot(1,3,2);
imshow(watermarked_image);
title(‘嵌入水印后的图像’);
subplot(1,3,3);
imshow(extracted_watermark);
title(‘提取的水印’);

disp(['水印与原水印的归一化相关系数(NC): ', num2str(nc)]);
主要步骤如下:

读取原始图像和水印图像。
对原始图像进行离散小波变换,得到各个子带系数。
在高频子带系数(cH)中嵌入水印图像,并通过逆小波变换得到含水印的图像。
从含水印的图像中提取水印,并计算与原水印的归一化相关系数(NC)。
显示原始图像、含水印的图像和提取的水印。
NC值越接近于1,表示提取的水印与原水印的相似度越高,水印嵌入效果越好。一般情况下,NC > 0.75 可以认为水印提取成功。

在实际应用中,您可以根据需要调整嵌入强度因子alpha,以平衡水印不可见性和鲁棒性。您还可以尝试使用其他小波基函数,或者采用更复杂的水印嵌入和提取算法,如基于奇异值分解的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值