|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, _3 }; q" {7 x+ C一、源代码
: }/ {' c, F9 I }9 N; r4 Y2 O# p, w0 P$ C$ z( R# r
- %Main embedding code of the steganography method
- %It is written by:Souradeep Mukhopadhyay
- %Mail:souradeepmukhopadhyay99@gmail.com
- %Phone:6291028852
- clc;
- clear all;
- my_image=imread('Picture 13623416.jpg');
- secret_image=imread('Picture 13623416.jpg');
- headerlength=32;
- [R,C]=size(my_image);
- % [R1,C1]=size(secret_image);
- [s,k]=size(secret_image);
- watermarklength=s*k;
- slength=uint8(headerlength/2);
- klength=uint8(headerlength-slength);
- slengthbits=dec2bin(s,slength);
- slengthbits=reshape(slengthbits',[],1);
- klengthbits=dec2bin(k,klength);
- klengthbits=reshape(klengthbits',[],1);
- sizebits=uint8(zeros(headerlength,1));
- for j=1:uint8(headerlength)
- if(j<=slength)
- sizebits(j)=uint8(slengthbits(j)-48);
- else
- sizebits(j)=uint8(klengthbits(j-klength)-48);
- end
- end
- actualbits=dec2bin(secret_image);
- actualbits=reshape(actualbits',[],1);
- totalnoofbitstobeembedded=watermarklength*8+headerlength;
- for i=1:totalnoofbitstobeembedded
- if(i<=headerlength)
- watermarkbits(i)=uint8(sizebits(i));
- else
- watermarkbits(i)=uint8(actualbits(i-headerlength)-48);
- end
- end
- blocksizeR=1;
- blocksizeC=3;
- wholeBlockRows = ceil(R / blocksizeR);
- wholeBlockCols = ceil(C / blocksizeC);
- % blocksize=2;
- % wholeBlockRows = floor(R / blocksize);
- % wholeBlockCols = floor(C / blocksize);
- % padding if the image is not divisible by block size
- if rem(R,blocksizeR)==0
- effectiveblocksizeR=rem(R,blocksizeR);
- else
- effectiveblocksizeR=blocksizeR-rem(R,blocksizeR);
- end
- if rem(C,blocksizeC)==0
- effectiveblocksizeC=rem(C,blocksizeC);
- else
- effectiveblocksizeC=blocksizeC-rem(C,blocksizeC);
- end
- my_image = padarray(my_image, [effectiveblocksizeR effectiveblocksizeC], 'replicate','pre');
- %imwrite(my_image,'E:\Dr. Ram Sarkar\MATLAB_SKG_PROG\ori_resize\lena512_gray_pad.bmp');
- [R,C]=size(my_image);
- bin=zeros(R,C,'uint8');
- flag=0;
- traversedbit=1;
- traversedbit=uint32(traversedbit);
- noOfbitEmbedded=[3 2 4];
- % loop over all rows and columns
- for i=1:wholeBlockRows
- for j=1:wholeBlockCols
- % get the block
- one_block=my_image((i-1)*blocksizeR+[1:blocksizeR],(j-1)*blocksizeC+[1:blocksizeC]);
- %Transform the block
- tn_one_block=uint32(LT(uint32(one_block)));
- backup_tn_one_block=tn_one_block;
- for m=1:blocksizeR
- for n=1:blocksizeC
- freqcom=tn_one_block(m,n);
- % backupfreqcom=freqcom;
- for l=1:noOfbitEmbedded(m*n)
- if(traversedbit<=totalnoofbitstobeembedded)
- if watermarkbits(traversedbit)==1
- freqcom=bitor(freqcom,(2^(l-1)));
- else
- freqcom=bitand(freqcom,bitcmp((2^(l-1)),'uint16'));
- end
- % tn_one_block(m,n)=freqcom;
- traversedbit=traversedbit+1;
- else
- flag=1;
- break;
- end
- if(flag)
- break;
- end
- end
- if(flag)
- break;
- end
- tn_one_block(m,n)=freqcom;
- end
- end
- tn_one_block(1,1)=frequencyAdjustment(backup_tn_one_block(1,1),tn_one_block(1,1),noOfbitEmbedded(1));
- tn_one_block(1,2)=frequencyAdjustment(backup_tn_one_block(1,2),tn_one_block(1,2),noOfbitEmbedded(2));
- tn_one_block(1,3)=frequencyAdjustment(backup_tn_one_block(1,3),tn_one_block(1,3),noOfbitEmbedded(3));
- In_one_block=uint32(ILT(int32(tn_one_block)));
- for m=1:blocksizeR
- for n=1:blocksizeC
- pixelval=In_one_block(m,n);
- bin((i-1)*blocksizeR+m,(j-1)*blocksizeC+n)=pixelval;
- end
- end
- end
- end
- imshow(bin);
- % PSNR=psnr(my_image,bin)
- %imwrite(bin,'E:\Dr. Ram Sarkar\MATLAB_SKG_PROG\stego_resize\lena512_gray_stego.bmp');6 D' R3 {& ~1 h1 x: O3 G
* S' U8 V# a. g: d5 u1 T5 b
/ a+ c2 B: j7 e' X3 A' M1 S! b
二、运行结果4 [: [9 ?7 f. h j$ O8 O8 K9 s0 c
( o) U1 i, Q/ }$ i9 Y4 e4 `
# k4 s2 j, u+ w9 f Z$ z# A8 x
* B& D* {2 D: z. t6 R0 U |
|