用matlab检测提取出的水印图像与原水印图像鲁棒性与相似度和psnr等值的代码
时间: 2023-12-12 12:03:28 浏览: 79
以下是用MATLAB计算提取的水印图像与原水印图像鲁棒性、相似度和PSNR的代码:
```matlab
% 读取原始图像和提取的水印图像
original_image = imread('original_image.png');
watermark_image = imread('watermark_image.png');
% 计算鲁棒性
robustness = sum(sum(original_image ~= watermark_image)) / (size(original_image,1) * size(original_image,2));
% 计算相似度
similarity = corr2(original_image, watermark_image);
% 计算PSNR
mse = mean(mean((double(original_image) - double(watermark_image)).^2));
max_value = max(max(original_image));
psnr = 10 * log10((max_value^2) / mse);
% 输出结果
fprintf('Robustness: %f\n', robustness);
fprintf('Similarity: %f\n', similarity);
fprintf('PSNR: %f\n', psnr);
```
其中,`original_image`和`watermark_image`分别为原始图像和提取的水印图像,文件名需要根据实际情况修改。`robustness`表示鲁棒性,计算方法为原始图像和提取的水印图像不同的像素数占总像素数的比例。`similarity`表示相似度,计算方法为原始图像和提取的水印图像的相关系数。`psnr`表示PSNR值,计算方法为原始图像和提取的水印图像的均方误差(MSE)和最大像素值之间的比值。
需要注意的是,计算PSNR时需要将图像转换为double类型进行计算,否则计算结果可能不准确。
阅读全文