一、算法原理

1.位平面定义
定义:对于一幅用多个比特表示其灰度值的图像来说,其中的每个比特可看作表示了一个二值的平面,也称为图像的位平面。

2. LSB算法介绍
LSB是Least Singificant Bit的缩写, 意思是最不重要比特位。LSB算法利用了数字图像处理中位平面的原理, 即改变图像的最低位的信息, 对图像信息产生的影响非常小,人眼的视觉感知系统往往不能察觉。以一幅256灰度的图像为例, 256灰度共需要8个位来表示, 但其中每一个位的作用是不一样的, 越高位对图像的影响越大, 反之越低的位影响越小, 甚至不能感知。LSB 算法简单实现容易, 同时可以保证数字水印的不可见性, 由于可以在最低位的每个像素上都插入数字水印信息, 因此有较大的信息嵌入量。但是由于数字水印位于图像的不重要像素位上, 因此很容易被图像过滤、量化和几何型变等操作破坏, 以致无法恢复数字水印。

3.  基本评价指标峰值信噪比 PSNR

峰值信噪比 PSNR

PSNR(Peak Signal to Noise Ratio),即峰值信噪比,是一种比较简单的全参考图像质量评价指标,其计算公式如下:

公式中,MAX为每个像素分量的最大误差,d为每个像素分量的位深;MSE为该分量画面的均方差,SSE为该分量画面的和方差,S为该分量画面的像素数,X和Y分别表示待评价图像和参考图像(顺序无关),它们都是H行W列的图像,X(h,w)表示待评价图像第h行第w列的像素值,Y(h,w)表示参考图像第h行第w列的像素值。

上述计算过程得到的是1个分量(Y、Cb、Cr、R、G、B)的PSNR值。要计算整帧的PSNR值,应基于整帧的MSE值,它是所有分量MSE值的加权平均:

公式中,0、1、2表示帧的3个分量,运算符∙表示向量点乘。

4. SSIM评价

SSIM(Structural Similarity Index Measurement),即结构相似度测量,是一种全参考图像质量评价指标:

注意:这个算法并不是在最低位平面嵌入水印!!!这个是不同位平面上嵌入水印对图片影响的验证实验。

二、 运行结果
1. 图片8个位平面展示


3. 每个位平面嵌入水印(真正LSB算法只需要嵌入最低位平面)


4. 显示已经嵌入水印图

5.PSNR SSIM评价
代码在后面

LSB代码

