Image 彩色图像像素排列不可逆

Image 彩色图像像素排列不可逆,image,matlab,image-processing,encryption,permutation,Image,Matlab,Image Processing,Encryption,Permutation,我对RGB图像使用2D正弦映射执行彩色图像置换。代码使用此贴图为图像中的每个RGB通道执行像素位置置换。然后,我使用具有相同初始参数的相同映射来反转排列。问题是代码仅对一个通道执行正确的反向置换,而其他通道则无法恢复。请参阅所附的已置换图像和已恢复图像的图像 它不起作用,因为您在加密阶段重写了K,并且每个通道的解密都不同,因此解密只在创建K的最后一个通道中正常工作。如果您使用的是MATLAB编辑器,那么您应该注意mlint警告(右上角的正方形应始终为绿色)-您可以说这就是问题的答案 以下是脚

我对RGB图像使用2D正弦映射执行彩色图像置换。代码使用此贴图为图像中的每个RGB通道执行像素位置置换。然后,我使用具有相同初始参数的相同映射来反转排列。问题是代码仅对一个通道执行正确的反向置换,而其他通道则无法恢复。请参阅所附的已置换图像和已恢复图像的图像


它不起作用,因为您在加密阶段重写了
K
,并且每个通道的解密都不同,因此解密只在创建
K
的最后一个通道中正常工作。如果您使用的是MATLAB编辑器,那么您应该注意mlint警告(右上角的正方形应始终为绿色)-您可以说这就是问题的答案

以下是脚本第一部分的固定版本:

function q50823167
%% 1. Load plaintext images
% Image 1
I = imread(fullfile(matlabroot, 'examples', 'wavelet', 'mandrill.jpg'));
Ir = I(:,:,1);
Ig = I(:,:,2);
Ib = I(:,:,3);
%% 2. Encryption
%[CI,K] = Logistic2D_ImageCipher(I,'encryption');
[CIb,Kb] = Logistic2D_ImageCipher(Ib,'encryption');
[CIr,Kr] = Logistic2D_ImageCipher(Ir,'encryption');
[CIg,Kg] = Logistic2D_ImageCipher(Ig,'encryption');

CI = cat(3,CIr,CIg,CIb);
%% 3. Decryption
%DI = Logistic2D_ImageCipher(CI,'decryption',K);
DIb = Logistic2D_ImageCipher(CIb,'decryption',Kb);
DIg = Logistic2D_ImageCipher(CIg,'decryption',Kg);
DIr = Logistic2D_ImageCipher(CIr,'decryption',Kr);
DI = cat(3,DIr,DIg,DIb);
%% 4. Analaysis
% Histogram
%title('aaa');
figure,subplot(221),imshow(I,[]),subplot(222),imshow(CI,[])
subplot(223),imhist(I),subplot(224),imhist(CI)
title('aaa2');
figure,subplot(221),imshow(DI,[])

请注意,您不必每次都清除变量。

非常感谢您花时间更正代码,非常感谢。不客气!您发布了一个完全可运行的示例,这很有帮助。:)
function q50823167
%% 1. Load plaintext images
% Image 1
I = imread(fullfile(matlabroot, 'examples', 'wavelet', 'mandrill.jpg'));
Ir = I(:,:,1);
Ig = I(:,:,2);
Ib = I(:,:,3);
%% 2. Encryption
%[CI,K] = Logistic2D_ImageCipher(I,'encryption');
[CIb,Kb] = Logistic2D_ImageCipher(Ib,'encryption');
[CIr,Kr] = Logistic2D_ImageCipher(Ir,'encryption');
[CIg,Kg] = Logistic2D_ImageCipher(Ig,'encryption');

CI = cat(3,CIr,CIg,CIb);
%% 3. Decryption
%DI = Logistic2D_ImageCipher(CI,'decryption',K);
DIb = Logistic2D_ImageCipher(CIb,'decryption',Kb);
DIg = Logistic2D_ImageCipher(CIg,'decryption',Kg);
DIr = Logistic2D_ImageCipher(CIr,'decryption',Kr);
DI = cat(3,DIr,DIg,DIb);
%% 4. Analaysis
% Histogram
%title('aaa');
figure,subplot(221),imshow(I,[]),subplot(222),imshow(CI,[])
subplot(223),imhist(I),subplot(224),imhist(CI)
title('aaa2');
figure,subplot(221),imshow(DI,[])