相位掩膜+傅立葉變換進行影象加密

小銘同學的部落格發表於2018-05-21
I=imread('1.jpg');% 載入影象
A=im2double(I);% 將影象轉為double格式
figure,imshow(A);title('The original image');% 顯示影象
 
%加密部分
Y=fftshift(A);% 傅立葉變換部分調整整幅影象,將零頻點移到頻譜的中間
figure,imshow(Y);title('shifted image');%顯示
B=fft2(Y);% 二維傅立葉變換
figure,imshow(B);title('FFT imagea');%顯示

%M1=rand(255/255);% 隨機生成金鑰
M1=0.814%這裡你自己更改你想要的值,只要是0~1範圍內就好

M11=exp(i*2*pi*M1);%M11為根據隨機相位生成的影象掩膜
M111=B.*M11; %將要加密的影象和掩膜相乘
figure,imshow(M111);title('phase mask');%顯示加密影象
 
D=fft2(M111); % 再次傅立葉變換
figure,imshow(D);title('FFT image b');
 
C=abs(D);%對經過兩次傅立葉變化的影象畫素灰度取絕對值
 
 
%解密部分
C1=ifft2(C); % 二維傅立葉逆變換
figure,imshow(C1);title('2-D IFFT b');%顯示進行一次傅立葉逆變換的影象
C11=C1.*exp(-i*2*pi*M1); % 移除掩膜,這個M1就是資訊傳送方和接收方事先約定好的金鑰,接收加密影象的人必須知道M1才能正確解密。
%這個程式只是演示加密解密過程,就隨機生成的M1,不然應該是有一個金鑰檔案記錄M1,雙方保留。
figure,imshow(C11);title('remove mask');%顯示移除掩膜後的影象
C111=ifft2(C11); %二維傅立葉逆變換
figure,imshow(C111);title('2-D IFFT a');%顯示去除掩膜和進行兩次傅立葉變換的影象
C1111=ifftshift(C111); %將零頻點還原到原始位置
F=abs(C1111); %取絕對值
figure,imshow(F);title('The decrypted image');%顯示,得到了最終解密後到影象

相關文章