Advertisement

密码学:信息隐藏技术(数字图像水印)

阅读量:

文章目录


  • 信息隐藏技术定义
  • 数字水印定义
  • 数字水印分类
  • 数字水印实现

信息隐藏技术定义

  • 信息隐藏就是将秘密信息隐藏到一般的费米面的数字媒体载体中,如图像、声音、视频和文档等载体,从而不让对手发觉的一种方法。
  • 信息隐藏研究范畴包括隐秘通道、隐写术、阈下信道、数字水印、可视分存。
  • 信息隐藏与加密技术的区别
信息隐藏 加密技术
隐蔽性 不易被发现隐藏了信息 容易被发现进行了加密
保护程度 保护存在于整个生命周期 解密后无法保护
对可用性的影响 不影响宿主的可用性 一般情况下解密后才能使用
...

数字水印定义

  • 数字水印是永久镶嵌在其他数据(宿主数据)中具有可鉴别性的数字信号或模式,而且并不影响宿主数据的可用性。
  • 数字指纹利用数字作品中普遍存在的冗余数据和随机性,向被分发的每一份图像、视频等数据拷贝中嵌入不同的信息,这些信息被称作“指纹”,使得该拷贝是唯一的,从而可以在该拷贝被非法分发时,根据其唯一性特征跟踪有盗版行为的用户。
  • 数字水印的属性:嵌入的有效性,保真性,数据容量,盲检测或辅助信息检测、虚警率或错误肯定率、鲁棒性和安全性。

数字水印分类

  • 按水印载体分类:图像水印、视频水印、音频水印、文档水印和软件水印。
  • 按嵌入域分类:空域水印和变换域水印。
  • 按鲁棒性分类:鲁棒水印、脆弱水印和半脆弱水印。
  • 按可见性分类:不可见水印和可见水印。
  • 按可逆性分类:不可逆水印和可逆水印。
  • 按检测方式分类:非盲检测、盲检测和半盲检测。

数字水印实现

鲁棒性数字水印

  • 利用人眼的视觉掩蔽特性嵌入水印。视觉阈值指干扰或失真刚好可以被察觉的门限值。亮度辨别阈值指的是当景物的亮度在背景亮度基础上增加到某一数值时,人眼才能感觉其亮度有变化。
  • 利用频域冗余嵌入水印。当载体发生失真时,并非所有的特征值出现同样的影响程度,或者说,载体不大可能经历水印敏感的所有失真,所以将水印冗余嵌入,将是对抗各种失真的通用策略。
  • 利用扩频编码嵌入水印。频域的冗余嵌入也称作扩频编码,扩频通信使得水印分散到任意频率上的能量很小,但集中检测的时候检测器输出可能具有较高的信噪比,这种频率的水印分散对于许多常规信号失真具有鲁棒性。
复制代码
 %读取数据

    
 a = imread('lenacolor512.bmp');
    
 subplot(1,6,1);
    
 imshow(a);
    
 title('初始图像');
    
  
    
 b = imread('watermark.png');
    
 subplot(1,6,2);
    
 imshow(b);
    
 title('水印图像');
    
  
    
 %普通嵌入水印
    
 %得到分量
    
 ar = a(:,:,1);
    
 ag = a(:,:,2);
    
 ab = a(:,:,3);
    
 %重置大小
    
 w = imresize(b,[512,512]);
    
 wr = w(:,:,1);
    
 wg = w(:,:,2);
    
 wb = w(:,:,3);
    
  
    
 %嵌入水印
    
 p1 = ar + (0.2) * wr;
    
 p2 = ag + (0.2) * wg;
    
 p3 = ab + (0.2) * wb;
    
 %合成图像
    
 p = cat(3,p1,p2,p3);
    
 subplot(1,6,3);
    
 imshow(p);
    
 title('合成图像1');
    
  
    
 %小波变换嵌入图像
    
 %得到分量
    
 [rLL1,rLH1,rHL1,rHH1] = dwt2(ar,'haar');
    
 [rLL2,rLH2,rHL2,rHH2] = dwt2(rLL1,'haar');
    
 [gLL1,gLH1,gHL1,gHH1] = dwt2(ag,'haar');
    
 [gLL2,gLH2,gHL2,gHH2] = dwt2(gLL1,'haar');
    
 [bLL1,bLH1,bHL1,bHH1] = dwt2(ab,'haar');
    
 [bLL2,bLH2,bHL2,bHH2] = dwt2(bLL1,'haar');
    
  
    
 wm = imresize(b,[128,128]);
    
 wmr = wm(:,:,1);
    
 wmg = wm(:,:,2);
    
 wmb = wm(:,:,3);
    
  
    
 %嵌入水印
    
 imgr = rLL2 + (0.2) * double(wmr);
    
 imgg = gLL2 + (0.2) * double(wmg);
    
 imgb = bLL2 + (0.2) * double(wmb);
    
 %分量反小波变换
    
 img1_ = idwt2(imgr, rLH2, rHL2, rHH2, 'haar');
    
 img1 = idwt2(img1_, rLH1, rHL1, rHH1, 'haar');
    
 img2_ = idwt2(imgg, gLH2, gHL2, gHH2, 'haar');
    
 img2 = idwt2(img2_, gLH1, gHL1, gHH1, 'haar');
    
 img3_ = idwt2(imgb, bLH2, bHL2, bHH2, 'haar');
    
 img3 = idwt2(img3_, bLH1, bHL1, bHH1, 'haar');
    
 %合成图像
    
 subplot(1,6,4);
    
 img = cat(3,img1,img2,img3);
    
 imshow(uint8(img));
    
 title('合成图像2');
    
  
    
 %攻击图像
    
 noise_img = imnoise(uint8(img),'speckle',0.01);
    
 subplot(1,6,5);
    
 imshow(uint8(noise_img));
    
 title('斑点攻击后的图像');
    
  
    
 %提取水印
    
 noise_img1 = noise_img(:,:,1);
    
 noise_img2 = noise_img(:,:,2);
    
 noise_img3 = noise_img(:,:,3);
    
 [n_img1_,nrLH1,nrHL1,nrHH1] = dwt2(noise_img1,'haar');
    
 [n_img1,nrLH2,nrHL2,nrHH2] = dwt2(n_img1_,'haar');
    
 n_imgr = (n_img1 - rLL2)/(0.2);
    
 [n_img2_,ngLH1,ngHL1,ngHH1] = dwt2(noise_img2,'haar');
    
 [n_img2,ngLH2,ngHL2,ngHH2] = dwt2(n_img2_,'haar');
    
 n_imgg = (n_img2 - gLL2)/(0.2);
    
 [n_img3_,nbLH1,nbHL1,nbHH1] = dwt2(noise_img3,'haar');
    
 [n_img3,nbLH2,nbHL2,nbHH2] = dwt2(n_img3_,'haar');
    
 n_imgb = (n_img3 - bLL2)/(0.2);
    
 n_img = cat(3,n_imgr,n_imgg,n_imgb);
    
 subplot(1,6,6);
    
 imshow(uint8(n_img));
    
 title('图像被攻击后的提取水印');

脆弱性数字水印

  • 脆弱性水印关注的时完整性验证,原始图像是否发生变化对于完整性校验十分重要。

全部评论 (0)

还没有任何评论哟~