fixlianghua.m

来自「实现小波数字水印」· M 代码 · 共 101 行

M
101
字号
clear;clc
o=imread('lena256.jpg');
N=10;
RM=32;CN=32;
figure
imshow(o)
o=double(o);
w=[1 0;0 1];
for i=1:4
    w=[w w;w w];
end
[CA1,CH1,CV1,CD1] = DWT2(o,'haar');
CA1=round(CA1);
CH1=round(CH1);
CV1=round(CV1);
CD1=round(CD1);
[CA2,CH2,CV2,CD2] = DWT2(CA1,'haar');
CA2=round(CA2);
CH2=round(CH2);
CV2=round(CV2);
CD2=round(CD2);
[CA3,CH3,CV3,CD3] = DWT2(CA2,'haar');
CA3=round(CA3);
CH3=round(CH3);
CV3=round(CV3);
CD3=round(CD3);
for i=1:RM
    for j=1:CN
        Range=[CH3(i,j),CV3(i,j),CD3(i,j)];
        [Rank CLoc]=sort(Range);
        NewRange=Rank(1):(Rank(3)-Rank(1))/(N-1):Rank(3);
        if w(i,j)==0
            Diff=abs(NewRange(2:2:N)-Rank(2)*ones(1,floor(N/2)));
            [Rank Loc]=sort(Diff);
            if CLoc(2)==1
                CH3(i,j)=NewRange(2*Loc(1));
                CH3(i,j)=round(CH3(i,j));
            elseif CLoc(2)==2
                CV3(i,j)=NewRange(2*Loc(1));
                CV3(i,j)=round(CV3(i,j));
            else
                CD3(i,j)=NewRange(2*Loc(1));
                CD3(i,j)=round(CD3(i,j));
            end
        else
            Diff=abs(NewRange(1:2:N)-Rank(2)*ones(1,ceil(N/2)));
            [Rank Loc]=sort(Diff);
            if CLoc(2)==1
                CH3(i,j)=NewRange(2*Loc(1)-1);
                CH3(i,j)=round(CH3(i,j));
            elseif CLoc(2)==2
                CV3(i,j)=NewRange(2*Loc(1)-1);
                CV3(i,j)=round(CV3(i,j));
            else
                CD3(i,j)=NewRange(2*Loc(1)-1);
                CD3(i,j)=round(CD3(i,j));
            end
        end                
    end
end
CA2=IDWT2(CA3,CH3,CV3,CD3,'haar');
CA2=round(CA2);
CA1=IDWT2(CA2,CH2,CV2,CD2,'haar');
CA1=round(CA1);
r=IDWT2(CA1,CH1,CV1,CD1,'haar');
r=round(r);
r=uint8(r);
figure
imshow(r)
r=double(r);
[CA1,CH1,CV1,CD1] = DWT2(r,'haar');
CA1=round(CA1);
CH1=round(CH1);
CV1=round(CV1);
CD1=round(CD1);
[CA2,CH2,CV2,CD2] = DWT2(CA1,'haar');
CA2=round(CA2);
CH2=round(CH2);
CV2=round(CV2);
CD2=round(CD2);
[CA3,CH3,CV3,CD3] = DWT2(CA2,'haar');
CA3=round(CA3);
CH3=round(CH3);
CV3=round(CV3);
CD3=round(CD3);
for i=1:RM
    for j=1:CN
        Range=[CH3(i,j),CV3(i,j),CD3(i,j)];
        [Rank CLoc]=sort(Range);
        NewRange=Rank(1):(Rank(3)-Rank(1))/(N-1):Rank(3);
        Diff1=min(abs(NewRange(2:2:N)-Rank(2)*ones(1,floor(N/2))));
        Diff2=min(abs(NewRange(1:2:N)-Rank(2)*ones(1,ceil(N/2))));
        if Diff1<Diff2
            wr(i,j)=0;
        else
            wr(i,j)=1;
        end
    end
end

cha=wr-w

⌨️ 快捷键说明

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