⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 embed2.m

📁 针对二值图像的广泛应用
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%对经过扫描并存储的原图进行水印的嵌入            %%
%%其中水印图像为二维灰度图像                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clear all;
%*************************************************************************************
%一:调用原始图像
data=imread('E:\watermark\use picture\lena512.bmp','bmp');
[m,n]=size(data)
%显示原图
fsize=512;
size=512
mark=32
nu=size/16;
number=nu*nu
wm=rand(32,32);                 %为了试验 先设出水印
   
%BW1=im2bw(data,0.4);
BW1=data;%zeros(fsize,fsize);
%m=length(BW1)
%n=ndims(BW1)

%for i=(fsize-m)/2:(fsize+m)/2
 %   for j=(fsize-n)/2:(fsize+n)/2
  %      for u=1:m
   %         for v=1:n
    %            a=BW1(u,v);
     %           BW(i,j)=a;
      %      end
       % end    
   % end
%end
%a=BW(1:m,1:n);
%BW((fsize-m)/2+1:(fsize+m)/2,(fsize-n)/2+1:(fsize+n)/2)=a;

subplot(2,2,1);
imagesc(BW1);
title('original BW image');
axis equal;
colormap(gray);
%构造二值图像

%*************************************************************************************
%二:作一维DWT,分块并得到Fn(1,n)
[a,h,v,d]=dwt2(BW1,'db1');
%subplot(2,2,2);
%imagesc(BW);
%colormap(gray);
%axis equal;
k=1;

for i=1:nu
   for j=1:nu
      m=a(1+8*(i-1):8+8*(i-1),1+8*(j-1):8+8*(j-1));
      block(1:8,1:8,i,j)=m;
   end
end

for i=1:nu
   for j=1:nu
      m=dct2(block(1:8,1:8,i,j));
      d2(1:8,1:8,i,j)=m;
   end
end

for i=1:nu
    for j=1:nu
        m=d2(1,1,i,j);
        Fn(1,k)=m;
        k=k+1;
    end
end

%***********************************************************************************

%三:产生水印
%wm1=imread('H:\袭乐宣\watermarking\我的程序\picture\2mark.bmp');
%wm=im2bw(wm1);
%wm=mat2gray(wm2)

wm2=[0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,1,1,1,0,1,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,0,1,0,0,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,1];                %test%
for i=1:128
    w(1,i)=0;
end
for i=1:256
    for j=0:2
        a=wm2(1,i);
        w(1,128+256*j+i)=a;
    end    
end
for i=128*7+1:1024
    w(1,i)=0;
end    

k=1;
for i=1:mark
    for j=1:mark
        m=w(1,k);
        wm(i,j)=m;   
        k=k+1;
    end
end

subplot(2,2,2);
imagesc(wm);
title('watermark image');
axis equal;
color(gray);

rand('state',0);
tem=randperm(number);
for m=1:1024
    w1(1,m)=w(1,tem(m));
end

save watermark w1;

%************************************************************************************
%四:水印的嵌入
F=zeros(1,1024);
Q=0.71;

for i=1:1024
    z=Fn(1,i);
    m=mod(z,Q);
    if w1(1,i)==0
        if m>=0&m<Q*3/4                    %mod ==Q/4
            F(1,i)=Fn(1,i)+Q/4-m;
        elseif m>=Q*3/4&m<Q    
            F(1,i)=Fn(1,i)+Q*5/4-m;
        end
    elseif w1(1,i)==1 
        %if z==0&m>0&m<Q/4
            %F(1,i)=0;
            %elseif z~=0&m>0&m<Q/4                       %mod==   
            %F(1,i)=Fn(1,i)-Q/4-m;
            %elseif m>=Q/4&m<Q     
            %F(1,i)=Fn(1,i)+Q*3/4-m;
        %if m>=0&m<Q/4  
            %mod ==Q/4
        if z>=0&z<=Q/8
            F(1,i)=Q/2;
        elseif m>=0&m<Q/4   
            F(1,i)=Fn(1,i)-Q/4+m;
        elseif m>=Q/4&m<Q    
            F(1,i)=Fn(1,i)+Q*3/4-m;
        end   
    end
end

%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%五:反变换得到水印后的图像
k=1;
for i=1:nu
    for j=1:nu
        m=F(1,k);
        d2(1,1,i,j)=m;
        k=k+1;
    end
end

for i=1:nu
   for j=1:nu
      m=idct2(d2(1:8,1:8,i,j));
      block(1:8,1:8,i,j)=m;
   end
end

for i=1:nu
   for j=1:nu
    m=block(1:8,1:8,i,j);
    whole(1+8*(i-1):8+8*(i-1),1+8*(j-1):8+8*(j-1))=m;
   end
end

data2=idwt2(whole,h,v,d,'db1');
subplot(2,2,3);
imagesc(data2);
title('watermarked image');
axis equal;

%result=im2bw(data2,0.4);
imwrite(uint8(data2),'E:\watermark\use picture\re.bmp','bmp');
%subplot(2,2,4);
%imagesc(result);
%title('watermarked BW image');
%axis equal;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -