`

数字水印之空域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)

    在matlab2011a中编写的程序,根据atpeace童鞋发布资源中doc文档理解修改后得到,包含水印图片和载体图片。有兴趣的可以看看。

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

    设计实现了一种基于空域的图像水印算法,提出了一种基于空域LSB 算法的数字图像加密算法,对不同的值对应的图像点像素进行不同的加密,然后根据给定的随机整数寻找加密结果的存放位置.实验分析表明,该算法实现起来...

    数字水印空域隐藏算法

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

    LSB_算法代码.doc

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

    数字图像水印的基础算法

    该资源收集了常见的空域数字图像水印算法和一些相关检测算法。

    LSB.rar_lsb c_数字水印

    空域数字水印的非常经典有用的算法,不信你下来看看就知道了

    网络信息安全-LSB图像隐写提取与检测的设计实现

    本选题需要学习经典的图像信息隐藏算法,包括基于空域的隐写算法和数字水印算法。 接着你将使用某种编程语言实现这些算法,实现在图片中嵌入一些信息,例如字符串和一些 文件。除此之外,还需要尝试一些基础的隐写...

    LSB算法的基本原理

    LSB算法的基本原理是:对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。

    利用数字水印技术实现心电图信号认证

    研究了经典的空域数字水印算法LSB 在心电图信号认证中的应用,选择在非QRS 复合波内嵌入水印信息,提出了基于 LSB 的自适应数字盲水印算法。通过嵌入水印后的图像效果和攻击实验证明,这种水印嵌入算法对心电图信号...

    基于LSB的数字水印技术研究 (2010年)

    信息媒体的数字化为信息的保存和提取提供了极大的...在分析加密技术的基础上,阐述了数字图像的水印技术,研究了空域数字图像水印技术,变换域数字图像水印技术,自适应数字图像水印技术,提出了最低有效位算法改进算法。

    基于汇编实现的流载体的LSB隐藏项目.zip

    资源包含文件:设计报告...然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125518537

    DSP中的基于DWT-DCT变换强鲁棒性的数字水印算法的研究

     现有图像数字水印算法基本上可分为两类:空间域方法和变换域方法。空域法通过直接改变图像某些像素的灰度值来嵌入水印,如LSB、扩展频谱等;而变换域方法先把图像做某种变换,例如DCT、DWT,然后通过改变某些变换...

    彩色水印嵌入程序,4bit替换法水印嵌入

    编译环境为vs2010,使用空域隐藏技术对数字水印进行加密,使用彩色水印,将水印图像素值前四位加到底层图像置零的后四位,得到经过加密的图像。 是LSB水印加密算法的一种改进,使用了彩色水印。

Global site tag (gtag.js) - Google Analytics