部分源代码
来源:互联网 发布:食品安全数据 编辑:程序博客网 时间:2024/05/01 20:46
下面是上述仿真的部分代码,供参考。
% a原始数据数组
% aa存储像素从1到255
% bb存储aa中每个像素所对应的个数
% cc将a化成一列后,所形成的数组
% dd,cc中小于最大个数的像素值,减1处理后的结果
% copyright by lilizong
a=imread('c:oat.png');
figure,imshow(a),title('嵌入水印前原图像');
for i=1:255
aa(i)=i; %用于存储像素值
end
for i=1:255
bb(i)=0; %用于存储每个像素的个数
end
[m,n]=size(a);
k=m*n; %a的大小
cc=a(:);
tt=1; %循环遍历向量
%求出某个像素的个数
for i=1:k
for j=1:255
if(cc(i)==aa(j))
bb(j)=bb(j)+1;
end
end
end
% 求出哪个像素的个数是最大
max=bb(1);
for i=1:255
if(bb(i)>max)
max=bb(i);
maxi=i;
end
end
% 将所有小于max的像素的值都减1
ddd=zeros(m,n);
dd=ddd(:); %产生和cc同样大小的数组,用于存放cc处理后结果;
for i=1:k
if(cc(i)<max)
dd(i)=cc(i)-1;
end
end
%读入水印,并将水印转换成一列,
watermark=imread('c:watermark1.png');
figure,imshow(watermark),title('水印图像');
[w1,w2]=size(watermark);
watermark_line=watermark(:);
oo=w1*w2;
%开始嵌入水印
tt=1; %让tt加1来遍历整个水印图像
for i=1:k
if(dd(i)==max)
if(tt>oo)
tt=1; %如果超出水印的范围从头开始
if(watermark_line(tt)==1)
dd(i)=dd(i)-1;
end
end
tt=tt+1;
end
end
%显示嵌入水印的图像
embed=dd;
embed=reshape(dd,m,n);
figure,imshow(embed,[]),title('嵌入水印后图像');
imwrite(embed,'c:embed2.gif');
%提取水印
for i=1:k
if(dd(i)==max)
watermark(tt)=0;
tt=tt+1;
elseif(dd(i)==(max-1))
watermark(tt)=1;
tt=tt+1;
end
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(dd(i)==(max-1))
dd(i)=dd(i)+1;
elseif(dd(i)<max)
dd(i)=dd(i)+1;
end
end
dd=reshape(dd,m,n);
figure,imshow(dd,[]),title('恢复后图像');
%对原图和恢复图像进行比较
% aa存储像素从1到255
% bb存储aa中每个像素所对应的个数
% cc将a化成一列后,所形成的数组
% dd,cc中小于最大个数的像素值,减1处理后的结果
% copyright by lilizong
a=imread('c:oat.png');
figure,imshow(a),title('嵌入水印前原图像');
for i=1:255
aa(i)=i; %用于存储像素值
end
for i=1:255
bb(i)=0; %用于存储每个像素的个数
end
[m,n]=size(a);
k=m*n; %a的大小
cc=a(:);
tt=1; %循环遍历向量
%求出某个像素的个数
for i=1:k
for j=1:255
if(cc(i)==aa(j))
bb(j)=bb(j)+1;
end
end
end
% 求出哪个像素的个数是最大
max=bb(1);
for i=1:255
if(bb(i)>max)
max=bb(i);
maxi=i;
end
end
% 将所有小于max的像素的值都减1
ddd=zeros(m,n);
dd=ddd(:); %产生和cc同样大小的数组,用于存放cc处理后结果;
for i=1:k
if(cc(i)<max)
dd(i)=cc(i)-1;
end
end
%读入水印,并将水印转换成一列,
watermark=imread('c:watermark1.png');
figure,imshow(watermark),title('水印图像');
[w1,w2]=size(watermark);
watermark_line=watermark(:);
oo=w1*w2;
%开始嵌入水印
tt=1; %让tt加1来遍历整个水印图像
for i=1:k
if(dd(i)==max)
if(tt>oo)
tt=1; %如果超出水印的范围从头开始
if(watermark_line(tt)==1)
dd(i)=dd(i)-1;
end
end
tt=tt+1;
end
end
%显示嵌入水印的图像
embed=dd;
embed=reshape(dd,m,n);
figure,imshow(embed,[]),title('嵌入水印后图像');
imwrite(embed,'c:embed2.gif');
%提取水印
for i=1:k
if(dd(i)==max)
watermark(tt)=0;
tt=tt+1;
elseif(dd(i)==(max-1))
watermark(tt)=1;
tt=tt+1;
end
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(dd(i)==(max-1))
dd(i)=dd(i)+1;
elseif(dd(i)<max)
dd(i)=dd(i)+1;
end
end
dd=reshape(dd,m,n);
figure,imshow(dd,[]),title('恢复后图像');
%对原图和恢复图像进行比较
- 部分源代码
- 部分书籍的源代码
- 部分源代码资料
- Windows源代码部分公开
- QQ的部分源代码
- Windows源代码部分公开
- libevent部分源代码笔记 .
- 附录以及部分源代码
- PetShop3.0 BLL部分源代码
- ipsec驱动源代码(部分)
- 石器外挂部分源代码2
- 【源代码】数字图像处理部分源码
- lucene源代码分析(index部分)
- 爱情森林病毒部分源代码
- 机器狗的部分源代码
- lucene源代码分析(index部分)
- keil C51部分库函数源代码
- delphi(注入)附部分源代码
- _T 这个宏究竟干些什么事情?
- SSH(struts+spring+hibernate)迅速开发--第八章 浏览和选购商品(1)
- C++虚函数和多态
- SSH(struts+spring+hibernate)迅速开发--第八章 浏览和选购商品(2)
- 在场景上添加可视化对象——创建mc和文本
- 部分源代码
- Spring Framework标记库初学指南
- Rebol语言学习(二)-方言Dialects
- as3——数组简介
- .NET生成静态页面并分页
- IList,ICollection,IEnumerable,IListIList,ICollection,IEnumerable辨析
- 日誌
- js验证表单大全
- SSH(struts+spring+hibernate)迅速开发--第八章 浏览和选购商品(3)