matlab數字圖像簡單的加密方法


圖像加密的重要性可想而知,每個人都會有自己的小秘密,通過圖像加密的方法可以保護自己的照片等的安全。

一般情況下,圖像加密可以分為以下幾個步驟:

1.選擇圖像加密算法

2.根據算法獲取秘鑰

3.根據保存的秘鑰解密

圖像加密的處理方式多為對圖像中的像素點進行處理,有的處理方式不改變灰度直方圖的信息(易破解),然后更高級的處理方式使得原來的灰度直方圖信息也發生改變(比如變得均衡化了)。

下面介紹自己親自測試的2種圖像加密算法:

1.行列像素點置亂方法,該方法將原圖中的像素信息進行了重新排布——置亂。通過一一對應的關系可以恢復原來的圖像,此時的秘鑰即為行列變換的映射向量Mchange和Nchange。

簡單的MATLAB程序如下:

clc,clear all,close all
Lena = imread('Lena512.bmp');
figure;imshow(Lena)
title('原圖')
[M,N]   = size(Lena);
Rm      = randsample(M,M)';
Mchange = [1:1:M;Rm];
Rn      = randsample(N,N)';
Nchange = [1:1:N;Rn];


%打亂行順序
Lena (Mchange(1,:),:) = Lena (Mchange(2,:),:);
figure;imshow(Lena)
title('行加密后圖像')
%打亂列順序
Lena (:,Nchange(1,:)) = Lena (:,Nchange(2,:));
figure;imshow(Lena)
title('列加密后圖像')
%列變換還原
Lena (:,Nchange(2,:)) = Lena (:,Nchange(1,:));
figure;imshow(Lena)
title('列解密后圖像')
%行變換還原
Lena (Mchange(2,:),:) = Lena (Mchange(1,:),:);
figure;imshow(Lena)
title('解密后圖像')

 

 

2.基於混沌的圖像加密方法,產生2個Logistic混沌序列,改造2個Logistic,得到兩個y序列,由yl和y2序列對原圖像進行值替代加密。秘鑰為混沌系統的初始狀態值。

可參考的MATLAB程序如下:

%加密方法,混沌序列
clc,clear all,close all
A=imread('Lena512.bmp'); 
imshow(A); title('原圖') 
[M,N]=size(A);%原始圖像A的尺寸一MxN 
u1=4;u2=4;x1(1)=0.2;x2(1)=0.7; 
sumA=sum(sum(A));  
k=mod(sumA,256)*1.0/255; 
x1(1)=(x1(1)+k)/2; x2(1)=(x2(1)+k)/2;  
y1(1)=(1/3.1415926)*asin(sqrt(x1(1))); 
y2(1)=(1/3.1415926)*asin(sqrt(x2(1)));  
for i=1:1:M*N-1 %產生2個Logistic混沌序列   
    x1(i+1)=u1*x1(i)*(1-x1(i));   
    x2(i+1)=u2*x2(i)*(1-x2(i)); 
end
for i=1:1:M*N  %改造2個Logistic,得到兩個y序列
      y1(i)=(1/3.1415926)*asin(sqrt(x1(i)));   
      y2(i)=(1/3.1415926)*asin(sqrt(x2(i))); 
end
n=1;  
for i=1:1:M   %由yl和y2序列對原圖像進行值替代加密     
    for j=1:1:N        
        if mod(n,1)==0           
            k(n)=mod(floor(y1(n)*10^15),256);       
        else
            k(n)=mod(floor(y2(n)*10^15),256);       
        end
        A1(i,j)=bitxor(A(i,j),k(n));  %得到加密像素      
        n=n+1;     
    end
end
figure,imshow(A1);title('混沌加密圖像')  %輸出得到的加密圖像 
n=1;  
for i=1:1:M     
    for j=1:1:N          
        if mod(n,1)==0             
            k(n)=mod(floor(y1(n)*10^15),256);         
        else
            k(n)=mod(floor(y2(n)*10^15),256);         
        end
        A2(i,j)=bitxor(A1(i,j),k(n));  %得到加密像素      
        n=n+1;     
    end
end
figure,imshow(A2);title('解密圖像')  %輸出得到的解密圖像

 

 


---------------------
作者:清風徐行
來源:CSDN
原文:https://blog.csdn.net/u013626386/article/details/39736611
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM