图形图像隐写代码.docx
- 文档编号:10029491
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:22
- 大小:17.58KB
图形图像隐写代码.docx
《图形图像隐写代码.docx》由会员分享,可在线阅读,更多相关《图形图像隐写代码.docx(22页珍藏版)》请在冰点文库上搜索。
图形图像隐写代码
毕业设计图形图像隐写,因而有一些代码,放上来,有的人可能做隐写的时候会难于处理这个,有自带的一个隐写代码。
可以没事拿来玩。
LSB使用文件头记录长度
DCT使用随机选块
设计的算法,选择相邻相同区域
代码均经过调试。
给一个网盘地址,里面有不带界面和带界面的代码各一份,界面可能有bug但是毕业设计完成也懒得找了。
这些代码看懂大约花费时间在1周左右,DCT相关运算请不用考虑,看懂流程就行。
为了答辩方便代码的注释都删了,有点抱歉
LSB隐写
Picture=imread('f:
\\123\LSB.png');
Double_Picture=double(Picture);
file=fopen('f:
\\123\\²âÊÔ.jpg','r');
[M,len]=fread(file,'ubit1');
len=len/8;
[m,n,x]=size(Picture);
len
iflen>m*n-20
error('载体太小无法隐写');
break;
end
iflen<256
number=0;
elseif256<=len&&4095>=len
number=1;
elseif4096>=len&&65535>=len
number=2;
else
number=3;
end
end
end
number
ifnumber==0
Guide=8;
elseifnumber==1
Guide=12;
elseifnumber==2
Guide=16;
else
Guide=20;
end
end
end
numLen=dec2bin(number);
num=dec2bin(len);
[u,v]=size(numLen);
fori=1:
20
Picture(1,i,1)=Picture(1,i,1)-mod(Picture(1,i,1),2);
end
fori=1:
v
Picture(1,i,1)=mod(numLen(1,v+1-i),2)+Picture(1,i,1);
end
[u,v]=size(num);
fori=3:
v+2
Picture(1,i,1)=mod(num(1,v+3-i),2)+Picture(1,i,1);
end
p=1;%ÐÅÏ¢¼ÆÊý
len=len*8;
forj=Guide+3:
n
Picture(1,j,1)=Picture(1,j,1)-mod(Picture(1,j,1),2)+M(p,1);
ifp==len
break;
end
p=p+1;
end
fori=2:
m
forj=1:
n
Picture(i,j,1)=Picture(i,j,1)-mod(Picture(i,j,1),2)+M(p,1);
ifp==len
break
end
p=p+1;
end;
ifp==len
break
end
end
imwrite(Picture,'f:
\\123\\Xlsb.png');
OriPicture=imread('f:
\\123\LSB.png');
subplot(121);
imshow(OriPicture);title('修改前图片');
subplot(122);
imshow(Picture);title('修改后图片');
LSB隐写提取
Picture=imread('f:
\\123\\xLSB.png');
Double_Picture=double(Picture);
frr=fopen('f:
\\123\\xl.jpg','w');
number=0;
fori=1:
2
number=mod(Double_Picture(1,i,1),2)*2^(i-1)+number;
end
number
ifnumber==0
numLen=8;
elseifnumber==1
numLen=12;
elseifnumber==2
numLen=16;
else
numLen=20;
end
end
end
number=0;
fori=3:
numLen
number=mod(Double_Picture(1,i,1),2)*2^(i-3)+number;
end
len=number*8;
Double_Picture=uint8(Double_Picture);
[m,n,x]=size(Double_Picture);
p=1;
forj=numLen+3:
n
ifmod(Picture(1,j,1),2)==1
fwrite(frr,1,'ubit1');
end
ifmod(Picture(1,j,1),2)==0
fwrite(frr,0,'ubit1');
end
if(p==len)
break;
end
p=p+1;
end
fori=2:
m
if(p==len)
break;
end
forj=1:
n
ifmod(Picture(i,j,1),2)==1
fwrite(frr,1,'ubit1');
else
fwrite(frr,0,'ubit1');
end
if(p==len)
break;
end
p=p+1;
end
end
fclose(frr);
DCT隐写
image=imread('f:
\\123\\DCT.jpg');
imagegoal='f:
\\123\\xDCT5.jpg';
msg='f:
\\123\\Y.txt';
key=153;
alpha=1;
[count,msg,result]=hidedctadv(image,imagegoal,msg,key,alpha);
count
subplot(111);
imshow(result);
title('隐写后');
DCT提取
image=imread('f:
\\123\\xDCT5.jpg');
msg='f:
\\123\\xDCT.txt';
key=153;
count=9184;
result=extractdctadv(image,msg,key,count);
DCT隐写相关支持函数
Hidedctadv.m
function[count,msg,result]=hidedctadv(image,imagegoal,msg,key,alpha)
frr=fopen(msg,'r');
[msg,count]=fread(frr,'ubit1');
fclose(frr);
data0=image;
data0=double(data0)/255;
data=data0(:
:
1);
T=dctmtx(8);
DCTrgb=blkproc(data,[88],'P1*x*P2',T,T');
DCTrgb0=DCTrgb;
[row,col]=size(DCTrgb);
row=floor(row/8);
col=floor(col/8);
a=zeros([rowcol]);
[k1,k2]=randinterval(a,count,key);
fori=1:
count
k1(1,i)=(k1(1,i)-1)*8+1;
k2(1,i)=(k2(1,i)-1)*8+1;
end
temp=0;
p=0;
fori=1:
count
ifmsg(i,1)==0
ifDCTrgb(k1(i)+4,k2(i)+1)>DCTrgb(k1(i)+3,k2(i)+2)
temp=DCTrgb(k1(i)+4,k2(i)+1);
DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2);
DCTrgb(k1(i)+3,k2(i)+2)=temp;
end
else
ifDCTrgb(k1(i)+4,k2(i)+1) temp=DCTrgb(k1(i)+4,k2(i)+1); DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+3,k2(i)+2); DCTrgb(k1(i)+3,k2(i)+2)=temp; end p=p+1; end ifDCTrgb(k1(i)+4,k2(i)+1)>DCTrgb(k1(i)+3,k2(i)+2) DCTrgb(k1(i)+3,k2(i)+2)=DCTrgb(k1(i)+3,k2(i)+2)-alpha; else DCTrgb(k1(i)+4,k2(i)+1)=DCTrgb(k1(i)+4,k2(i)+1)-alpha; end end DCTrgb1=DCTrgb; data=blkproc(DCTrgb,[88],'P1*x*P2',T',T); result=data0; result(: : 1)=data; imwrite(result,imagegoal); extractdctadv.m functionresult=extractdctadv(image,msg,key,count) data0=image; data0=double(data0)/255; data=data0(: : 1); T=dctmtx(8); DCTcheck=blkproc(data,[88],'P1*x*P2',T,T'); [row,col]=size(DCTcheck); row=floor(row/8); col=floor(col/8); a=zeros([rowcol]); [k1,k2]=randinterval(a,count,key); fori=1: count k1(1,i)=(k1(1,i)-1)*8+1; k2(1,i)=(k2(1,i)-1)*8+1; end frr=fopen(msg,'w'); p=0; fori=1: count ifDCTcheck(k1(i)+4,k2(i)+1) fwrite(frr,0,'ubit1'); result(i,1)=0; else fwrite(frr,1,'ubit1'); result(i,1)=1; p=p+1; end end fclose(frr); randinterval.m function[row,col]=randinterval(matrix,count,key) [m,n]=size(matrix); interval1=floor(m*n/count)+1; interval2=interval1-2; ifinterval2<=0 error('载体太小不能将秘密信息隐藏进去! '); end rand('seed',key); a=rand(1,count); row=zeros([1count]); col=zeros([1count]); r=1;c=1; row(1,1)=r;col(1,1)=c; fori=2: count ifa(i)>=0.5c=c+interval1; elsec=c+interval2; end ifc>nr=r+1; ifr>merror('载体太小不能将秘密信息隐藏进去'); end c=mod(c,n); ifc==0c=1; end end row(1,i)=r; col(1,i)=c; end 一个毕设时设计的算法,相邻同像素同样修改 隐写函数 Picture=imread('f: \\123\DLSB.png'); [m,n,x]=size(Picture); a=zeros([mn]); number=0; p=1; file=fopen('f: \\123\\DLSB.txt','r'); [M,len]=fread(file,'ubit1'); len fori=1: m forj=1: n ifi==1&&j==1 a(i,j)=1; number=number+1; a=FcmLSB(a,Picture,i,j,m,n); elseifa(i,j)==0 Pair=zeros([41]); a(i,j)=5; Pair=Select(a,Picture,i,j,m,n,Pair); fork=1: 4 ifPair(k,1)==0 a(i,j)=k; break; end end number=number+1; a=FcmLSB(a,Picture,i,j,m,n); iflen==p break; end p=p+1; end end end iflen==p break; end end iflen>number error('ÔØÌå̫С²»Äܽ«ÃØÃÜÐÅÏ¢Òþ²Ø½øÈ¥! '); break; end p=1; fori=1: m forj=1: n ifi==1&&j==1 t=a(i,j); a(i,j)=0; Picture(i,j,1)=Picture(i,j,1)-mod(Picture(i,j,1),2)+M(p,1); ifp==len break end p=p+1; [Picture,a]=HLSB(a,Picture,i,j,m,n,t,Picture(i,j,1)); elseifa(i,j)~=0 t=a(i,j); a(i,j)=0; Picture(i,j,1)=Picture(i,j,1)-mod(Picture(i,j,1),2)+M(p,1); ifp==len break end p=p+1; [Picture,a]=HLSB(a,Picture,i,j,m,n,t,Picture(i,j,1)); end end end end imwrite(Picture,'f: \\123\\xDLSB.png'); subplot(111); imshow(Picture);title('Ð޸ĺó'); 提取函数 OriPicture=imread('f: \\123\DLSB.png'); [m,n,x]=size(OriPicture); a=zeros([mn]); number=0; len=64; p=1; fori=1: m forj=1: n ifi==1&&j==1 a(i,j)=1; number=number+1; a=FcmLSB(a,OriPicture,i,j,m,n); elseifa(i,j)==0 Pair=zeros([41]); a(i,j)=5; Pair=Select(a,OriPicture,i,j,m,n,Pair); fork=1: 4 ifPair(k,1)==0 a(i,j)=k; break; end end number=number+1; a=FcmLSB(a,OriPicture,i,j,m,n); iflen==p break; end p=p+1; end end end iflen==p break; end end Picture=imread('f: \\123\xDLSB.png'); frr=fopen('f: \\123\\XS.txt','w'); p=1; fori=1: m forj=1: n ifi==1&&j==1 t=a(i,j); a(i,j)=0; ifmod(Picture(i,j,1),2)==1 fwrite(frr,1,'ubit1'); else fwrite(frr,0,'ubit1'); end [a]=DLSB(a,Picture,i,j,m,n,t); elseifa(i,j)~=0 t=a(i,j); a(i,j)=0; ifmod(Picture(i,j,1),2)==1 fwrite(frr,1,'ubit1'); else fwrite(frr,0,'ubit1'); end p=p+1; ifp==len break end [a]=DLSB(a,Picture,i,j,m,n,t); end end end ifp==len break end end fclose(frr); 相关运算函数 Select.m function[Pair]=Select(a,Picture,i,j,m,n,Pair) ifi==m||a(i+1,j)~=0 Pair=DetMa(a,i,j,m,n,Pair); elseifPicture(i,j,1)==Picture(i+1,j,1) a(i+1,j)=5; Pair=DetMa(a,i,j,m,n,Pair); Pair=Select(a,Picture,i+1,j,m,n,Pair); end end ifi==1||a(i-1,j)~=0 Pair=DetMa(a,i,j,m,n,Pair); elseifPicture(i,j,1)==Picture(i-1,j,1) a(i-1,j)=5; Pair=DetMa(a,i,j,m,n,Pair); Pair=Select(a,Picture,i-1,j,m,n,Pair); end end ifj==n||a(i,j+1)~=0 Pair=DetMa(a,i,j,m,n,Pair); elseifPicture(i,j,1)==Picture(i,j+1,1) a(i,j+1)=5; Pair=DetMa(a,i,j,m,n,Pair); Pair=Select(a,Picture,i,j+1,m,n,Pair); end end ifj==1||a(i,j-1)~=0 Pair=DetMa(a,i,j,m,n,Pair); elseifPicture(i,j,1)==Picture(i,j-1,1) a(i,j-1)=5; Pair=DetMa(a,i,j,m,n,Pair); Pair=Select(a,Picture,i,j-1,m,n,Pair); end end FcmLSB.m function[a]=FcmLSB(a,Picture,i,j,m,n) ifi==m||a(i+1,j)~=0 elseifPicture(i,j,1)==Picture(i+1,j,1) a(i+1,j)=a(i,j); [a]=FcmLSB(a,Picture,i+1,j,m,n); end end ifi==1||a(i-1,j)~=0 elseifPicture(i,j,1)==Picture(i-1,j,1) a(i-1,j)=a(i,j); [a]=FcmLSB(a,Picture,i-1,j,m,n); end end ifj==n||a(i,j+1)~=0 elseifPicture(i,j,1)==Picture(i,j+1,1) a(i,j+1)=a(i,j); [a]=FcmLSB(a,Picture,i,j+1,m,n); end end ifj==1||a(i,j-1)~=0 elseifPicture(i,j,1)==Picture(i,j-1,1) a(i,j-1)=a(i,j); [a]=FcmLSB(a,Picture,i,j-1,m,n); end end DetMa.m function[Pair]=DetMa(a,i,j,m,n,Pair) ifi Pair(a(i+1,j),1)=1; end ifi>1&&a(i-1,j)~=0 Pair(a(i-1,j),1)=1; end ifj Pair(a(i,j+1),1)=1; end ifj>1&&a(i,j-1)~=0 Pair(a(i,j-1),1)=1; end DLSB.m function[a]=DLSB(a,Picture,i,j,m,n,t) ifi==m||a(i+1,j)==0 elseifa(i+1,j)==t a(i+1,j)=0; [a]=DLSB(a,Picture,i+1,j,m,n,t); end end ifi==1||a(i-1,j)==0 elseifa(i-1,j)==t a(i-1,j)=0; [a]=DLSB(a,Picture,i-1,j,m,n,t); end end ifj==n||a(i,j+1)==0 e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形图像 代码