⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpcsmixie128.m

📁 bcps嵌入 是一种很好的密写技术
💻 M
字号:
%BPCS密写
%-------------------------------------------------------------------(1)
%下面程序实现将秘密信息图像转化成复杂度满足要求的小块并构成8*x矩阵
%适用于128×128的秘密图像5
clear
clc
QPG=[1 0 1 0 1 0 1 0;
     0 1 0 1 0 1 0 1;
     1 0 1 0 1 0 1 0;
     0 1 0 1 0 1 0 1;
     1 0 1 0 1 0 1 0;
     0 1 0 1 0 1 0 1;
     1 0 1 0 1 0 1 0;
     0 1 0 1 0 1 0 1];%棋盘格矩阵,用于与不满足复杂度要求小块的异或
I=imread('airplane.bmp');
I=rgb2gray(I);
G7=wpm7(I);G6=wpm6(I);G5=wpm5(I);G4=wpm4(I);G3=wpm3(I);G2=wpm2(I);G1=wpm1(I);G0=wpm0(I);
G7=double(G7);G6=double(G6);G5=double(G5);G4=double(G4);G3=double(G3);G2=double(G2);G1=double(G1);G0=double(G0);
[a,b]=size(G7);
c=a/8;d=b/8;
%%%%%%%设置参数
Cmax=112;aerf=0.45;
F=Cmax*aerf;
GeS=(a*b)/8;%用于置换的小块个数
for i=1:c
    for j=1:d
        WPMK7(i,j)=fuzadu(G7(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
        WPMK6(i,j)=fuzadu(G6(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
        WPMK5(i,j)=fuzadu(G5(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
        WPMK4(i,j)=fuzadu(G4(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
        WPMK3(i,j)=fuzadu(G3(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
        WPMK2(i,j)=fuzadu(G2(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
        WPMK1(i,j)=fuzadu(G1(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
        WPMK0(i,j)=fuzadu(G0(1+(i-1)*8:i*8,(1+(j-1)*8):j*8));
    end
end
%%%%%%%%%%%%%E用于记录复杂度小于阀值的小块的位置信息,便于将附加信息嵌入到载体图像中
%%%%%%%%%%%%%初始化为全0,则令1表示小块经过了异或变换
E7=zeros(c,d);E6=zeros(c,d);E5=zeros(c,d);E4=zeros(c,d);E3=zeros(c,d);E2=zeros(c,d);E1=zeros(c,d);E0=zeros(c,d);
for i=1:c
    for j=1:d
        if WPMK7(i,j)>F
           C7(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G7(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
        else
           E7(i,j)=1;
           C7(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G7(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
        end
    end
end
for i=1:c
    for j=1:d
        if WPMK6(i,j)>F
           C6(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G6(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
        else
           E6(i,j)=1;
           C6(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G6(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
        end
    end
end
for i=1:c
    for j=1:d
       if WPMK5(i,j)>F
          C5(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G5(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
       else
          E5(i,j)=1;
          C5(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G5(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
       end
    end
end
for i=1:c
    for j=1:d
        if WPMK4(i,j)>F
           C4(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G4(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
        else
           E4(i,j)=1;
           C4(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G4(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
        end
    end
end
for i=1:c
    for j=1:d
        if WPMK3(i,j)>F
           C3(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G3(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
        else
           E3(i,j)=1;
           C3(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G3(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
        end
    end
end
for i=1:c
    for j=1:d
       if WPMK2(i,j)>F
          C2(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G2(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
       else
          E2(i,j)=1;
          C2(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G2(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
      end
    end
end
for i=1:c
    for j=1:d
       if WPMK1(i,j)>F
          C1(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G1(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
       else
          E1(i,j)=1;
          C1(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G1(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
      end
     end
end
for i=1:c
    for j=1:d
        if WPMK0(i,j)>F
           C0(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=G0(1+(i-1)*8:i*8,1+(j-1)*8:j*8);
        else
           E0(i,j)=1;
           C0(1+(i-1)*8:i*8,1+(j-1)*8:j*8)=bitxor( G0(1+(i-1)*8:i*8,1+(j-1)*8:j*8),QPG);
        end
    end
end
%%%%%%%%%%%%%%%%%%%%%转化秘密图象
M71=C7(1:8,1:b);M72=C7(9:16,1:b);M73=C7(17:24,1:b);
M74=C7(25:32,1:b);M75=C7(33:40,1:b);M76=C7(41:48,1:b);
M77=C7(49:56,1:b);M78=C7(57:64,1:b);
M79=C7(65:72,1:b);M710=C7(73:80,1:b);M711=C7(81:88,1:b);
M712=C7(89:96,1:b);M713=C7(97:104,1:b);M714=C7(105:112,1:b);
M715=C7(113:120,1:b);M716=C7(121:128,1:b);
C7=[M71 M72 M73 M74 M75 M76 M77 M78 M79 M710 M711 M712 M713 M714 M715 M716];
%
M61=C6(1:8,1:b);M62=C6(9:16,1:b);M63=C6(17:24,1:b);
M64=C6(25:32,1:b);M65=C6(33:40,1:b);M66=C6(41:48,1:b);
M67=C6(49:56,1:b);M68=C6(57:64,1:b);
M69=C6(65:72,1:b);M610=C6(73:80,1:b);M611=C6(81:88,1:b);
M612=C6(89:96,1:b);M613=C6(97:104,1:b);M614=C6(105:112,1:b);
M615=C6(113:120,1:b);M616=C6(121:128,1:b);
C6=[M61 M62 M63 M64 M65 M66 M67 M68 M69 M610 M611 M612 M613 M614 M615 M616];
%
M51=C5(1:8,1:b);M52=C5(9:16,1:b);M53=C5(17:24,1:b);
M54=C5(25:32,1:b);M55=C5(33:40,1:b);M56=C5(41:48,1:b);
M57=C5(49:56,1:b);M58=C5(57:64,1:b);
M59=C5(65:72,1:b);M510=C5(73:80,1:b);M511=C5(81:88,1:b);
M512=C5(89:96,1:b);M513=C5(97:104,1:b);M514=C5(105:112,1:b);
M515=C5(113:120,1:b);M516=C5(121:128,1:b);
C5=[M51 M52 M53 M54 M55 M56 M57 M58 M59 M510 M511 M512 M513 M514 M515 M516];
%
M41=C4(1:8,1:b);M42=C4(9:16,1:b);M43=C4(17:24,1:b);
M44=C4(25:32,1:b);M45=C4(33:40,1:b);M46=C4(41:48,1:b);
M47=C4(49:56,1:b);M48=C4(57:64,1:b);
M49=C4(65:72,1:b);M410=C4(73:80,1:b);M411=C4(81:88,1:b);
M412=C4(89:96,1:b);M413=C4(97:104,1:b);M414=C4(105:112,1:b);
M415=C4(113:120,1:b);M416=C4(121:128,1:b);
C4=[M41 M42 M43 M44 M45 M46 M47 M48 M49 M410 M411 M412 M413 M414 M415 M416];
%
M31=C3(1:8,1:b);M32=C3(9:16,1:b);M33=C3(17:24,1:b);
M34=C3(25:32,1:b);M35=C3(33:40,1:b);M36=C3(41:48,1:b);
M37=C3(49:56,1:b);M38=C3(57:64,1:b);
M39=C3(65:72,1:b);M310=C3(73:80,1:b);M311=C3(81:88,1:b);
M312=C3(89:96,1:b);M313=C3(97:104,1:b);M314=C3(105:112,1:b);
M315=C3(113:120,1:b);M316=C3(121:128,1:b);
C3=[M31 M32 M33 M34 M35 M36 M37 M38 M39 M310 M311 M312 M313 M314 M315 M316];
%
M21=C2(1:8,1:b);M22=C2(9:16,1:b);M23=C2(17:24,1:b);
M24=C2(25:32,1:b);M25=C2(33:40,1:b);M26=C2(41:48,1:b);
M27=C2(49:56,1:b);M28=C2(57:64,1:b);
M29=C2(65:72,1:b);M210=C2(73:80,1:b);M211=C2(81:88,1:b);
M212=C2(89:96,1:b);M213=C2(97:104,1:b);M214=C2(105:112,1:b);
M215=C2(113:120,1:b);M216=C2(121:128,1:b);
C2=[M21 M22 M23 M24 M25 M26 M27 M28 M29 M210 M211 M212 M213 M214 M215 M216];
%
M11=C1(1:8,1:b);M12=C1(9:16,1:b);M13=C1(17:24,1:b);
M14=C1(25:32,1:b);M15=C1(33:40,1:b);M16=C1(41:48,1:b);
M17=C1(49:56,1:b);M18=C1(57:64,1:b);
M19=C1(65:72,1:b);M110=C1(73:80,1:b);M111=C1(81:88,1:b);
M112=C1(89:96,1:b);M113=C1(97:104,1:b);M114=C1(105:112,1:b);
M115=C1(113:120,1:b);M116=C1(121:128,1:b);
C1=[M11 M12 M13 M14 M15 M16 M17 M18 M19 M110 M111 M112 M113 M114 M115 M116];
%
M01=C0(1:8,1:b);M02=C0(9:16,1:b);M03=C0(17:24,1:b);
M04=C0(25:32,1:b);M05=C0(33:40,1:b);M06=C0(41:48,1:b);
M07=C0(49:56,1:b);M08=C0(57:64,1:b);
M09=C0(65:72,1:b);M010=C0(73:80,1:b);M011=C0(81:88,1:b);
M012=C0(89:96,1:b);M013=C0(97:104,1:b);M014=C0(105:112,1:b);
M015=C0(113:120,1:b);M016=C0(121:128,1:b);
C0=[M01 M02 M03 M04 M05 M06 M07 M08 M09 M010 M011 M012 M013 M014 M015 M016];
C=[C7 C6 C5 C4 C3 C2 C1 C0];
%%%%%%%转化附加信息%%占用32个小块
 GeS=GeS+32;
 EE7=reshape(E7.',8,32);EE6=reshape(E6.',8,32);EE5=reshape(E5.',8,32);
 EE4=reshape(E4.',8,32);EE3=reshape(E3.',8,32);EE2=reshape(E2.',8,32);
 EE1=reshape(E1.',8,32);EE0=reshape(E0.',8,32);
 EE=[EE7 EE6 EE5 EE4 EE3 EE2 EE1 EE0];
x=size(EE,2);
y=x/8;
FUJIA=zeros(1,64);
    for i=1:y
        W(i)=fuzadu(EE(1:8,1+(i-1)*8:i*8));
    end
    for i=1:y
        if W(i)>F
         EEE(1:8,1+(i-1)*8:i*8)=EE(1:8,1+(i-1)*8:i*8);
        else
         EEE(1:8,1+(i-1)*8:i*8)=bitxor( EE(1:8,1+(i-1)*8:i*8),QPG);
         FUJIA(i)=1;
        end
    end   
%%%%%A为附加之附加信息占1个小块
GeS=GeS+1;
A=reshape(FUJIA,8,8);
AA=bitxor(A,QPG);
%%%%%%%%
CC=[AA EEE C];
%---------------------------------------------------------------------------(2)
%%%%%%%%%%%  替换嵌入
L=imread('lenna.bmp');%%%%注意按照位平面从低到高进行嵌入
L7=wpm7(L);L6=wpm6(L);L5=wpm5(L);L4=wpm4(L);L3=wpm3(L);L2=wpm2(L);L1=wpm1(L);L0=wpm0(L);
L7=double(L7);L6=double(L6);L5=double(L5);L4=double(L4);L3=double(L3);L2=double(L2);L1=double(L1);L0=double(L0);
Z=[L0;L1;L2;L3;L4;L5;L6;L7];%%%%载体图像各位平面组成一个矩阵
[p,q]=size(Z);
m=p/8;n=q/8;
s=1;
for i=1:m
    if s>GeS
       break;
    end
   for j=1:n
      if s>GeS
        break;
      end
      if fuzadu(Z(1+(i-1)*8:i*8,(1+(j-1)*8):j*8))>F
        Z(1+(i-1)*8:i*8,(1+(j-1)*8):j*8)=CC(1:8,1+(s-1)*8:s*8);
         s=s+1;
      end
   end
end
%---------------------------------------------------------------------------(3)
%%%%密写后
Z0=Z(1:256,1:256);
Z1=Z(257:512,1:256);
Z2=Z(513:768,1:256);
Z3=Z(769:1024,1:256);
Z4=Z(1025:1280,1:256);
Z5=Z(1281:1536,1:256);
Z6=Z(1537:1792,1:256);
Z7=Z(1793:2048,1:256);
for i=1:256
    for j=1:256
        ZZ(i,j)=2^7*Z7(i,j)+2^6*Z6(i,j)+2^5*Z5(i,j)+2^4*Z4(i,j)+2^3*Z3(i,j)+2^2*Z2(i,j)+2^1*Z1(i,j)+2^0*Z0(i,j);
    end
end
%%%%%%%%
%计算密写后的均方误差MSE
[M,N]=size(L);
Q=double(L);
Qp=double(ZZ);
MSE=0;
for i=1:M
    for j=1:N
        MSE=MSE+(Q(i,j)-Qp(i,j))^2;
    end
end
MSE=MSE/(M*N);
%%%%%%%%%%
%计算峰值对数信躁比PSNR
PSNR=10*log10(255^2/MSE)
ZZ=uint8(ZZ);
figure(1)
imshow(L)
figure(2)
imshow(I)
figure(3)
imshow(ZZ)
imwrite(ZZ,'BPCSairplane.bmp');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -