zhangyhongdan.m

来自「这么代码是用Matlab编写的」· M 代码 · 共 139 行

M
139
字号
clear all;

Ximage=double(imread('e:\work\Monkey.jpg'));
Yimage=double(imread('e:\work\Lena.jpg'));
Ih=size(Ximage,1);%图像的长度
Iw=size(Ximage,2);%图像的宽度
Image=double(zeros(size(Ximage)));
Image=Ximage;
s=2;
renewing=0;
hiding=0;
%隐藏
key1=3.8;
key2=0.9;

for(t=1:s)
figure(t)
subplot(3,2,1)
imshow(Image,[]);
title('待隐藏图像');
Image=uint8(Image);
figure(t)
subplot(3,2,2)
imhist(Image);
title('待隐藏图像的直方图');
Image=double(Image);
figure(t)
subplot(3,2,3)
imshow(Yimage,[]);
title('模板图像');
Yimage=uint8(Yimage);
figure(t)
subplot(3,2,4)
imhist(Yimage);
title('模板图像的直方图');
Yimage=double(Yimage);


for(i=1:Ih)
        for(j=1:Iw)
            key2=(key1*key2*(1-key2))/2;
%             key2=1-key1*(key2*key2);
            if( key2< 0.001)
                key2=key2+0.1;
                Image(i,j)=mod(key2*(Image(i,j)-Yimage(i,j))+Yimage(i,j),256);
            else
                Image(i,j)=mod(key2*(Image(i,j)-Yimage(i,j))+Yimage(i,j),256);
            end
        end
end
figure(t)
subplot(3,2,5)
imshow(Image,[]);
title('结果图像');
Image=uint8(Image);
figure(t)
subplot(3,2,6)
imhist(Image);
title('结果图像的直方图');
Image=double(Image);
end

for(i=1:Ih)
        for(j=1:Iw)
            if(Image(i,j)~=Yimage(i,j))
                hiding=hiding+(Image(i,j)-Yimage(i,j))^2;
            end
        end
    end
    
   hiding=hiding/(Ih*Iw);
   hiding=hiding^(1/2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%恢复
% key1=4;
key2=0.9;

for(t=1:s)
figure(t+s)
subplot(3,2,1)
imshow(Image,[]);
title('结果图像');
Image=uint8(Image);
figure(t+s)
subplot(3,2,2)
imhist(Image);
title('结果图像的直方图');
Image=double(Image);
figure(t+s)
subplot(3,2,3)
imshow(Yimage,[]);
title('模板图像');
Yimage=uint8(Yimage);
figure(t+s)
subplot(3,2,4)
imhist(Yimage);
title('模板图像的直方图');
Yimage=double(Yimage);


% key=0; 

for(i=1:Ih)
       for(j=1:Iw)
%             key2=1-key1*(key2*key2);
            key2=(key1*key2*(1-key2))/2;
            if( key2< 0.001)
                key2=key2+0.1;
                key=1/key2;
                Image(i,j)=mod(key*(Image(i,j)-Yimage(i,j))+Yimage(i,j),256);
            else
                key=1/key2;
                Image(i,j)=mod(key*(Image(i,j)-Yimage(i,j))+Yimage(i,j),256);
            end

        end
end
figure(t+s)
subplot(3,2,5)
imshow(Image,[]);
title('恢复图像');
Image=uint8(Image);
figure(t+s)
subplot(3,2,6)
imhist(Image);
title('恢复图像的直方图');
Image=double(Image);
end


for(i=1:Ih)
        for(j=1:Iw)
            if(Image(i,j)~=Ximage(i,j))
                renewing=renewing+(Image(i,j)-Ximage(i,j))^2;
            end
        end
    end
    
   renewing=renewing/(Ih*Iw);
   renewing=renewing^(1/2);

⌨️ 快捷键说明

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