-
大小: 472KB文件類型: .rar金幣: 2下載: 1 次發布日期: 2021-04-12
- 語言: Matlab
- 標簽: watermarking??數字水印??小波變換??matlab??
資源簡介
基于小波變換的數字水印算法matlab代碼,含有各種攻擊的效果對比,對做畢設的同學應該有幫助
代碼片段和文件信息
clc
clear?all;
k=20;??????????
blocksize=8;???%?設置塊的大小
%?讀入原圖像
file_name=‘_lena_std_bw.bmp‘;
cover_object=double(imread(file_name));
?
%?原圖像的行數與列數
Mc=size(cover_object1);?????????%原圖像行數
Nc=size(cover_object2);?????????%原圖像列數
%?最大嵌入信息量
max_message=Mc*Nc/(blocksize^2);
%?讀入水印圖像
file_name=‘c.bmp‘;
message=double(imread(file_name));
%%水印圖像的行數與列數
Mm=size(message1);???????????????%水印行數
Nm=size(message2);???????????????%水印列數
message_vector=reshape(message1Mm*Nm);
%?檢查水印信息是否過大
if?(Mm*Nm>?max_message)
??error(‘水印太大‘)
end
%?產生watermarked_image并寫入原圖信息
watermarked_image=cover_object;
%?將圖像分塊嵌入
%?當?(22)?>?(23)?且?message_pad(kk)=0
%?當?(22)?(23)?且?message_pad(kk)=1
%%在提取水印時,如果cD1(22)>cD1(23)便是嵌入了水印的黑色像素,
%%反之則是嵌入了白色像素
x=1;
y=1;
h=waitbar(0‘嵌入水印,請等待‘);
for?(kk?=?1:length(message_vector))
??%?對塊進行DWT變換
??[cA1cH1cV1cD1]?=?dwt2(cover_object(x:x+blocksize-1y:y+blocksize-1)‘haar‘);
??%?如果?message_pad(kk)==?0
??if?(message_vector(kk)?==?0)
????%?且(22)?(23)?,交換它們
????if?(cD1(22)???????????temp=cD1(23);
??????????cD1(23)=cD1(22);
??????????cD1(22)=temp;
????end
??
??%?如果message_pad(kk)?==?1?
??elseif?(message_vector(kk)?==?1)
????
????%?且(22)?>?(23)?,交換它們
????if?(cD1(22)?>=?cD1(23))
??????????temp=cD1(23);
??????????cD1(23)=cD1(22);
??????????cD1(22)=temp;
????end
??end
??
??%?檢查(22)?,?(23)的差是否>=?k
??if?cD1(22)?>?cD1(23)
????if?cD1(22)?-?cD1(23)?????????cD1(22)=cD1(22)+(k/2);
????????cD1(23)=cD1(23)-(k/2);?????????
????end
??else?
??????if?cD1(23)?-?cD1(22)?????????cD1(23)=cD1(23)+(k/2);?
????????cD1(22)=cD1(22)-(k/2);
????end
??end
????
??%IDWT
??watermarked_image(x:x+blocksize-1y:y+blocksize-1)=?idwt2(cA1cH1cV1cD1‘haar‘[McNc]);
??%?移動到下一塊
??if?(x+blocksize)?>=?Nc
????x=1;
????y=y+blocksize;
??else
????x=x+blocksize;
??end
??waitbar(kk/length(message_vector)h);
end
close(h);
%?轉換為uint8并寫入dwt_watermarked.bmp
watermarked_image_uint=uint8(watermarked_image);
imwrite(watermarked_image_uint‘dwt_watermarked.bmp‘‘bmp‘);
%?計算psnr值
psnr=psnr(cover_objectwatermarked_image)?
%?顯示圖像
%figure(1)
%imshow(message[]);
%title(‘水印‘);
figure(2)
subplot(121);
imshow(watermarked_image[])
title(‘嵌入水印圖像‘)
subplot(122);
imshow(cover_object[]);
title(‘原圖‘);
%提取源碼
clear?all;
blocksize=8;???%?設置塊的大小
%?讀入嵌入水印圖像
file_name=‘dwt_watermarked.bmp‘;
watermarked_image=double(imread(file_name));
%?嵌入水印圖像的行數與列數
Mw=size(watermarked_image1);?????????%嵌入水印圖像的行數
Nw=size(watermarked_image2);?????????%嵌入水印圖像的列數
%?最大嵌入信息量
max_message=Mw*Nw/(blocksize^2);
%?讀入原始水印
file_name=‘c.bmp‘;
orig_watermark=double(imread(file_name));
%?原始水印的行數與列數
Mo=size(orig_watermark1);????%原始水印的行數
No=size(orig_watermark2);????%原始水印的列數
%?將圖像分塊提取水印
x=1;
y=1;
h=waitbar(0‘水印提取中,請等待‘);
for?(kk?=?1:max_message)?
??%?對塊進行dwt變換
??[cA1cH1cV1cD1]?=?dwt2(watermarked_im
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????263222??2009-04-03?14:02??算法代碼\attack.bmp
?????文件??????14877??2008-05-28?12:51??算法代碼\attackf.jpg
?????文件????????574??2008-05-23?15:33??算法代碼\c.BMP
?????文件????????969??2008-05-23?15:26??算法代碼\c.jpg
?????文件????????190??2008-05-23?15:31??算法代碼\d.BMP
?????文件???????7205??2008-05-27?23:54??算法代碼\dwt.asv
?????文件???????7172??2008-05-30?10:18??算法代碼\dwt.m
?????文件?????263222??2009-04-03?14:01??算法代碼\dwt_watermarked.bmp
?????文件??????44465??2008-05-23?14:58??算法代碼\lina.jpg
?????文件????????572??2008-05-12?11:03??算法代碼\psnr.m
????..A.SH.?????27648??2010-01-16?15:28??算法代碼\Thumbs.db
?????文件?????263222??2008-05-23?14:58??算法代碼\_lena_std_bw.bmp
?????目錄??????????0??2010-01-16?15:28??算法代碼
-----------?---------??----------?-----??----
???????????????893338????????????????????13
評論
共有 條評論