Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2008-06-11
年龄: 42
帖子: 6
声望力: 0 ![]() |
![]()
%DCT水印嵌入源代码
%%以字符串为嵌入水印 %定义常量 size=256; block=8; blockno=size/block;%一行有32格 LENGTH=size*size/64; Alpha1=0.025; Alpha2=0.1; T1=3; I=zeros(size,size);%产生全矩阵 D=zeros(size,size); BW=zeros(size,size); Block_dct1=zeros(block,block); %产生水印,并显示水印信息; subplot(3,2,1); Info='dcf'; InfoStrSize=length(Info); %将字符串转换为位数组 array=zeros(1,InfoStrSize*8); for m=1:InfoStrSize Infochar=double(Info(m)); %% 'c'为99 for n=1:8 array(8*(m-1)+n)=bitget(Infochar,n);%%获得Infochar第n位的值 end end plot(array); title('原始水印信息'); %显示原图 subplot(3,2,2); i=imread('lena.bmp'); imshow(i,[]); title('原始图像') %显示prewitt为算子的边缘图 BW=edge(i,'prewitt'); subplot(3,2,3);imshow(BW); Title('原始图像边缘图'); %嵌入水印 l=1; k=1; for m=1:blockno for n=1:blockno x=(m-1)*block+1; y=(n-1)*block+1;%算出每格图像的坐标(x,y),block=8,8*8的图像小格 block_dct1=i(x:x+block-1,y:y+block-1);%取原始图像小格中的像素点到block_dct1矩阵中。 block_dct1=dct2(block_dct1);%对二维数组进行离散余弦变换。dct是有损压缩如jpeg使用的技术。Dct是可逆的运算 BW_8_8=BW(x:x+block-1,y:y+block-1);%得到边界矩阵。 if m<=1|n<=1 T=0; else T=sum(BW_8_8); T=sum(T); end if T>T1 Alpha=Alpha2; %block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k)); if l<=(InfoStrSize*8) block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*array(l)); l=l+1; end else Alpha=Alpha1; % block_dct1(1,1)=block_dct1(1,1)*(1+Alpha*mark(k)); end Block_dct=idct2(block_dct1); D(x:x+block-1,y:y+block-1)=Block_dct; k=k+1; end end %显示嵌入水印后的图像 subplot(3,2,4);imshow(D,[]);title('嵌入水印图像') %保存该图像 D=uint8(D); imwrite(D,'marked.bmp'); 此帖于 2012-10-06 10:44 被 cqviolet 编辑。 原因: 请版主删除此贴 |
![]() |
![]() |
![]() |
主题工具 | |
显示模式 | |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[求助]origin画图 | jqlorigin | Origin论坛 | 0 | 2008-09-02 20:29 |
【资料】matlab基础资源(经典+实用) | dnping | MATLAB论坛 | 47 | 2008-03-20 18:33 |
如何在重压之下保持冷静 | ciji1995 | 学术科研 | 3 | 2007-07-31 21:09 |
【求助】给一幅图像添加个坐标轴 | sangsang129 | MATLAB论坛 | 0 | 2007-06-19 10:36 |