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

📄 blind.m

📁 一种利用小波变换的水印算法
💻 M
字号:
close all;
clear all;

%**************************************************************************
%**   二次采样以确定像素间的相关性,然后对两个采样结果同时嵌入水印,         **
%**   利用的是整数提升小波变换                                            **
%**************************************************************************

dat=imread('e:\watermark\use picture\lena256','bmp');
watermark=imread('e:\watermark\use picture\mark64.bmp','bmp');

data1=dat(1:2:256,1:2:256);
data2=dat(2:2:256,2:2:256);                          % 二次采样得到2个256的相关图像,1-4 2-3
data3=dat(1:2:256,2:2:256);
data4=dat(2:2:256,1:2:256);

for i=1:64
    for j=1:64
        if watermark(i,j)<128
            water1(i,j)=0;
        else
            water1(i,j)=1;
        end
        u=mod(watermark(i,j),128);
        if u<64
            water2(i,j)=0;
        else
            water2(i,j)=1;
        end
        u=mod(u,64);
        if u<32
            water3(i,j)=0;
        else
            water3(i,j)=1;
        end
        u=mod(u,32);
        if u<16
            water4(i,j)=0;
        else
            water4(i,j)=1;
        end
        u=mod(u,16);
        if u<8
            water5(i,j)=0;
        else
            water5(i,j)=1;
        end
        u=mod(u,8);
        if u<4
            water6(i,j)=0;
        else
            water6(i,j)=1;
        end
        u=mod(u,4);
        if u<2
            water7(i,j)=0;
        else
            water7(i,j)=1;
        end
        water8(i,j)=mod(watermark(i,j),2);
    end                                                       % 生成水印八位面
end
%********************************************************
% 整数小波变换
els ={'p',[-0.125 0.125],0};
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a1,h1,v1,d1]=lwt2(double(data1),lsnewint);
% [aa1,hh1,vv1,dd1]=lwt2(double(a1),lsnewint);
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a2,h2,v2,d2]=lwt2(double(data2),lsnewint);
% [aa2,hh2,vv2,dd2]=lwt2(double(a2),lsnewint);
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a3,h3,v3,d3]=lwt2(double(data3),lsnewint);
% [aa3,hh3,vv3,dd3]=lwt2(double(a3),lsnewint);
lshaarInt=liftwave('haar','int2int');
lsnewint=addlift(lshaarInt,els);
[a4,h4,v4,d4]=lwt2(double(data4),lsnewint);
% [aa4,hh4,vv4,dd4]=lwt2(double(a4),lsnewint);
%*******************************************************
% embed progress
alfa=0.05;
for i=1:64
    for j=1:64
        if water1(i,j)==0
            d1(i,j)=d1(i,j)*(1-alfa);
        else
            d1(i,j)=d1(i,j)*(1+alfa);
        end
        if water2(i,j)==0
            d2(i,j)=d2(i,j)*(1-alfa);
        else
            d2(i,j)=d2(i,j)*(1+alfa);
        end
        if water3(i,j)==0
            d3(i,j)=d3(i,j)*(1-alfa);
        else
            d3(i,j)=d3(i,j)*(1+alfa);
        end
        if water4(i,j)==0
            d1(i,j)=d1(i,j)*(1-alfa);
        else
            d1(i,j)=d1(i,j)*(1+alfa);
        end
        if water5(i,j)==0
            d2(i,j)=d2(i,j)*(1-alfa);
        else
            d2(i,j)=d2(i,j)*(1+alfa);
        end
        if water6(i,j)==0
            d3(i,j)=d3(i,j)*(1-alfa);
        else
            d3(i,j)=d3(i,j)*(1+alfa);
        end
        if water7(i,j)==0
            d1(i,j)=d1(i,j)*(1-alfa);
        else
            d1(i,j)=d1(i,j)*(1+alfa);
        end
        if water8(i,j)==0
            d2(i,j)=d2(i,j)*(1-alfa);
        else
            d2(i,j)=d2(i,j)*(1+alfa);
        end
    end
end







%**********************************************
% a1=ilwt2(aa1,hh1,vv1,dd1,lsnewint);
% a2=ilwt2(aa2,hh2,vv2,dd2,lsnewint);
% a3=ilwt2(aa3,hh3,vv3,dd3,lsnewint);
% a4=ilwt2(aa4,hh4,vv4,dd4,lsnewint);
dat1=ilwt2(a1,h1,v1,d1,lsnewint);
dat2=ilwt2(a2,h2,v2,d2,lsnewint);
dat3=ilwt2(a3,h3,v3,d3,lsnewint);
dat4=ilwt2(a4,h4,v4,d4,lsnewint);

nedat(1:2:256,1:2:256)=dat1;
nedat(2:2:256,2:2:256)=dat2;
nedat(1:2:256,2:2:256)=dat3;
nedat(2:2:256,1:2:256)=dat4;
c=corr2(dat,nedat)
figure();
subplot(2,2,1);
imagesc(dat);
colormap(gray);
axis image;
title('original image');
subplot(2,2,2);
imagesc(watermark);
colormap(gray);
axis image;
title('original watermark');
subplot(2,2,3);
imagesc(nedat);
axis image;
title('embeded result image');

%*****************************************************
% detect progress

%*****************************************************
for i=1:64
    for j=1:64
        detect(i,j)=water1(i,j)*128+water2(i,j)*64+water3(i,j)*32+water4(i,j)*16+water5(i,j)*8+water6(i,j)*4+water7(i,j)*2+water8(i,j);
    end
end
figure();
subplot(2,1,1);
imagesc(watermark);
axis image;
colormap(gray);
subplot(2,1,2);
imagesc(detect);
axis image

⌨️ 快捷键说明

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