3 一個用MATLAB編寫的數字水印算法執行個體
為證明MATLAB的高效性與實作簡便性,給出在Windows98環境下MATLAB5.3中調試通過的完整源程式。
l 嵌入水印
%定義常量size=256;block=8;blockno=size/block;LENGTH=size*size/64;
Alpha1=0.02; Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size);
BW=zeros(size,size); block_dct1=zeros(block,block);
%産生高斯水印,并顯示水印資訊;randn("seed",10);mark=randn(1,LENGTH); subplot(2,2,1);plot(mark);title("watermarc:Gaussian noise");
%顯示原圖
subplot(2,2,2);I=imread("lena264_264","bmp");
imshow(I);title("origine image:I");
%顯示prewitt為算子的邊緣圖
BW=edge(I,"prewitt");subplot(2,2,3);imshow(BW);
title("edge of origine image");
%嵌入水印
k=1;
for m=1:blockno
for n=1:blockno
x=(m-1)*block+1; y=(n-1)*block+1;
block_dct1=I(x:x+block-1,y:y+block-1);
block_dct1=dct2(block_dct1);
BW_8_8=BW(x:x+block-1,y:y+block-1);
if m<=1|n<=1
T=0;