www.pudn.com > rgb_rgb---4.rar > imagehide_rgb_rgb.m


%%%%%%%%%%% 载体是RGB    秘密图像是灰度图像 %%%%%%%%%%%%%%% 
 
%    一定要找到 置图像低4位是0之后的图像没有太大的变化 
%    载体和秘密图像大小相同 
%  original_carrier:原始的载体图像 
%  original_secret:原始的秘密图像 
%  carrier:程序中用到的载体图像  
%  secret:程序中用到的秘密图像  
original_carrier=imread('rgb1.jpg');                     
original_secret=imread('rgb2.jpg'); 
data=original_carrier; 
carrier=original_carrier; 
secret=original_secret; 
[row,col,rgb]=size(carrier); 
carrier1=carrier(:,:,1); 
carrier2=carrier(:,:,2); 
carrier3=carrier(:,:,3); 
secret1=secret(:,:,1); 
secret2=secret(:,:,2); 
secret3=secret(:,:,3); 
for i=1:row                                              %置载体图像R层低4位是0 
    for j=1:col 
        carrier1(i,j)=bitand(carrier1(i,j),240); 
    end 
end 
for i=1:row                                              %置载体图像G层低4位是0 
    for j=1:col 
        carrier2(i,j)=bitand(carrier2(i,j),240); 
    end 
end 
for i=1:row                                              %置载体图像B层低4位是0 
    for j=1:col 
        carrier3(i,j)=bitand(carrier3(i,j),240); 
    end 
end  
for i=1:row                                              %置秘密图像R层低4位是0   
    for j=1:col  
        secret1(i,j)=bitand(secret1(i,j),240); 
    end 
end 
for i=1:row                                              %置秘密图像G层低4位是0 
    for j=1:col 
        secret2(i,j)=bitand(secret2(i,j),240); 
    end 
end 
for i=1:row                                              %置秘密图像B层低4位是0  
    for j=1:col 
        secret3(i,j)=bitand(secret3(i,j),240); 
    end 
end 
 
subplot(3,3,1),imshow(carrier)                          %显示分层图像 
subplot(3,3,2),imshow(carrier1) 
subplot(3,3,3),imshow(carrier2) 
subplot(3,3,4),imshow(carrier3) 
subplot(3,3,5),imshow(secret) 
subplot(3,3,6),imshow(secret1) 
subplot(3,3,7),imshow(secret2) 
subplot(3,3,8),imshow(secret3) 
 
secret1=bitshift(secret1,-4);                               %把秘密图像高4位右移  
secret2=bitshift(secret2,-4);                               %把秘密图像高4位右移 
secret3=bitshift(secret3,-4);                               %把秘密图像高4位右移  
 
 
for i=1:row                                                     %图像隐藏 
    for j=1:col 
        carrier1(i,j)=bitor(carrier1(i,j),secret1(i,j)); 
    end 
end 
for i=1:row                                                     %图像隐藏 
    for j=1:col 
        carrier2(i,j)=bitor(carrier2(i,j),secret2(i,j)); 
    end 
end 
for i=1:row                                                     %图像隐藏 
    for j=1:col 
        carrier3(i,j)=bitor(carrier3(i,j),secret3(i,j)); 
    end 
end 
 
% 把分层图像写回 并保存 
data(:,:,1)=carrier1; 
data(:,:,2)=carrier2; 
data(:,:,3)=carrier3; 
subplot(3,3,9),imshow(data) 
imwrite(data,'imagehide_rgb_rgb.bmp') 
imwrite(data,'imagehide_rgb_rgb.jpg') 
 
%%%%%%%%%%%%  提取图像   %%%%%%%%%%%  
 
A=imread('imagehide_rgb_rgb.bmp');                               %如果读入jpg图像 提取出的信息会失真 
[row,col,rgb]=size(A); 
A1=A(:,:,1);  
A2=A(:,:,2);  
A3=A(:,:,3);  
for i=1:row                                                      
    for j=1:col 
        A1(i,j)=bitand(A1(i,j),15); 
    end 
end 
for i=1:row                                                      
    for j=1:col 
        A2(i,j)=bitand(A2(i,j),15); 
    end 
end 
for i=1:row                                                      
    for j=1:col 
        A3(i,j)=bitand(A3(i,j),15); 
    end 
end 
secret1=bitshift(A1,4); 
secret2=bitshift(A2,4); 
secret3=bitshift(A3,4); 
secret(:,:,1)=secret1; 
secret(:,:,2)=secret2; 
secret(:,:,3)=secret3; 
 
%比较隐藏前后图像的区别 
 
figure,imshow(original_carrier)      %原始载体图像                              
figure,imshow(original_secret)       %原始秘密图像 
figure,imshow(data)                  %隐藏后的载体图像 
figure,imshow(secret)                %提取的秘密图像