利用Arnold置乱二级小波分解后的低频分量,得到密文图像,求matlab代码
时间: 2024-01-24 16:16:42 浏览: 39
以下是利用Arnold置乱二级小波分解后的低频分量得到密文图像的Matlab代码:
```
% 读入原始图像
I = imread('lena.bmp');
% 进行二级小波分解
[cA,cH,cV,cD] = dwt2(I,'haar');
[cAA,cAH,cAV,cAD] = dwt2(cA,'haar');
% 对低频分量进行Arnold置乱
N = size(cAA,1);
n = input('请输入置乱次数: ');
for i=1:n
for x=1:N
for y=1:N
x1 = mod(2*x + y, N) + 1;
y1 = mod(x + y, N) + 1;
cAA(x1,y1) = cAA(x,y);
end
end
end
% 重构图像
cA = idwt2(cAA,cAH,cAV,cAD,'haar');
I = idwt2(cA,cH,cV,cD,'haar');
% 显示原始图像和密文图像
subplot(1,2,1); imshow(imread('lena.bmp'));
title('原始图像');
subplot(1,2,2); imshow(uint8(I));
title('密文图像');
```
在运行代码时,会提示输入置乱次数。根据需要进行输入即可。另外,需要注意的是,该代码只针对灰度图像,对于彩色图像需要进行通道分离和合并。
相关问题
利用Arnold置乱一级小波分解后的低频分量,得到密文图像,求matlab代码
以下是利用Arnold置乱一级小波分解后的低频分量得到密文图像的Matlab代码:
```matlab
% 读入原始图像
img = imread('lena.bmp');
% 设置Arnold置乱参数
a = 1;
b = 1;
N = 512;
% 进行Arnold置乱
for i = 1:3 % 迭代3次
img = mod(a * img + b, N);
img = imrotate(img, -90); % 逆时针旋转90度
end
% 进行小波分解
[cA, cH, cV, cD] = dwt2(img, 'haar');
% 对低频分量进行Arnold置乱
cA = mod(a * cA + b, N);
cA = imrotate(cA, -90); % 逆时针旋转90度
% 将置乱后的低频分量和其他分量合并
img_new = idwt2(cA, cH, cV, cD, 'haar');
% 显示原始图像和密文图像
figure;
subplot(1, 2, 1);
imshow(img);
title('原始图像');
subplot(1, 2, 2);
imshow(uint8(img_new));
title('密文图像');
```
需要注意的是,这段代码仅适用于灰度图像。如果要处理彩色图像,需要先将其转换为灰度图像。此外,对于不同的小波基函数,需要相应调整代码中的参数。
利用Arnold置乱一级小波分解后的低频分量,得到密文图像的matlab代码实现
以下是利用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的图像。如果要处理其他大小的图像,需要相应修改代码。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)