仿真代码之三

 
部分仿真代码,供参考






% designed by lilizong
% lilizong[at]gmail


a
= imread( ' c:bbb.png ' );    %  读入图像
figure,imshow(a),title(
' 原图像 ' );   % 显示图像
figure,imhist(a);
b
= a(:);
[m,n]
= size(a);
k
= size(b);
%   下述操作可以实现像素的显示
c
= linspace( 0 , 0 , 256 );
for  i = 1 :k
    
for  j = 1 : 256
        
if (b(i) == j)
            c(j)
= c(j) + 1 ;
        end
    end
end
%   以下步骤简单实现读取整个图像的峰值点

max
= c( 1 );
maxi
= 0 ;
for  i = 1 : 256
    
if (c(i) > max)
        max
= c(i);
        maxi
= i;
    end
end
max
maxi




%   下面步骤实现对各个峰值的读取
d
= c;   % 作为临时操作数组,以不破坏原数组
emax
= linspace( 0 , 0 , 256 );
emaxi
= linspace( 0 , 0 , 256 );
a
= 1 ;
for  j = 2 : 256
    
if (d(j) > d(j - 1 & d(j) > d(j + 1 & d(j) ~= 8888 )
        emax(a)
= d(j);
        emaxi(a)
= j;
        d(j)
= 8888 ;
        a
= a + 1 ;    % 开始没有想明白,用额外的循环变量
    end
end


%   下面的程序读取四个高峰值,并进行显示
fmax
= linspace( 0 , 0 , 10 );
fmaxi
= linspace( 0 , 0 , 10 );
bnum
= 1 ;
for  i = 1 : 10
    fmax(bnum)
= emax( 1 );
    
for  j = 2 : 256
        
if (emax(j) > fmax(bnum))
            fmax(bnum)
= emax(j);
            fmaxi(bnum)
= emaxi(j);
            t
= j;
        end
    end
    emax(t)
= 0 ;
    bnum
= bnum + 1 ;
end


for  i = 1 : 10
    fmax(i)
    fmaxi(i)
end

%   至此峰值已经提出出来了







% 在第一个峰值嵌入水印
%   首先把小于最大的像素值的都减去2
cc
= zeros(m,n);
c
= cc(:);

for  i = 1 :k
    
if (b(i) < fmax( 1 ))
        c(i)
= b(i) - 2 ;
    end
end

watermark
= imread( ' c:watermark.png ' );
figure,imshow(watermark);
[w1,w2]
= size(watermark);
watermark_line
= watermark(:);
oo
= w1 * w2;

% 开始嵌入水印

% 第一次水印

tt
= 1 ;   % 让tt加1来遍历整个水印图像
for  i = 1 :k
    
if (c(i) == fmax( 1 ))
        
if (tt > oo)
            tt
= 1 ;   % 如果超出水印的范围从头开始
            
if (watermark_line(tt) == 1 )
                c(i)
= c(i) - 1 ;
            end

        end
        tt
= tt + 1 ;
    end
end



% 第二次水印
tt
= 1 ;   % 让tt加1来遍历整个水印图像
for  i = 1 :k
    
if (c(i) == fmax( 2 ))
        
if (tt > oo)
            tt
= 1 ;   % 如果超出水印的范围从头开始
            
if (watermark_line(tt) == 1 )
                c(i)
= c(i) - 2 ;
            end
        end
        tt
= tt + 1 ;
    elseif(c(i)
== fmax( 2 ) + 1 )
        
if (tt > oo)
            tt
= 1 ;
            
if (watermar_line(tt) == 1 )
                c(i)
= c(i) - 2 ;
            end
        end
    end
end









% 显示嵌入水印的图像


embed
= c;
embed
= reshape(c,m,n);
figure,imshow(embed,[]),title(
' 嵌入水印的图像 ' );


% 提取水印

% 提取第一层

for  i = 1 :k
    
if (c(i) == fmax( 2 ))
        watermark(tt)
= 0 ;
        
%   tt = tt + 1 ;
        
% elseif(c(i) == (fmax( 1 ) + 1 ))
        
%    watermark(tt) = 0 ;
        
%   tt = tt + 1 ;
        
% elseif(c(i) = fmax( 1 ) - 1 )
        
%     elseif(c(i) = fmax( 1 ) - 1 )
        
%        watermark(tt) = 1 ;
        
%       tt = tt + 1 ;
        
%  elseif(c(i) = fmax( 1 ) - 2 )
        
%     watermark(tt) = 1 ;
        
%    tt = tt + 1 ;
        
% end
    
else
        
if (c(i) == fmax( 2 ) + 1 )
            watermark(tt)
= 0 ;
        
else
            
if (c(i) == fmax( 2 ) - 1 )
                watermark(tt)
= 1 ;
            
else
                
if (c(i) == fmax( 2 ) - 2 )
                    watermark
= 1 ;
                end
            end
        end
        tt
= tt + 1 ;
    end
end


% 提取第二层


for  i = 1 :k
    
if (c(i) == fmax( 1 ))
        watermark(tt)
= 0 ;
        tt
= tt + 1 ;
    elseif(c(i)
== (fmax( 1 ) - 1 ))
        watermark(tt)
= 1 ;
        tt
= tt + 1 ;
    end
end
for  i = 1 :oo
    watermark_dect(i)
= watermark(i);
end











for  i = 1 :oo
    watermark_dect(i)
= watermark(i);
end
watermark_dect
= reshape(watermark_dect,w1,w2);
figure,imshow(watermark_dect,[]),title(
' 提取出来的水印 ' );


% 恢复原图像
dd
= embed(:);
for  i = 1 :k
    
if (c(i) == (max - 2 ))
        c(i)
= c(i) + 2 ;
    elseif(c(i)
< max - 2 )
        c(i)
= c(i) + 2 ;
    end
end
dd
= reshape(c,m,n);
figure,imshow(dd,[]),title(
' 恢复的图像 ' );



a
= imread( ' c:bbb.png ' );

x
= a;
x1
= embed;
x
= double (x);
x1
= double (x1);
for  i = 1 : 256 ;
    
for  j = 1 : 256 ;
        MYa(i,j)
= x(i,j) ^ 2 ;   % after filtering ' s single
        MYb(i,j) = x(i,j) - x1(i,j);
    end
end
d
= 0 ;
e
= 0 ;
for  i = 1 : 256 ;
    
for  j = 1 : 256 ;
        d
= d + MYa(i,j);
        e
= e + MYb(i,j) * MYb(i,j);
    end
end
f
= log10(d / e);
g
= 10 * f
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值