使用Arnold置乱水印后嵌入到经DFT变换后的彩色图像中频的matlab代码
时间: 2024-06-11 21:07:54 浏览: 111
以下是使用Arnold置乱水印后嵌入到经DFT变换后的彩色图像中频的Matlab代码示例:
% 读取彩色图像
img = imread('lena.png');
% 将彩色图像转为灰度图像
img_gray = rgb2gray(img);
% 对灰度图像进行DFT变换
dft_img = fft2(img_gray);
% 生成水印图像
watermark = randi([0 1], size(dft_img));
% 对水印图像进行Arnold置乱
N = size(watermark, 1);
a = 3;
b = 5;
for i=1:8
watermark = mod(a*watermark+b, N);
end
% 将水印图像嵌入到DFT变换后的图像中频
alpha = 0.5; % 嵌入强度
dft_watermarked = dft_img + alpha * watermark;
% 对嵌入水印后的DFT变换图像进行逆DFT变换
watermarked_img = ifft2(dft_watermarked);
% 显示原始图像和嵌入水印后的图像
figure;
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(real(watermarked_img), []);
title('Watermarked Image');
% 提取水印图像
extracted_watermark = (abs(dft_watermarked - dft_img) > alpha/2);
% 对提取出的水印图像进行Arnold置乱
for i=1:8
extracted_watermark = mod(inv(a)*(extracted_watermark-b), N);
end
% 显示提取出的水印图像
figure;
imshow(extracted_watermark, []);
title('Extracted Watermark');
阅读全文