matlab 水印代码1转载lilizong
来源:互联网 发布:安卓看图片软件推荐 编辑:程序博客网 时间:2024/05/26 02:51
designed by lilizong
lilizong@gmail.com
实验仿真部分代码
row=1;
col=1;
%控制最终显示窗口中显示的图像行列数
myinforarray=linspace(0,0,5);
mypsnrarray=linspace(0,0,5);
w=1;
for myouter=1:1 %此处设置迭代次数,多次迭代可以计算优化效果
A=imread('e:oat.bmp');
% subplot(row,col,[1 2 4 5 7 8]),imshow(A),title('原始载体图像');
% subplot(row,col,1),imshow(A),title('原始载体图像');
[m,n]=size(A);
B=cell(8,8);%这里的k为你要分成大小为k*k的块
AA=A;
myinfor=0;
for myinter=1:1 %此处设置插值次数
for i=1:512/8
for j=1:512/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:512/8
for j=1:512/8
c{k}=B{i,j};
k=k+1;
end
end
%下面的代码用于生成混沌序列,生成4096个数字,然后排序
%得到一个位于4096之间的无重复值的混沌序列
x=linspace(0,0,4096);
x(1)=0.75+0.001+myinter/10+myouter/1000;
% 0.73得值获得好结果,其他结果不佳
t=linspace(0,0,4096);
m=0;
n=0;
for i=1:4095
x(i+1)=1-2*x(i)*x(i);
k=k+1;
end
[pm,pn]=sort(x);
%pn为排序后结果,pm为原始数列
tod=cell(8,8);
%定义tod为需要处理的图像块
for i=1:4096
tod{i}=c{pn(i)};
test=tod; %添加一个测试块,看看问题出现在什么地方
end
%对图像进行拼接,显示一下置乱后的图像
toad=cell(8,8);
for i=1:4096
toad{i}=tod{i};
end
k=1;
toyuan=cell(8,8);
for i=1:64
for j=1:64
toyuan{i,j}=toad{k};
k=k+1;
end
end
toyuan=cell2mat(toyuan);
% subplot(row,col,2),imshow(toyuan),title('分块置乱后载体图像');
%temp=cell(8,8);
%得到像素值数组xiang
xiangsu=linspace(0,0,256);
%对取得的图像快进行分析,找到最大像素值
for m=1:4096
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
maxvalueofxiangsu;
%开始对需要嵌入信息的图像快进行移位处理
for m=1:4096 %表示需要处理的块数
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('e:logo1.bmp');
b=im2bw(b);
[p,q]=size(b);
oo=p*q; %用来标识水印的总像素数
% watermark=reshape(b,1,oo);
watermark=zeros(1,oo);
n=1;
for i=1:p
for j=1:q
watermark(n)=b(i,j);
n=n+1;
end
end
% subplot(row,col,6),imshow(b),title('水印图像');
watermark;
waterlogistic=zeros(1,1600);
waterlogistic(1)=0.8;
for i=2:1600
waterlogistic(i)=1-2*waterlogistic(i-1)*waterlogistic(i-1);
end
for i=1:1600
if waterlogistic(i)>0
waterlogistic(i)=1;
else
waterlogistic(i)=0;
end
end
waterlogistic;
watermark=xor(watermark,waterlogistic);
n=1;
for i=1:40
for j=1:40
towatermark(i,j)=watermark(n);
n=n+1;
end
end
% subplot(row,col,8),imshow(towatermark),title('加密后水印图像');
yuanwatermark=xor(watermark,waterlogistic);
n=1;
for i=1:40
for j=1:40
yuanwatermark1(i,j)=yuanwatermark(n);
n=n+1;
end
end
% subplot(row,col,10),imshow(yuanwatermark1),title('测试:恢复后水印图像');
%嵌入方式为,找到最高位,如果水印为0,不发生变化,如果水印为1,最高位减1
%令tt为嵌入水印循环量,如果t的值超过水印的信息量,则开始进行新的循环。
t=1; %用来标识嵌入位
infor=0; %用来标识总共可以嵌入的信息
for m=1:4096
% 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;
end
t=t+1;
if t==1600
t=1;
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:4096
toad{i}=tod{i};
end
k=1;
toyuan=cell(8,8);
for i=1:64
for j=1:64
toyuan{i,j}=toad{k};
k=k+1;
end
end
toyuan=cell2mat(toyuan);
% subplot(row,col,1),imshow(toyuan),title('添加水印后的置乱图像');
%对图像进行拼接,显示添加水印后原始图像效果
toad=cell(8,8);
for i=1:4096
toad{pn(i)}=tod{i};
end
k=1;
toyuan=cell(8,8);
for i=1:64
for j=1:64
toyuan{i,j}=toad{k};
k=k+1;
end
end
toyuan=cell2mat(toyuan);
% subplot(row,col,2),imshow(toyuan),title('测试:加水印后原始图像');
% figure,imshow(toyuan);
% 此处请屏蔽外层循环后开启!!!!!
A=toyuan;
end
%%%%%以下为提取水印过程
%开始读取水印
%1 首先将嵌入水印后图像按照加密过程进行置乱,并从中提取嵌入到其中的加密后的水印信息
%2 对提取出来的加密后的水印与混沌徐序列进行相与操作,得到原始水印图像
B=cell(8,8);%这里的k为你要分成大小为k*k的块
AA=A;
myinfor=0;
for myinter=1:1 %此处设置插值次数
for i=1:512/8
for j=1:512/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:512/8
for j=1:512/8
c{k}=B{i,j};
k=k+1;
end
end
x=linspace(0,0,4096);
x(1)=0.75+0.001+myinter/10+myouter/1000;
% 0.73得值获得好结果,其他结果不佳
t=linspace(0,0,4096);
m=0;
n=0;
for i=1:4095
x(i+1)=1-2*x(i)*x(i);
k=k+1;
end
[pm,pn]=sort(x);
%pn为排序后结果,pm为原始数列
tod=cell(8,8);
%定义tod为需要处理的图像块
for i=1:4096
tod{i}=c{pn(i)};
test=tod; %添加一个测试块,看看问题出现在什么地方
end
watermark=zeros(1,1600);
n=1;
for m=1:4096
% temp=cell2mat(toa{m});
temp=tod{m};
for i=1:8
for j=1:8
if temp(i,j)==maxvalueofxiangsu
watermark(n)=0;
n=n+1;
end
if temp(i,j)==maxvalueofxiangsu-1
watermark(n)=1;
n=n+1;
end
infor=infor+1;
end
end
end
%tod{m}=mat2cell(temp);
tod{m}=temp;
end
towatermark=zeros(40,40);
n=1;
for i=1:40
for j=1:40
towatermark(i,j)=watermark(n);
n=n+1;
end
end
% subplot(row,col,2),imshow(towatermark),title('测试:加水印后原始图像');
watermark2=zeros(1,1600);
for i=1:1600
watermark2(i)=watermark(i);
end
towatermark=xor(watermark2,waterlogistic);
towatermark2=zeros(40,40);
n=1;
for i=1:40
for j=1:40
towatermark2(i,j)=towatermark(n);
n=n+1;
end
end
subplot(row,col,1),imshow(towatermark2),title('提取水印图像');
%%%%% 以上为提取水印过程
% figure,imshow(toyuan),title('加载了隐藏信息的图片');
%toyuan
%上述语句用于显示每次加密后的载体图片
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 ;
%下面开始同时他的信息值和psnr值
myinforarray(w)=myinfor;
mypsnrarray(w)=uint8(g);
w=w+1;
end
%myinter
%for i=1:myouter
%myinforarray
%mypsnrarray
%figure,plot(myinforarray);
%figure,plot(mypsnrarray);
%myinforarray
%mypsnrarray
lilizong@gmail.com
实验仿真部分代码
row=1;
col=1;
%控制最终显示窗口中显示的图像行列数
myinforarray=linspace(0,0,5);
mypsnrarray=linspace(0,0,5);
w=1;
for myouter=1:1 %此处设置迭代次数,多次迭代可以计算优化效果
A=imread('e:oat.bmp');
% subplot(row,col,[1 2 4 5 7 8]),imshow(A),title('原始载体图像');
% subplot(row,col,1),imshow(A),title('原始载体图像');
[m,n]=size(A);
B=cell(8,8);%这里的k为你要分成大小为k*k的块
AA=A;
myinfor=0;
for myinter=1:1 %此处设置插值次数
for i=1:512/8
for j=1:512/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:512/8
for j=1:512/8
c{k}=B{i,j};
k=k+1;
end
end
%下面的代码用于生成混沌序列,生成4096个数字,然后排序
%得到一个位于4096之间的无重复值的混沌序列
x=linspace(0,0,4096);
x(1)=0.75+0.001+myinter/10+myouter/1000;
% 0.73得值获得好结果,其他结果不佳
t=linspace(0,0,4096);
m=0;
n=0;
for i=1:4095
x(i+1)=1-2*x(i)*x(i);
k=k+1;
end
[pm,pn]=sort(x);
%pn为排序后结果,pm为原始数列
tod=cell(8,8);
%定义tod为需要处理的图像块
for i=1:4096
tod{i}=c{pn(i)};
test=tod; %添加一个测试块,看看问题出现在什么地方
end
%对图像进行拼接,显示一下置乱后的图像
toad=cell(8,8);
for i=1:4096
toad{i}=tod{i};
end
k=1;
toyuan=cell(8,8);
for i=1:64
for j=1:64
toyuan{i,j}=toad{k};
k=k+1;
end
end
toyuan=cell2mat(toyuan);
% subplot(row,col,2),imshow(toyuan),title('分块置乱后载体图像');
%temp=cell(8,8);
%得到像素值数组xiang
xiangsu=linspace(0,0,256);
%对取得的图像快进行分析,找到最大像素值
for m=1:4096
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
maxvalueofxiangsu;
%开始对需要嵌入信息的图像快进行移位处理
for m=1:4096 %表示需要处理的块数
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('e:logo1.bmp');
b=im2bw(b);
[p,q]=size(b);
oo=p*q; %用来标识水印的总像素数
% watermark=reshape(b,1,oo);
watermark=zeros(1,oo);
n=1;
for i=1:p
for j=1:q
watermark(n)=b(i,j);
n=n+1;
end
end
% subplot(row,col,6),imshow(b),title('水印图像');
watermark;
waterlogistic=zeros(1,1600);
waterlogistic(1)=0.8;
for i=2:1600
waterlogistic(i)=1-2*waterlogistic(i-1)*waterlogistic(i-1);
end
for i=1:1600
if waterlogistic(i)>0
waterlogistic(i)=1;
else
waterlogistic(i)=0;
end
end
waterlogistic;
watermark=xor(watermark,waterlogistic);
n=1;
for i=1:40
for j=1:40
towatermark(i,j)=watermark(n);
n=n+1;
end
end
% subplot(row,col,8),imshow(towatermark),title('加密后水印图像');
yuanwatermark=xor(watermark,waterlogistic);
n=1;
for i=1:40
for j=1:40
yuanwatermark1(i,j)=yuanwatermark(n);
n=n+1;
end
end
% subplot(row,col,10),imshow(yuanwatermark1),title('测试:恢复后水印图像');
%嵌入方式为,找到最高位,如果水印为0,不发生变化,如果水印为1,最高位减1
%令tt为嵌入水印循环量,如果t的值超过水印的信息量,则开始进行新的循环。
t=1; %用来标识嵌入位
infor=0; %用来标识总共可以嵌入的信息
for m=1:4096
% 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;
end
t=t+1;
if t==1600
t=1;
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:4096
toad{i}=tod{i};
end
k=1;
toyuan=cell(8,8);
for i=1:64
for j=1:64
toyuan{i,j}=toad{k};
k=k+1;
end
end
toyuan=cell2mat(toyuan);
% subplot(row,col,1),imshow(toyuan),title('添加水印后的置乱图像');
%对图像进行拼接,显示添加水印后原始图像效果
toad=cell(8,8);
for i=1:4096
toad{pn(i)}=tod{i};
end
k=1;
toyuan=cell(8,8);
for i=1:64
for j=1:64
toyuan{i,j}=toad{k};
k=k+1;
end
end
toyuan=cell2mat(toyuan);
% subplot(row,col,2),imshow(toyuan),title('测试:加水印后原始图像');
% figure,imshow(toyuan);
% 此处请屏蔽外层循环后开启!!!!!
A=toyuan;
end
%%%%%以下为提取水印过程
%开始读取水印
%1 首先将嵌入水印后图像按照加密过程进行置乱,并从中提取嵌入到其中的加密后的水印信息
%2 对提取出来的加密后的水印与混沌徐序列进行相与操作,得到原始水印图像
B=cell(8,8);%这里的k为你要分成大小为k*k的块
AA=A;
myinfor=0;
for myinter=1:1 %此处设置插值次数
for i=1:512/8
for j=1:512/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:512/8
for j=1:512/8
c{k}=B{i,j};
k=k+1;
end
end
x=linspace(0,0,4096);
x(1)=0.75+0.001+myinter/10+myouter/1000;
% 0.73得值获得好结果,其他结果不佳
t=linspace(0,0,4096);
m=0;
n=0;
for i=1:4095
x(i+1)=1-2*x(i)*x(i);
k=k+1;
end
[pm,pn]=sort(x);
%pn为排序后结果,pm为原始数列
tod=cell(8,8);
%定义tod为需要处理的图像块
for i=1:4096
tod{i}=c{pn(i)};
test=tod; %添加一个测试块,看看问题出现在什么地方
end
watermark=zeros(1,1600);
n=1;
for m=1:4096
% temp=cell2mat(toa{m});
temp=tod{m};
for i=1:8
for j=1:8
if temp(i,j)==maxvalueofxiangsu
watermark(n)=0;
n=n+1;
end
if temp(i,j)==maxvalueofxiangsu-1
watermark(n)=1;
n=n+1;
end
infor=infor+1;
end
end
end
%tod{m}=mat2cell(temp);
tod{m}=temp;
end
towatermark=zeros(40,40);
n=1;
for i=1:40
for j=1:40
towatermark(i,j)=watermark(n);
n=n+1;
end
end
% subplot(row,col,2),imshow(towatermark),title('测试:加水印后原始图像');
watermark2=zeros(1,1600);
for i=1:1600
watermark2(i)=watermark(i);
end
towatermark=xor(watermark2,waterlogistic);
towatermark2=zeros(40,40);
n=1;
for i=1:40
for j=1:40
towatermark2(i,j)=towatermark(n);
n=n+1;
end
end
subplot(row,col,1),imshow(towatermark2),title('提取水印图像');
%%%%% 以上为提取水印过程
% figure,imshow(toyuan),title('加载了隐藏信息的图片');
%toyuan
%上述语句用于显示每次加密后的载体图片
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 ;
%下面开始同时他的信息值和psnr值
myinforarray(w)=myinfor;
mypsnrarray(w)=uint8(g);
w=w+1;
end
%myinter
%for i=1:myouter
%myinforarray
%mypsnrarray
%figure,plot(myinforarray);
%figure,plot(mypsnrarray);
%myinforarray
%mypsnrarray
- matlab 水印代码1转载lilizong
- NSGA-ⅡMATLAB代码(转载)
- 水印相关(转载)
- 水印相关(转载)
- Matlab去除图片上水印
- MATLAB 临时代码-1
- matlab转载
- lsb嵌入水印代码
- 分享一个水印代码
- Lodop 水印设置代码
- 水印的实现代码
- MATLAB视频水印与图像水印的区别?
- 基于MATLAB的数字水印技术研究
- 基于MATLAB的数字水印技术研究
- 数字水印嵌入的matlab程序
- 基于Matlab的数字水印技术研究
- 【matlab】基于DCT变换的数字水印
- 增加图片水印的代码
- 小型MRP系统
- 服装电子商务需迈过部门利益的槛
- 评一下淘宝改版
- 80%的销售来源于第4至11次的跟踪!
- 闲来无事,推推我原创的编辑器editminus
- matlab 水印代码1转载lilizong
- 400个写手,1.6万篇文章,16万独立访问人数/天
- 连ibm小机 时使用 host设置路径。
- 奥运来了
- 8.04
- 多谈执行少谈模式:生存最重要
- Security Tutorials系列第十二章:Building an Interface to Select One User Account from Many
- 无语
- python讀寫ini文件