%利用Logistic混沌映射,对灰度图像进行序列加密 picture=imread('C:\Users\AAA\Desktop\hui\LENA.bmp'); figure(1);subplot(1,3,1); imshow(picture); title('明文'); [M,N]=size(picture); x=0.1; u=4; %迭代200次,达到充分混沌状态 for i=1:200 x=u*x*(1-x); end %产生一维混沌加密序列 A=zeros(1,M*N);%生成1*MN的零矩阵 A(1)=x; %生成混沌序列 for i=1:M*N-1 A(i+1)=u*A(i)*(1-A(i)); end %归一化序列 B=uint8(255*A);%转换为255数据类型 %转化为二维混沌加密序列 Imgn=reshape(B,M,N);%reshape就是把指定的矩阵改变形状,但是元素个数不变;这里将B转换为M行,N列 Rod=bitxor(picture,Imgn);%异或操作加密 figure(1);subplot(1,3,2); imshow(Rod); title('密文'); %解密 Picturej=bitxor(Rod,Imgn);%异或操作解密 figure(1);subplot(1,3,3); imshow(Picturej); title('解密图像'); %绘制明文和密文的直方图 figure(2);subplot(1,2,1); imhist(picture);title('明文直方图'); figure(2);subplot(1,2,2) imhist(Rod);title('密文直方图');
时间: 2023-09-06 22:09:41 浏览: 116
根据您提供的代码,可能出现 `bitxor` 使用错误的问题是由于 `picture` 和 `Imgn` 的类型不同所导致的。`imread` 函数默认读取的图像是 `uint8` 类型的,而 `Imgn` 是通过归一化后转换为 `uint8` 类型的混沌序列。因此,在进行 `bitxor` 操作时,需要将 `picture` 强制转换为 `uint8` 类型,即:
```
Rod = bitxor(picture, uint8(Imgn));
```
同样地,在解密时,也需要将 `Imgn` 转换为 `uint8` 类型,即:
```
Picturej = bitxor(Rod, uint8(Imgn));
```
此外,需要注意的是,在进行 `bitxor` 操作时,两个输入矩阵的大小必须相同,因此需要保证 `picture` 和 `Imgn` 的大小相同。
阅读全文