clc
clear all;
close all;% 读入载体图像
file_name='lena.jpg';
origin=file_name;
cover_object=imread(file_name);
% 读入水印图像
file_name='cuc.jpg';
message=imread(file_name);
message=double(message);
message=round(message./256);
message=uint8(message);% 确定载体图像的大小
Mc=size(cover_object,1);
Nc=size(cover_object,2);
% 确定水印图像的大小
Mm=size(message,1);
Nm=size(message,2);%位平面分解图
figure;
X=double(imread('lena.jpg'));
[h w] = size(X);
subplot(3,3,1);
imshow(X,[]);
title('原始图像');
for k=1:8for i=1:hfor j=1:w%bitget函数首先将X(i,j)处灰度值分解为二进制串,然后取第k位tmp(i,j) = bitget(X(i,j),k);endendsubplot(3,3,k+1);imshow(tmp,[]);ind = num2str(k);imti = ['第',ind,'个位平面'];title(imti);
end% 将水印扩展为原图像大小,并写入水印
for ii = 1:Mcfor jj = 1:Ncwatermark(ii,jj)=message(mod(ii, Mm)+1,mod(jj, Nm)+1);end
endfigure;
title('加入的水印图像')
imshow(watermark,[])% 将原图的最低有效位值换为水印的值
figure;
watermarked_LSB=cover_object;
for q=1:8watermarked_image=cover_object;for ii = 1:Mcfor jj = 1:Ncwatermarked_image(ii, jj)=bitset(watermarked_image(ii, jj), q, watermark(ii ,jj));end endif q==1watermarked_LSB = watermarked_image;endsubplot(3,3,1)imshow('lena.jpg')title('原图')subplot(3,3,q+1);imshow(watermarked_image,[]);ind = num2str(q);imtii = ['第',ind,'个位平面加入水印后的结果'];title(imtii);disp(['第',ind,'个位平面加入水印后的PSNR:'])psnr=PSNR(cover_object, watermarked_image)disp(['第',ind,'个位平面加入水印后的SSIM:'])ssim_val=ssim(cover_object, watermarked_image)%%计算BERorig_watermark=imread('cuc.jpg');message_pad=double(orig_watermark);message_pad=round(message_pad./256);message_pad=uint8(message_pad);message_pad=reshape(message_pad,[1,64*64]);Mw =size(watermarked_image,1);Nw =size(watermarked_image,2);for ii = 1:Mwfor jj = 1:Nwwatermark(ii, jj)=bitget(watermarked_image(ii, jj),q);endendwatermark_b=256*double(watermark);%将提取水印变为原始水印大小for ii = 1:Mm-1for jj = 1:Nm-1watermark1(ii+1,jj+1)=watermark_b(ii,jj);endendwatermark1(1,1)=watermark_b(Mm,Nm);%显示提取的水印图像message_pad_recover=double(watermark1);message_pad_recover=round(message_pad_recover./256);message_pad_recover=uint8(message_pad_recover);message_pad_recover=reshape(message_pad_recover,[1,64*64]);% 显示提取错误比特的比例len=length(message_pad);disp(['第',ind,'个位平面加入水印后的BER:'])bit_error_rate=sum(abs(message_pad_recover(1:len)-message_pad(1:len)))/lenendfigure;
imshow(watermark1,[]);
title('Recovered Watermark'); % 显示已嵌入水印的图像
figure;
imshow(watermarked_LSB,[]);
title('LSB嵌入水印后图像');% 计算已嵌入水印图像的PSNR和SSIM
disp(['LSB加入水印后的osnr:'])
psnr=PSNR(cover_object, watermarked_image)
disp(['LSB加入水印后的ssim:'])
ssim=ssim(cover_object, watermarked_image)

PSNR SSIM评价代码

%PSNR.m
function S=PSNR(I,J)
% PSNR(I,J) returns the peak signal to noise ratio) between I and J %(dB)
% I is the original image and J is a modified version of I.
% The PSNR value is useful to calculate the distortions on an image.% if (size(I)~=size(J))
%    error('Las imagenes deben tener el mismo tama駉')
% end
% if (~isrgb(I) & ~isrgb(J))[m n] = size(I);A=double(I);B=double(J);sumaDif=0;maxI=m*n*max(max(A.^2));for u=1:mfor v=1:nsumaDif = sumaDif + (A(u,v)-B(u,v))^2;endendif (sumaDif==0) sumaDif=1;endS=maxI/sumaDif;S=10*log10(S);
% else
%    error('Las imagenes no pueden ser en color')
% end

