`

数字水印之空域LSB算法的实现

 
阅读更多

LSB算法数字水印的嵌入与提取以及峰值信噪比PSNR值的计算(Matlab语言) 

%文件名:lsbhide.m

%函数功能:本函数将完成顺序嵌入水印的LSB算法,载体选用灰度图像,水印选用二值图像(行数列数相同)

%格式:[ste_cover,len_total]=lsbhide(input,watermark)

%参数说明:

%input:载体图像

%watermark:水印

%ste_cover:嵌入水印的图像矩阵

%len_total:水印长度即水印容量

function [ste_cover,len_total] = lsbhide(cover,wm)

%读入图像矩阵

cover=imread('hill.bmp');

ste_cover=cover;

ste_cover=double(ste_cover);

%读入水印图像

wm=imread('wm.bmp');

%判断水印图像是否符合要求

[ m,n]=size(wm);

 if m~=n

 error('水印图像不符合要求');

end

%将水印矩阵转化为一维序列

for f1=1:m

 for f2=1:n

  msg((f1-1)*n+f2)=wm(f1,f2);

 end

end

%判断嵌入消息量是否过大

len_total=m*n;

[m,n]=size(ste_cover);

if len_total>m*n

 error('嵌入水印过大,请更换图像');

end

p=1;  %p作为水印嵌入位数计数器

%在图像像素的LSB嵌入水印

for f1=1:m

 for f2=1:n

  ste_cover(f1,f2)=ste_cover(f1,f2)-mod(ste_cover(f1,f2),2)+msg(p);

  if p == len_total

   break;

  end

  p=p+1;

 end

 if p == len_total

  break;

 end

end

%得到含水印图像矩阵

ste_cover=uint8(ste_cover);

 

 

%文件名:lsbget.m

%函数功能:本函数将完成提取隐秘于LSB的水印。

%格式:result=lsbget(test,len_total)

%参数说明:

%test:待测图像

%len_total:水印长度

%result:提取水印矩阵

function result = lsbget(test,len_total)

%读入图像矩阵

ste_cover=imread(test);

ste_cover=double(ste_cover);

[m,n]=size(ste_cover);

%p作为水印嵌入位数计数器

p=1;

for f1=1:m

 for f2=1:n

  if bitand(ste_cover(f1,f2),1)==1

   wm(p)=1;

  else

   wm(p)=0;

  end

  if p==len_total

   break;

  end

   p=p+1;

 end

  if p==len_total

   break;

 end

end

%将提取出的一维水印序列转化为二维矩阵

for f1=1:sqrt(len_total)

 for f2=1:sqrt(len_total)

   result(f1,f2)=wm((f1-1)*sqrt(len_total)+f2);

 end

end

 

function test()

    cover=imread('hill.bmp');

 wm=imread('wm.bmp');

 [ste_cover,len_total]=lsbhide('cover', 'wm');

 imwrite(ste_cover,'hill_wm.bmp');

 result=lsbget('hill_wm.bmp',len_total);

 figure;

 subplot(1,2,1),imshow(cover);title('原始图像');

 subplot(1,2,2),imshow(ste_cover);title('含水印图像');

 figure;

 subplot(1,2,1),imshow(wm);title('原始水印');

 subplot(1,2,2),imshow(result);title('提取水印');

 

 

%文件名:PSNR.m

%函数功能:计算峰值信噪比

%格式:s=PSNR(original,test)

%参数说明:

%original为原始图像文件

%test为待测图像文件

function s=PSNR(original,test)

%读取图像矩阵

io=imread('hill.bmp');

io=double(io);

iw=imread('hill_wm.bmp');

iw=double(iw);

if(size(io)~=size(iw))

 error('错误:两个输入图像大小不一致');

end

%计算PSNR

[m,n]=size(io);

sum=0;

zuida=m*n*max(max(io.^2));

for i=1:m

 for j=1:n

  sum=sum+(io(i,j)-iw(i,j))^2;

 end

end

if(sum==0)

 sum=1;

end

s=zuida/sum;

s=10*log10(s);

分享到:
评论

相关推荐

    数字水印典型空域算法(LSB)

    总结,LSB算法是数字水印技术的基础之一,通过理解其工作原理和MATLAB实现,我们可以更好地理解和开发适应不同需求的水印系统。同时,随着技术的发展,研究更加安全、隐蔽的水印技术仍然是一个重要的研究方向。

    基于空域LSB的数字图像加密算法

    本文介绍了一种结合了数字水印技术和图像加密技术的新方法——基于空域LSB算法的数字图像加密算法。该方法旨在增强数字内容的安全性和版权保护能力,通过对图像像素值进行加密,并巧妙地利用随机数确定加密结果的...

    (完整word版)基于Matlab的数字水印设计-基于空域的水印实现.doc

    本实验基于Matlab的数字水印设计,旨在设计一个基于空域的水印实现系统,使用LSB算法嵌入和提取数字水印,通过Matlab软件仿真实现数字水印的嵌入和提取。系统主要包括四个部分:数字水印技术的发展、基于LSB的数字...

    基于Matlab的数字水印设计——基于空域的水印实现.doc

    本实验基于 Matlab 的数字水印设计——基于空域的水印实现,旨在设计一种基于空域的数字水印算法,以实现数字水印的隐藏和检测。该实验将详细介绍数字水印技术的原理、分类、特点和应用,并通过 Matlab 实现基于 LSB...

    数字水印空域隐藏算法

    数字图像水印,使用最低有效位算法,matlab实现,简单实现信息隐藏。

    LSB_算法代码.doc

    LSB算法的基本原理:对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能...

    基于Matlab的数字水印设计_基于空域的水印实现.docx

    "基于Matlab的数字水印设计_基于空域的水印实现" 本文旨在设计和实现基于Matlab的数字水印技术,具体来说是基于空域的水印实现。数字水印技术是一种信息隐藏技术,通过将水印信息嵌入数字载体中,不影响原载体的...

    专题资料(2021-2022年收藏)基于Matlab的数字水印设计基于空域的水印实现.docx

    《基于Matlab的数字水印设计:空域实现详解》 数字水印技术在现代信息保护和版权认证中扮演着重要角色,它通过在原始数据中嵌入微小且不可见的信息,以此来证明所有权、确保数据完整性或追踪非法复制。本资料详细...

    LSB算法程序matlab

    ### LSB数字水印算法原理及MATLAB实现 #### 一、LSB算法基本概念 LSB(Least Significant Bit)算法是一种常见的信息隐藏技术,主要用于数字水印领域。该技术通过改变图像像素值的最低有效位来嵌入水印信息,由于...

    基于-Matlab的数字水印设计基于-空域的水印实现.doc

    本实验基于MATLAB这个强大的数学计算和图形处理环境,实现了一个基于空域的数字水印设计。 MATLAB是MathWorks公司开发的一种高级数值计算和可视化软件,广泛应用于工程计算、科学计算和数据分析等领域。它提供了一...

    LSB算法的matlab实现.doc

    LSB算法的Matlab实现 LSB(Least Significant Bit)算法是一种常用的数字水印技术,用于隐藏信息在图像中。本文将介绍LSB算法的Matlab实现,包括实验目的、实验条件、实验原理、程序设计和实验结果等方面。 实验...

    基于LSB的图像水印算法

    MATLAB是进行图像处理和科学计算的强大工具,其丰富的函数库使得实现LSB水印算法变得相对简单。在MATLAB中,可以使用以下步骤实现该算法: 1. **读取原始图像**:使用`imread`函数读取待处理的图像。 2. **预处理**...

    数字水印算法综述.pdf

    数字水印算法可以分为两类:空域算法和变换域算法。空域算法直接修改图像的像素值,通过改变载体图像的像素来嵌入水印信息。常见的空域算法包括最低有效位算法(LSB)、拼凑算法(Patchwork)、纹理映射算法以及文档...

    可用于研究的典型数字水印算法

    典型数字水印算法有空域算法、Patchwork 算法、变换域算法、压缩域算法和 NEC 算法等。这些算法可以根据不同的应用场景和需求选择合适的算法,以满足数字水印技术在版权保护、身份验证、数据隐藏等方面的需求。

    图像数字水印的JAVA实现

    在Java中实现图像数字水印涉及到多个关键知识点,包括图像处理、数据编码与解码以及水印算法的选择。下面我们将深入探讨这些核心内容。 1. **图像处理**:在Java中,我们可以使用`java.awt.image`和`javax.imageio`...

    数字图像水印的基础算法

    总的来说,这个压缩包提供了数字图像水印的基础知识,包括基本的空域算法如LSB和增强安全性的Arnold置乱变换,以及利用MATLAB进行算法实现的实践经验。通过学习和研究这些内容,不仅可以了解数字水印的基本原理,还...

    图像处理数字水印技术--MATLAB实现

    本文将详细介绍数字水印技术的实现过程,并以MATLAB为工具,通过具体的算法和步骤进行阐述。 首先,数字水印技术按照嵌入和提取水印的位置,可以分为空域水印算法和频域水印算法。空域水印算法直接在像素空间对图像...

    基于变换域的数字水印算法文献综述.doc

    空域水印嵌入算法是将数字水印直接加载在原始数据上,该算法可以分为最低有效位方法(LSB)和 Patchwork 方法及纹理块映射编码方法等。LSB 方法是一种典型的空间域数据隐藏算法,该方法是利用原始数据的最低几位来隐藏...

    数字水印算法设计.doc

    本文将探讨数字水印的基本概念、分类、作用以及现有的算法。通过对数字水印的深入理解,可以为图像保护提供有效的解决方案。 Abstract Digital watermarking is a critical aspect of information security, ...

Global site tag (gtag.js) - Google Analytics