利用Arnold置乱一级小波分解后的低频分量,得到密文图像的matlab代码实现
时间: 2024-05-07 07:22:00 浏览: 124
以下是利用Arnold置乱一级小波分解后的低频分量,得到密文图像的MATLAB代码实现:
```matlab
% 读入原始图像
img = imread('lena.png');
% 将图像转为灰度图
img_gray = rgb2gray(img);
% 将灰度图像像素值归一化至[0,1]
img_gray = double(img_gray) / 255;
% 显示原始图像
subplot(2,2,1);imshow(img_gray);title('原始图像');
% 进行一级小波分解
[cA,cH,cV,cD] = dwt2(img_gray, 'haar');
% 对低频分量进行Arnold置乱
N = 512; % 图像大小
iter = 30; % 置乱迭代次数
for i = 1 : iter
for y = 1 : N
for x = 1 : N
% 计算Arnold置乱后的坐标
new_x = mod(2*x + y, N);
new_y = mod(x + y, N);
% 将像素值复制到新坐标位置
cA(new_x+1, new_y+1) = cA(x+1, y+1);
end
end
end
% 将置乱后的低频分量与高频分量合并,重构密文图像
img_crypt = idwt2(cA, cH, cV, cD, 'haar');
% 显示密文图像
subplot(2,2,2);imshow(img_crypt);title('密文图像');
% 对密文图像进行解密
% 进行一级小波分解
[cA,cH,cV,cD] = dwt2(img_crypt, 'haar');
% 对低频分量进行Arnold置乱,逆向置乱
for i = 1 : iter
for y = 1 : N
for x = 1 : N
% 计算逆向Arnold置乱后的坐标
old_x = mod(y - x, N);
old_y = mod(x - 2*old_x, N);
% 将像素值复制到新坐标位置
cA(old_x+1, old_y+1) = cA(x+1, y+1);
end
end
end
% 将逆向置乱后的低频分量与高频分量合并,重构解密后的图像
img_decrypt = idwt2(cA, cH, cV, cD, 'haar');
% 显示解密后的图像
subplot(2,2,3);imshow(img_decrypt);title('解密后的图像');
```
请注意,此代码仅适用于大小为512x512的图像。如果要处理其他大小的图像,需要相应修改代码。
阅读全文