图像均衡化数字水印的嵌入与提取试验

-----------图像均衡化数字水印嵌入与提取方法

      图像处理中的直方图,也称为灰度级直方图,即一副图的灰度分布图,表示数字图像中每一灰度与该灰度级出现的频率之间的统计关系。直方图的定义为:

                                                             P(r_{k}) = n / N (k = 0,1,...,L-1)                                                                          (1)

      直方图反映了图像中每种灰度级出现的频率,是图像的基本统计特征之一。

      数字水印技术是一种可以通过一定的方法向宿主信息嵌入和提取有意义或者无意义标识信息的技术。宿主信息中包含了水印信息,水印信息不影响宿主信息的完整性,而且嵌入的信息视觉不可见,但可通过一定的密钥进行解密,将隐藏的信息显现出来。该技术是防止数字媒体非法复制、非法篡改、版权保护的有效手段之一。

      今天打算将图像均衡化的图像增强方法应用于普通的数字水印嵌入与提取方法中,看看其使用效果。以下是本人用MATLAB编辑工具设计的图像均衡化数字水印嵌入与提取方法及算法实现。其代码如下:

clear all;
close all;

%% 读取宿主图像 %%
RGB = imread('lenna.bmp');                             %读取彩色图像
figure(1);
subplot (2,2,1);
imshow(RGB);title('原始图像');  
I1 = rgb2gray(RGB);           %彩色图像灰度化
subplot (2,2,2);
imshow(I1);title('灰度值图像');       %显示灰度值图像      
I1 = double (I1)/255;
I2 = histeq(I1,200);   %直方图均衡化
subplot (2,2,3);
imwrite(I2,'adjust.bmp','bmp');
imshow(I2);title('均衡化后的图像');

%% 读取水印图像
W1=imread('mark.bmp');
W = rgb2gray(W1);               %读入水印图像并灰度化
figure(1);
subplot (2,2,4);
imshow(W);title('水印图像');

%% 显示载体图像直方图 %%
figure(2);
subplot (2,1,1);
imhist(I1);title('图像直方图');
subplot (2,1,2);
imhist(I2);title('均衡化后的直方图');

  %% 水印嵌入     %% 
for p = 1:128                                      %取水印图像所有像素
   for q = 1:128
      x = (p-1)*8+1;y = (q-1)*8+1;
      block2 = I1 ( x :x + 8 - 1 , y :y + 8 - 1 ); %宿主图像分块
      block3 = I2 ( x :x + 8 - 1 , y :y + 8 - 1) ; 
      block2 = dct2 ( block2 ) ;
      block3 = dct2 ( block3 ) ; 
      if W(p,q)==0;
      a = - 1;
      else
      a = 1;
      end
      block2 (1,1) = block2 (1,1) * ( 1+ a * 0.01 ) ; %嵌入过程
      block3 (1,1) = block3 (1,1) * ( 1+ a * 0.01 ) ; 
      block2 = idct2 ( block2 ) ;
      block3 = idct2 ( block3 ) ;
      I3( x: x + 8 - 1,y :y + 8 - 1) = block2 ; 
      I4( x :x + 8 - 1,y :y + 8 - 1) = block3 ;
   end;
end;
figure( 3 ) ;
subplot (2,2,1);
imwrite(I3,'withmark.bmp','bmp');
imshow(I3,[]);title('嵌入水印后的图像');
subplot (2,2,2);
imwrite(I4,'withmark_adjust.bmp','bmp');
imshow(I4,[]);title('均衡化后嵌入水印后的图像');

%% 水印提取
for p = 1 :128                                        %取到所有水印图像像素点
   for q = 1 :128
       
    x = ( p - 1 ) * 8 + 1 ;y = ( q - 1 ) * 8 + 1; 
    
   if (I3 ( x , y ) - I1 ( x , y ) ) > 0             %比较
   F( p ,q ) = 1 ; 
   else
   F( p ,q ) = 0 ;
   end
   if (I4 ( x ,y) - I2 ( x , y ) ) > 0               %比较
   H( p ,q ) =1 ; 
   else
   H( p ,q ) = 0 ;
   end
   end
end

subplot (2,2,3);
imshow(H,[]);title('提取水印图像');
subplot (2,2,4);
imshow(F,[]);title('均衡化后提取水印图像');

其运行结果如下:

本人还在数字水印方面的研究还比较片面,欢迎各位同志在评论区留言、讨论、指正。

发布了21 篇原创文章 · 获赞 2 · 访问量 873

猜你喜欢

转载自blog.csdn.net/weixin_44132627/article/details/103275015
今日推荐