使用DFT嵌入水印的图像在旋转19度后提取出来的水印与原水印一样,是什么原因
时间: 2023-06-14 21:04:45 浏览: 53
DFT嵌入水印的算法基于图像的频域特征,旋转操作只会改变图像的空域特征,而不会改变图像的频域特征。因此,在旋转后提取的水印与原水印一样,这是因为水印嵌入后被转换到了图像的频域中,而旋转操作只会影响图像的空域特征,不会影响图像的频域特征。因此,即使旋转了图像,水印仍然可以在频域中被提取出来,因为水印的频域特征并没有改变。
相关问题
使用Arnold置乱水印后嵌入到经DFT变换后的彩色图像中频的matlab代码
以下是使用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');
使用Arnold置乱水印后嵌入到经DFT变换后的彩色图像中频相位中的matlab代码
以下是使用Arnold置乱水印后嵌入到经DFT变换后的彩色图像中频相位中的Matlab代码:
%% 读入原始图像
I = imread('lena.bmp');
I = imresize(I, [256, 256]);
%% 将图像转换为灰度图像
I_gray = rgb2gray(I);
%% 进行DFT变换
I_dft = fft2(I_gray);
%% 将DFT变换后的频率相位提取出来
I_phase = angle(I_dft);
%% 读入水印图像
W = imread('watermark.bmp');
W = imresize(W, [256, 256]);
%% 将水印图像转换为二值图像
W_bin = im2bw(W, 0.5);
%% 对水印图像进行Arnold置乱
W_scrambled = Arnold(W_bin, 10);
%% 将水印嵌入到频率相位中
alpha = 0.1;
I_phase_watermarked = I_phase + alpha * pi * double(W_scrambled);
%% 将嵌入水印后的频率相位反变换回图像
I_watermarked = ifft2(abs(I_dft) .* exp(1i * I_phase_watermarked));
%% 显示嵌入水印后的图像
figure;
imshow(I_watermarked, []);
%% 保存嵌入水印后的图像
imwrite(I_watermarked, 'watermarked_image.bmp');
%% 定义Arnold置乱函数
function [Y] = Arnold(X, N)
% X: 输入矩阵
% N: 置乱次数
% Y: 输出矩阵
% 获取输入矩阵的大小
[M, N] = size(X);
% 定义置乱矩阵
P = [1, 1; 1, 2];
% 进行置乱操作
for k = 1:N
for i = 1:M
for j = 1:N
% 计算置乱后的坐标
idx = mod(P * [i; j], [M, N]) + 1;
% 将置乱后的像素放入输出矩阵中
Y(idx(1), idx(2)) = X(i, j);
end
end
% 将输出矩阵作为下一次置乱的输入矩阵
X = Y;
end
end
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)