资源简介
本文图像水印源代码,要是用的话请把里面的后缀为(.bmp)的图片变为自己的(.bmp)然后将源代码中在相关的代码变为对应的久可以
代码片段和文件信息
clear all;
k=12; %设置嵌入强度
blocksize=8; % 设置块的大小
% 读入原图像
%file_name=‘lena.jpeg‘;
%cover_object=double(imread(file_name));
A=imread(‘lena.jpeg‘);
B=rgb2gray(A);
cover_object=double(B);
% 原图像的行数与列数
Mc=size(cover_object1); %原图像行数
Nc=size(cover_object2); %原图像列数
% 最大嵌入信息量
max_message=Mc*Nc/(blocksize^2);
% 读入水印图像
file_name=‘weili.bmp‘;
message=double(imread(file_name));
%%水印图像的行数与列数
Mm=size(message1); %水印行数
Nm=size(message2); %水印列数
% 重塑消息发送到一个载体
%message=round(message(:)./256);
%message=round(reshape(messageMm*Nm1)./256);
%[MmNm]=size(message);
%N=Mm*Nm;
%message=reshape(messageN1);
message=reshape(message1Mm*Nm);
% 检查水印信息是否过大
if (length(message) > max_message)
error(‘水印太大‘)
end
% 将message_vector置为全1向量,并将水印信息写入
message_pad=ones(1max_message);
message_pad(1:length(message))=message;
% 产生watermarked_image并写入原图信息
watermarked_image=cover_object;
% 将图像分块嵌入
% 当 (52) > (43) 且 message(kk)=0
% 当 (52) < (43) 且 message(kk)=1
%%经过分析可以得出结论:在提取水印时,如果dct_block(52)-dct_block(43)>=k便是嵌入了水印的黑色像素,
%%反之则是嵌入了白色像素
x=1;
y=1;
for kk = 1:length(message_pad)
% 对块进行DCT变换
dct_block=dct2(cover_object(y:y+blocksize-1x:x+blocksize-1));
% 如果 message bit is black
if (message_pad(kk) == 0)
% 且 (52) < (43) 交换它们
if (dct_block(52) < dct_block(43))
temp=dct_block(43);
dct_block(43)=dct_block(52);
dct_block(52)=temp;
end
% 如果 message bit is white
elseif (message_pad(kk) == 1)
% 且 (52) > =(43) ,交换它们
if (dct_block(52)>= dct_block(43))
temp=dct_block(43);
dct_block(43)=dct_block(52);
dct_block(52)=temp;
end
end
% 检查(52)与(4,3)的差值是否在k与2k之间,如果不是,通过以下算法,使其差值在其之间
if dct_block(52) > dct_block(43)
if dct_block(52) - dct_block(43) < k
dct_block(52)=dct_block(52)+(k/2);
dct_block(43)=dct_block(43)-(k/2);
elseif dct_block(52) - dct_block(43) >2*k
dct_block(52)=dct_block(52)-(k/2);
dct_block(43)=dct_block(43)+(k/2);
end
else if dct_block(43) - dct_block(52) < k
dct_block(43)=dct_block(43)+(k/2);
dct_block(52)=dct_block(52)-(k/2);
elseif dct_block(43)-dct_block(52) >2*k
dct_block(52)=dct_block(52)+(k/2);
dct_block(43)=dct_block(43)-(k/2);
end
end
% 将块逆变换为空间域
watermarked_image(y:y+blocksize-1x:x+blocksize-1)=idct2(dct_block);
% 移动到下一块
if (x+blocksize) >= Nc
x=1;
y=y+blocksize;
else
x=x+blocksize;
end
end
% 转换为uint8并写入 watermarked_image.bmp
watermarked_image_int=uint8(watermarked_image);
imwrite(watermarked_image_int‘waterma
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-10-17 21:57 算法实现\
文件 22625 2012-06-03 16:12 算法实现\JPEG.jpeg
文件 3689 2012-06-03 16:03 算法实现\JPEG_em
文件 3689 2012-06-05 15:59 算法实现\JPEG_em
文件 1421 2012-06-05 16:00 算法实现\JPEG_recover.m
文件 122 2012-06-05 15:05 算法实现\Unti
文件 772 2012-05-30 10:18 算法实现\Unti
文件 772 2012-05-30 10:21 算法实现\Unti
文件 15767 2012-06-03 16:12 算法实现\attackf.jpg
文件 3729 2012-06-05 15:39 算法实现\croping.asv
文件 349 2012-06-05 15:42 算法实现\croping.jpeg
文件 3728 2012-06-05 15:42 算法实现\croping.m
文件 1423 2012-06-05 15:25 算法实现\croping2.m
文件 3309 2012-06-05 15:50 算法实现\dct1_em
文件 3310 2012-06-05 15:48 算法实现\dct1_em
文件 1427 2012-06-05 15:48 算法实现\dct1_recover.m
文件 83223 2012-06-03 15:09 算法实现\gaussian.jpeg
文件 3424 2012-06-03 13:32 算法实现\gaussian_em
文件 3481 2012-06-05 15:58 算法实现\gaussian_em
文件 1427 2012-06-05 15:58 算法实现\gaussian_recover.m
文件 31531 2012-05-28 10:32 算法实现\lena.jpeg
文件 473 2012-05-28 10:32 算法实现\nc.m
文件 57358 2012-06-03 13:35 算法实现\noise.jpeg
文件 3607 2012-06-05 16:01 算法实现\noise_em
文件 1422 2012-06-05 16:02 算法实现\noise_recover.m
文件 478 2012-05-28 10:32 算法实现\psnr.m
文件 3000 2012-06-05 15:06 算法实现\rotate.jpeg
文件 3582 2012-06-02 21:17 算法实现\rotate_em
文件 3419 2012-06-05 16:02 算法实现\rotate_em
文件 1423 2012-06-05 16:03 算法实现\rotate_recover.m
文件 574 2012-06-02 16:29 算法实现\wangbo.bmp
............此处省略1个文件信息
- 上一篇:山东大学编译原理
- 下一篇:串口监控 BUSHOUND5.0完美版
评论
共有 条评论