`
pleasetojava
  • 浏览: 704193 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

仿真代码之三

阅读更多


部分仿真代码,供参考






%designedbylilizong
%lilizong[at]gmail


a
=imread('c:bbb.png');%读入图像
figure,imshow(a),title(
'原图像');%显示图像
figure,imhist(a);
b
=a(:);
[m,n]
=size(a);
k
=size(b);
%下述操作可以实现像素的显示
c
=linspace(0,0,256);
fori=1:k
forj=1:256
if(b(i)==j)
c(j)
=c(j)+1;
end
end
end
%以下步骤简单实现读取整个图像的峰值点

max
=c(1);
maxi
=0;
fori=1:256
if(c(i)>max)
max
=c(i);
maxi
=i;
end
end
max
maxi




%下面步骤实现对各个峰值的读取
d
=c;%作为临时操作数组,以不破坏原数组
emax
=linspace(0,0,256);
emaxi
=linspace(0,0,256);
a
=1;
forj=2:256
if(d(j)>d(j-1)&d(j)>d(j+1)&d(j)~=8888)
emax(a)
=d(j);
emaxi(a)
=j;
d(j)
=8888;
a
=a+1;%开始没有想明白,用额外的循环变量
end
end


%下面的程序读取四个高峰值,并进行显示
fmax
=linspace(0,0,10);
fmaxi
=linspace(0,0,10);
bnum
=1;
fori=1:10
fmax(bnum)
=emax(1);
forj=2:256
if(emax(j)>fmax(bnum))
fmax(bnum)
=emax(j);
fmaxi(bnum)
=emaxi(j);
t
=j;
end
end
emax(t)
=0;
bnum
=bnum+1;
end


fori=1:10
fmax(i)
fmaxi(i)
end

%至此峰值已经提出出来了







%在第一个峰值嵌入水印
%首先把小于最大的像素值的都减去2
cc
=zeros(m,n);
c
=cc(:);

fori=1:k
if(b(i)<fmax(1))
c(i)
=b(i)-2;
end
end

watermark
=imread('c:watermark.png');
figure,imshow(watermark);
[w1,w2]
=size(watermark);
watermark_line
=watermark(:);
oo
=w1*w2;

%开始嵌入水印

%第一次水印

tt
=1;%让tt加1来遍历整个水印图像
fori=1:k
if(c(i)==fmax(1))
if(tt>oo)
tt
=1;%如果超出水印的范围从头开始
if(watermark_line(tt)==1)
c(i)
=c(i)-1;
end

end
tt
=tt+1;
end
end



%第二次水印
tt
=1;%让tt加1来遍历整个水印图像
fori=1:k
if(c(i)==fmax(2))
if(tt>oo)
tt
=1;%如果超出水印的范围从头开始
if(watermark_line(tt)==1)
c(i)
=c(i)-2;
end
end
tt
=tt+1;
elseif(c(i)
==fmax(2)+1)
if(tt>oo)
tt
=1;
if(watermar_line(tt)==1)
c(i)
=c(i)-2;
end
end
end
end









%显示嵌入水印的图像


embed
=c;
embed
=reshape(c,m,n);
figure,imshow(embed,[]),title(
'嵌入水印的图像');


%提取水印

%提取第一层

fori=1:k
if(c(i)==fmax(2))
watermark(tt)
=0;
%tt=tt+1;
%elseif(c(i)==(fmax(1)+1))
%watermark(tt)=0;
%tt=tt+1;
%elseif(c(i)=fmax(1)-1)
%elseif(c(i)=fmax(1)-1)
%watermark(tt)=1;
%tt=tt+1;
%elseif(c(i)=fmax(1)-2)
%watermark(tt)=1;
%tt=tt+1;
%end
else
if(c(i)==fmax(2)+1)
watermark(tt)
=0;
else
if(c(i)==fmax(2)-1)
watermark(tt)
=1;
else
if(c(i)==fmax(2)-2)
watermark
=1;
end
end
end
tt
=tt+1;
end
end


%提取第二层


fori=1:k
if(c(i)==fmax(1))
watermark(tt)
=0;
tt
=tt+1;
elseif(c(i)
==(fmax(1)-1))
watermark(tt)
=1;
tt
=tt+1;
end
end
fori=1:oo
watermark_dect(i)
=watermark(i);
end











fori=1:oo
watermark_dect(i)
=watermark(i);
end
watermark_dect
=reshape(watermark_dect,w1,w2);
figure,imshow(watermark_dect,[]),title(
'提取出来的水印');


%恢复原图像
dd
=embed(:);
fori=1:k
if(c(i)==(max-2))
c(i)
=c(i)+2;
elseif(c(i)
<max-2)
c(i)
=c(i)+2;
end
end
dd
=reshape(c,m,n);
figure,imshow(dd,[]),title(
'恢复的图像');



a
=imread('c:bbb.png');

x
=a;
x1
=embed;
x
=double(x);
x1
=double(x1);
fori=1:256;
forj=1:256;
MYa(i,j)
=x(i,j)^2;%afterfiltering'ssingle
MYb(i,j)=x(i,j)-x1(i,j);
end
end
d
=0;
e
=0;
fori=1:256;
forj=1:256;
d
=d+MYa(i,j);
e
=e+MYb(i,j)*MYb(i,j);
end
end
f
=log10(d/e);
g
=10*f
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics