仿真代码之三


部分仿真代码,供参考






% designedbylilizong
% 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 ; % afterfiltering ' ssingle
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值