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算法是数字水印技术的基础之一,通过理解其工作原理和MATLAB实现,我们可以更好地理解和开发适应不同需求的水印系统。同时,随着技术的发展,研究更加安全、隐蔽的水印技术仍然是一个重要的研究方向。
本文介绍了一种结合了数字水印技术和图像加密技术的新方法——基于空域LSB算法的数字图像加密算法。该方法旨在增强数字内容的安全性和版权保护能力,通过对图像像素值进行加密,并巧妙地利用随机数确定加密结果的...
本实验基于Matlab的数字水印设计,旨在设计一个基于空域的水印实现系统,使用LSB算法嵌入和提取数字水印,通过Matlab软件仿真实现数字水印的嵌入和提取。系统主要包括四个部分:数字水印技术的发展、基于LSB的数字...
本实验基于 Matlab 的数字水印设计——基于空域的水印实现,旨在设计一种基于空域的数字水印算法,以实现数字水印的隐藏和检测。该实验将详细介绍数字水印技术的原理、分类、特点和应用,并通过 Matlab 实现基于 LSB...
数字图像水印,使用最低有效位算法,matlab实现,简单实现信息隐藏。
LSB算法的基本原理:对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能...
"基于Matlab的数字水印设计_基于空域的水印实现" 本文旨在设计和实现基于Matlab的数字水印技术,具体来说是基于空域的水印实现。数字水印技术是一种信息隐藏技术,通过将水印信息嵌入数字载体中,不影响原载体的...
《基于Matlab的数字水印设计:空域实现详解》 数字水印技术在现代信息保护和版权认证中扮演着重要角色,它通过在原始数据中嵌入微小且不可见的信息,以此来证明所有权、确保数据完整性或追踪非法复制。本资料详细...
### LSB数字水印算法原理及MATLAB实现 #### 一、LSB算法基本概念 LSB(Least Significant Bit)算法是一种常见的信息隐藏技术,主要用于数字水印领域。该技术通过改变图像像素值的最低有效位来嵌入水印信息,由于...
本实验基于MATLAB这个强大的数学计算和图形处理环境,实现了一个基于空域的数字水印设计。 MATLAB是MathWorks公司开发的一种高级数值计算和可视化软件,广泛应用于工程计算、科学计算和数据分析等领域。它提供了一...
LSB算法的Matlab实现 LSB(Least Significant Bit)算法是一种常用的数字水印技术,用于隐藏信息在图像中。本文将介绍LSB算法的Matlab实现,包括实验目的、实验条件、实验原理、程序设计和实验结果等方面。 实验...
MATLAB是进行图像处理和科学计算的强大工具,其丰富的函数库使得实现LSB水印算法变得相对简单。在MATLAB中,可以使用以下步骤实现该算法: 1. **读取原始图像**:使用`imread`函数读取待处理的图像。 2. **预处理**...
数字水印算法可以分为两类:空域算法和变换域算法。空域算法直接修改图像的像素值,通过改变载体图像的像素来嵌入水印信息。常见的空域算法包括最低有效位算法(LSB)、拼凑算法(Patchwork)、纹理映射算法以及文档...
典型数字水印算法有空域算法、Patchwork 算法、变换域算法、压缩域算法和 NEC 算法等。这些算法可以根据不同的应用场景和需求选择合适的算法,以满足数字水印技术在版权保护、身份验证、数据隐藏等方面的需求。
在Java中实现图像数字水印涉及到多个关键知识点,包括图像处理、数据编码与解码以及水印算法的选择。下面我们将深入探讨这些核心内容。 1. **图像处理**:在Java中,我们可以使用`java.awt.image`和`javax.imageio`...
总的来说,这个压缩包提供了数字图像水印的基础知识,包括基本的空域算法如LSB和增强安全性的Arnold置乱变换,以及利用MATLAB进行算法实现的实践经验。通过学习和研究这些内容,不仅可以了解数字水印的基本原理,还...
本文将详细介绍数字水印技术的实现过程,并以MATLAB为工具,通过具体的算法和步骤进行阐述。 首先,数字水印技术按照嵌入和提取水印的位置,可以分为空域水印算法和频域水印算法。空域水印算法直接在像素空间对图像...
空域水印嵌入算法是将数字水印直接加载在原始数据上,该算法可以分为最低有效位方法(LSB)和 Patchwork 方法及纹理块映射编码方法等。LSB 方法是一种典型的空间域数据隐藏算法,该方法是利用原始数据的最低几位来隐藏...
本文将探讨数字水印的基本概念、分类、作用以及现有的算法。通过对数字水印的深入理解,可以为图像保护提供有效的解决方案。 Abstract Digital watermarking is a critical aspect of information security, ...