MATLAB LSB图像信息隐藏 最低位平面验证 以及PSNR SSIM评价相关推荐

  1. matlab信息隐藏和提取,使用matlab进行图像信息隐藏和提取

    基于格式的信息隐藏方法通常在文件头与图像数据之间,或图像数据末尾添加秘密信息,具有实现简单,透明性高,隐藏容量大等多个优点:LSB图像信息隐藏算法是将秘密信息隐藏在图像像素数据的低位上来隐藏信息的方法 ...

  2. LSB图像信息隐藏(实现及分析)

    一.LSB图像信息隐藏(python实现) 1.实验目的 将信息图片存入载体图片,并从载体图片中提取出信息图片.具体操作为将信息图片的信息写入载体图片的最低位层(载体图片至少应为信息图片8倍). 2. ...

  3. LSB图像信息隐藏算法matlab,实验二LSB信息隐藏实验.doc

    实验二LSB信息隐藏实验.doc 实验二LSB信息隐藏实验 综合评分: [实验目的]: 掌握MATLAB基木操作 实现LSB信息隐藏和提取 [实验内容]:(请将你实验完成的项11涂"■&qu ...

  4. 【图像隐藏】基于DCT、DWT、LHA、LSB的数字图像信息隐藏系统含各类攻击和性能参数附matlab代码

    1 内容介绍 1.1 课题研究的目的和意义 自二十世纪九十年代以来,网络在我们的生活中得到了快速的普及,网络几乎存 在于家家户户中,特别是一些用于交流的软件自诞生以来更是为我们的生活都带来了 极大的便 ...

  5. 利用MATLAB实现WAV音频的LSB信息隐藏

    0. 背景 音频信息隐藏技术就是将秘密数据直接嵌入音频载体中,但不影响原载体的使用价值,也不容易被人的知觉系统觉察或注意到. 音频信息隐藏技术作为信息隐藏技术的一个重要分支,受到越来越多的关注. 近年 ...

  6. matlab信息隐藏图片,信息隐藏 实验二 BMP 图像信息隐藏

    实验二 BMP 图像信息隐藏 一,实验目的 1,了解BMP图像文件格式 2,了解利用BMP图像文件隐藏信息的原理 3,设计并实现一种基于24位真彩色BMP图像的文件信息隐藏方法. 二,实验环境 1, ...

  7. java bmp信息隐藏_BMP图像信息隐藏及检测

    1.实验目的 (1)了解BMP图像文件格式 (2)了解利用BMP图像文件隐藏信息的原理 (3)掌握基于24位真彩色BMP图像的文件信息隐藏方法 2.实验内容 (1)在图像数据后隐藏信息 (2)文件头与 ...

  8. LSB隐写(最低有效位隐写)

    LSB隐写(最低有效位隐写) 我们先思考如下几个问题,然后再去实现 1.图片在计算机中存储的方式 2.什么原因可以是实现隐写 3.为什么选择最低有效位? 4.具体实现思路 5.如果用代码实现LSB隐写 ...

  9. python控制台图片_Python实现图像信息隐藏

    Python实现图像信息隐藏 之前学习密码学的时候老师有提到过『信息隐藏』,现在用图像的方法尝试一下.思想是:把信息藏到RGB通道中的B通道,然后利用奇偶性可以恢复过来 原理 从源图中提取文字图像信息 ...

最新文章

  1. nginx http 服务器搭建
  2. 查找(三)——基于平衡二叉树的查找(对排序二叉树的改进)
  3. boost::fusion::clear用法的测试程序
  4. Parsing error: The keyword 'const' is reservedeslint
  5. 剑指Offer - 面试题56 - I. 数组中数字出现的次数(异或,分组)
  6. 盒子模型与DOCTYPE
  7. 电子计算机哪几部分组成的,电子计算机由哪几部分构成?
  8. 从linux刷到windows,我为什么从Linux重新回归到Windows平台
  9. 【最佳实践】【Blend】Triggers、Actions 和 Behaviors
  10. [转载] 深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?
  11. MultiByteToWideChar和WideCharToMultiByte参数详解及使用方法
  12. 四种方法实现两个等大数组之间内容交换
  13. SVM实现多分类的三种方案
  14. 在家如何下载各大权威数据库文献
  15. 为什么说按照1:3的比例选国企和私企?先定人生观,再算四本大账
  16. 中点画线法(计算机图形学)
  17. securecrt 不掉线_如何不掉线
  18. Qt 之 QDateEdit 和 QTimeEdit
  19. libxml2 使用教程
  20. C++控制台程序(文字小游戏)

热门文章

  1. 一剂拯救“国足”的终极药方:全面 AI 化
  2. SpringBoot--简单处理高并发demo
  3. 关于我遇到的一个DNS问题
  4. 十个鲜为人知的Linux命令-【3】
  5. Unity资源加载发布到移动端iphone/ipad
  6. JVM基础知识---对象的创建过程
  7. 《Mysql》必知必会读书笔记
  8. 两分钟快速理解成本函数(cost function)
  9. 第30节 程序中的三国天下
  10. 蚂蚁金服分布式事务框架DTX源码学习