仿真代码之二

仿真的部分代码,可以参考


%designed by lilizong
% lilizong[at]gmail

myinforarray=linspace(0,0,5);
mypsnrarray=linspace(0,0,5);
w=1;
for myouter=1:1000
A=imread('c:\boat.png');
[m,n]=size(A);
B=cell(8,8);%这里的k为你要分成大小为k*k的块
AA=A;
myinfor=0;
for myinter=1:3

for i=1:256/8
for j=1:256/8
B{i,j}=A((i-1)*8+1:i*8,(j-1)*8+1:j*8);
end
end


%将B化为一维
c=cell(8,8);
k=1;
for i=1:256/8
for j=1:256/8
c{k}=B{i,j};
k=k+1;
end
end




%下面的代码用于生成混沌序列,生成1024个数字,然后排序,取前512个,
%得到一个位于1-1024之间的无重复值的混沌序列

x=linspace(0,0,1024);

x(1)=0.8+myinter/10+myouter/10000;
t=linspace(0,0,1024);
m=0;
n=0;
for i=1:1023
x(i+1)=1-2*x(i)*x(i);
k=k+1;
end

[pm,pn]=sort(x);
%n为排序后结果,用的时候可以取前512个结果

tod=cell(8,8);
%定义toa为被混沌序列选中,需要处理的图像块为前512块
for i=1:1024
tod{i}=c{pn(i)};

test=tod; %添加一个测试块,看看问题出现在什么地方
end

%temp=cell(8,8);
%得到像素值数组xiang
xiangsu=linspace(0,0,256);
%对取得的图像快进行分析,找到最大像素值
for m=1:512
temp=tod{i};
% temp=cell2mat(temp);
for i=1:8
for j=1:8
for n=1:256
if temp(i,j)==n
xiangsu(n)=xiangsu(n)+1;
end
end
end
end
end
%求出最大像素的值
maxxiangsu=xiangsu(1);
for i=1:256
if maxxiangsu<xiangsu(i)
maxxiangsu=xiangsu(i);
maxvalueofxiangsu=i;
end
end


%开始对需要嵌入信息的图像快进行一位处理
for m=1:512 %表示需要处理的块数
temp=tod{m};
for i=1:8
for j=1:8
if temp(i,j)<maxvalueofxiangsu
%temp(i,j)=maxvalueofxiangsu-1;
temp(i,j)=temp(i,j)-1;
end
end

end
%tod{m}=mat2cell(temp); 更改4.28
tod{m}=temp;
end







%处理完毕,开始嵌入水印

%读入水印信息

b=imread('c:\watermark.png');
[p,q]=size(b);
oo=p*q; %用来标识水印的总像素数
watermark=reshape(b,1,oo);




%嵌入方式为,找到最高位,如果水印为0,不发生变化,如果水印为1,最高位减1
%令tt为嵌入水印循环量,如果t的值超过水印的信息量,则开始进行新的循环。
t=1; %用来标识嵌入位
infor=0; %用来标识总共可以嵌入的信息
for m=1:512
% temp=cell2mat(toa{m});
temp=tod{m};
for i=1:8
for j=1:8
if temp(i,j)==maxvalueofxiangsu
if watermark(t)==1 %水印的信息如果是1,则进行原信息的改变
temp(i,j)=temp(i,j)-1; %此处测试一下
% temp(i,j)=256;
t=t+1;
if(t>oo)
t=0;
end

end
infor=infor+1;
end
end
end
%tod{m}=mat2cell(temp);
tod{m}=temp;
end
myinfor=myinfor+infor;



%对图像进行拼接
toad=cell(8,8);
for i=1:1024
toad{pn(i)}=tod{i};
end
k=1;
toyuan=cell(8,8);
for i=1:32
for j=1:32
toyuan{i,j}=toad{k};
k=k+1;
end
end


toyuan=cell2mat(toyuan);





% figure,imshow(toyuan);
% 此处请屏蔽外层循环后开启!!!!!
A=toyuan;




end
x=AA;
x1=toyuan;
x=double(x);
x1=double(x1);
for i=1:256;
for j=1:256;
MYa(i,j)=x(i,j)^2; %after filtering's single
MYb(i,j)=x(i,j)-x1(i,j);
end
end
d=0;
e=0;
for i=1:256;
for j=1:256;
d=d+MYa(i,j);
e=e+MYb(i,j)*MYb(i,j);
end
end
f=log10(d/e);
g=10*f ;
myinforarray(w)=myinfor;
mypsnrarray(w)=uint8(g);
w=w+1;


end


figure,plot(myinforarray);
figure,plot(mypsnrarray);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值