仿真代码之三
来源:互联网 发布:php图形验证码接口 编辑:程序博客网 时间:2024/04/30 02:18
部分仿真代码,供参考
%designed by lilizong
%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);
for i=1:k
for j=1:256
if(b(i)==j)
c(j)=c(j)+1;
end
end
end
% 以下步骤简单实现读取整个图像的峰值点
max=c(1);
maxi=0;
for i=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;
for j=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;
for i=1:10
fmax(bnum)=emax(1);
for j=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
for i=1:10
fmax(i)
fmaxi(i)
end
% 至此峰值已经提出出来了
%在第一个峰值嵌入水印
% 首先把小于最大的像素值的都减去2
cc=zeros(m,n);
c=cc(:);
for i=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来遍历整个水印图像
for i=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来遍历整个水印图像
for i=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('嵌入水印的图像');
%提取水印
%提取第一层
for i=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
%提取第二层
for i=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
for i=1:oo
watermark_dect(i)=watermark(i);
end
for i=1:oo
watermark_dect(i)=watermark(i);
end
watermark_dect=reshape(watermark_dect,w1,w2);
figure,imshow(watermark_dect,[]),title('提取出来的水印');
%恢复原图像
dd=embed(:);
for i=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);
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
- 仿真代码之三
- VPM 软仿真 跑马灯代码以及仿真截图 系列之三
- 仿真代码之二
- SkyEye硬件模拟平台:硬件仿真实现之三
- 三、MFC 六大关键技术之仿真 (学习笔记)
- iOS 之物理仿真引擎-UIDynamic简介(三)
- MFC六大关键技术之仿真学习笔记(三)
- cloudsim仿真算法研究之三(完结)
- 对“视觉机器学习20讲配套仿真代码”的研究心得---Adaboost(三)
- 代码生成器工具之三
- 注释代码技巧之三
- 蓝桥杯-代码填空之三
- 好代码、坏代码之三
- MFC仿真之RTTI
- uartlite_IP之仿真
- [转]SkyEye硬件模拟平台,第三部分: 硬件仿真实现之三
- VORC的PE仿真问题之三:符号判断位选择错误导致电路死锁
- SkyEye硬件模拟平台,第三部分: 硬件仿真实现之三
- Junit3.8.1
- Linux 进程管理
- 别讲“歧视”英语
- 私有继承下的多态性
- 外语学习的真实方法及误区分析(精编版)
- 仿真代码之三
- [英语新闻]The school for the aged
- 抽象类(abstract)
- 嘎然而止
- SAP NetWeaver简介
- 不使用其他变量交换两个数
- Virgin One
- [英语歌曲]老鹰之歌:If I Could (El Condor Pasa)
- 公司活动