图像处理之LSB替换隐写算法的实现

这篇具有很好参考价值的文章主要介绍了图像处理之LSB替换隐写算法的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、LSB算法

LSB全称为Least Significant Bit)翻译过来为即最低有效位。在灰度图像中,图像的灰度由八位二进制来表示即十进制中0-255,共256级别,255为白色,0为黑色。可知,二进制位越靠前则对像素点灰度的影响越大,从这点出发考虑更改像素点灰度值最低位来隐藏信息,这样对原图像的改变比较小

LSB算法的基本过程可以描述为:若载体图像的最低比特位与嵌入信息的比特位是相同时,则不做任何改变;若载体图像的最低比特位与嵌入信息的比特位是不相同时,则分两种情况:若载体图像的最低比特位为0位即载体图像的像素值为偶数时则加一,若载体图像的最低比特位为1即载体图像的像素值为奇数时则减一

二、matlab实现LSB算法

(1)源码

1、lsb.m

function lsb_image=lsb(lsb_image,message_image,M,N,m,n)
% lsb函数实现LSB算法即将信息图像嵌入载体图像
% lsb_image为载体图像
% message_image为信息图像
% M,N,m,n为载体和信息图像大小(其实M=m,N=n,即要求载体和信息图像大小相等才可以实现LSB算法)
if(m<=M&&n<=N)
    for i=1:m     % 针对每一个像素点,将载体图像的二进制最低位与信息图像进行比对,相同则不变,不同时载体图像最低位为偶数时则加1,最低位为奇数时则减一
        for j=1:n
            % 注意此处的message_image为二值图像只有01两种取值
            % 此处的lsb_image为灰度图像,对于去二进制像素值最后一位的获取,采用判断像素值奇偶的方法
            % 若像素值为奇数,则二进制最低位肯定为1;若像素值为偶数,则二进制最高位肯定为0(例如通过命令行窗口输入lsb_image(1,1)=78,lsb_image(1,4)=75)
            if message_image(i,j)==1&&mod(lsb_image(i,j),2)==1      % 最低位都为1相同不变
                continue;
            elseif message_image(i,j)==1&&mod(lsb_image(i,j),2)==0  % 最低位不同,载体图像最低位为偶数时则加1
                lsb_image(i,j)=lsb_image(i,j)+1;
            elseif message_image(i,j)==0&&mod(lsb_image(i,j),2)==0  % 最低位都为0相同不变
                continue;
            elseif message_image(i,j)==0&&mod(lsb_image(i,j),2)==1  % 最低位不同,载体图像最低位为奇数时则减1
                lsb_image(i,j)=lsb_image(i,j)-1;
            end
        end
    end
else
    fprintf('图像大小不匹配!');
end
end

2、outlsb.m

function hide_image=outlsb(hide_image,m,n)
% outlsb函数实现从隐藏图像中提取出信息图像
% hide_image为隐藏图像,m,n为其大小
for i=1:m
    for j=1:n
        % 注意提取出来的信息图像为二值图像,其中0是黑色,1为白色
        if mod(hide_image(i,j),2)==1  % 对应lsb.m中的前两个判断,特别是第二个判断(当载体图像最低位为偶数时我们给其加一使其变成奇数),此时两种情况都对应这信息图像的最低位为1
            hide_image(i,j)=1;         
        else
            hide_image(i,j)=0;       % 对应lsb.m中的后两个判断,特别是第四个判断(当载体图像最低位为奇数时我们给其减一使其变成偶数),此时两种情况都对应这信息图像的最低位为0
        end
    end
end
end         

3、main.m

% 此三句清空语句需要写,若不写执行一次后,注释掉计算M,N,m,n的语句后仍能正常运行
close all;
clear all;
clc;
% 此处一定要注意im2double和double的区别,此处不能使用im2double,否则提取不出信息图像
% 应用LSB算法的图像格式需为位图形式,即图像不能经过压缩(如LSB算法多应用于png、bmp等格式,而jpg格式较少)
lsb_image=double(rgb2gray(imread('football.bmp')));
message_image=double(imbinarize(rgb2gray(imread('message.bmp'))));
[M,N]=size(lsb_image);
[m,n]=size(message_image);
hide_image=lsb(lsb_image,message_image,M,N,m,n);


figure(1),
subplot(131),imshow(lsb_image,[]);
title('载体图像');
subplot(132),imshow(message_image,[]);
title('信息图像');
subplot(133),imshow(hide_image,[]);
title('隐藏信息后的图像');

figure(2),
extract_image=outlsb(hide_image,m,n);
imshow(extract_image);
title('提取出的信息图像');

B=8;         % 编码一个像素用多少二进制位
MAX=2^B-1;   % 图像有多少灰度级        
MES=sum(sum((lsb_image-hide_image).^2))/(M*N);     % 均方差  
PSNR=20*log10(MAX/sqrt(MES));                      % 峰值信噪比
fprintf ('峰值信噪比是: % f\n' ,PSNR); 

(2)实现效果

1、命令行窗口

峰值信噪比是:  51.138242

2、效果图像
图像处理之LSB替换隐写算法的实现
图像处理之LSB替换隐写算法的实现
三、相关知识和思考

1、注意matlab中的im2double和double的区别

double(img)是简单的数据类型转换,将无符号整型转换为双精度浮点型double,但是数据大小没有变化。即原本数据是0到255之间,转化后还是0到255。例如原来是255则转换后为255.0,小数位0个数是由double数据长度决定,实际数据大小还是255,只不过这个255已经是double类型空间存储了,再增加不会发生溢出情况。而im2double(img)不仅仅是将uint8转换到double类型,而且把数据大小从0到255映射到0到1区间。在matlab实现LSB算法过程中,需要注意以下语句:

lsb_image=double(rgb2gray(imread('football.bmp')));
message_image=double(imbinarize(rgb2gray(imread('message.bmp'))));

参考博客:matlab中uint8,double,im2double和im2uint8的区别

2、峰值信噪比(PSNR)

PSNR是最普遍和使用最为广泛的一种图像客观评价指标,是基于对应像素点间的误差,即基于误差敏感的图像质量评价。两个 m×n 单色图像 I 和 K,其均方误差MSE定义为:
图像处理之LSB替换隐写算法的实现
峰值信噪比PSNR定义为:
图像处理之LSB替换隐写算法的实现
其中MAX是表示图像点颜色的最大数值,一般的灰度图像一个像素使用八位二进制数字表示,即像素灰阶数为MAX=2^8-1=255,且单位dB。

3、LSB算法的图片格式

应用LSB算法的图像格式需为位图形式,即图像不能经过压缩,即LSB算法多应用于png、bmp等格式,而jpg格式较少。png、bmp和jpg图片格式对比如下:

图像处理之LSB替换隐写算法的实现
从百度下载一张图片都是webp格式,将其后缀名分别改成bmp、png和jpg,发现其大小没有任何变化,所以采用此方法没有任何作用,我不知道为什么,后面若是想通再回来补充(此处测试的图片是直接修改后缀名后的图片)。
图像处理之LSB替换隐写算法的实现
JPG:使用的一种失真压缩标准方法,24 bit真彩色,不支持动画、不支持透明色。JPEG的压缩方式通常是破坏性资料压缩(lossy compression),即在压缩过程中图像的品质会遭受到可见的破坏。一张图片多次上传下载后,图片逐渐会失真。

PNG:格式是无损数据压缩的,PNG格式有8位、24位、32位三种形式,其中8位PNG支持两种不同的透明形式(索引透明和alpha透明),24位PNG不支持透明,32位PNG在24位基础上增加了8位透明通道(32-24=8),因此可展现256级透明程度。

BMP:是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP图像所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。

参考博客:LSB 图像隐写与提取算法

4、关于理解LSB算法的小例子
图像处理之LSB替换隐写算法的实现
解释:120,121是从载体图像中取出两个像素值,变为二进制数分别为:01111000,01111001,秘密信息分别为1,1。因为120的二进制数01111000最低位为0与秘密信息1不同,进行替换为01111001;121的二进制数01111001最低位为1与秘密信息1相同,保持不变.文章来源地址https://www.toymoban.com/news/detail-427829.html

到了这里,关于图像处理之LSB替换隐写算法的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现数字图像处理算法及源码解析

    Python实现数字图像处理算法及源码解析 数字图像处理在计算机视觉、图像识别等领域中有着广泛的应用,Python作为一门易于上手且功能强大的编程语言,也成为了数字图像处理的首选语言之一。本篇文章将介绍数字图像处理中的常见算法,并提供相应的Python代码实现。 一、

    2024年02月08日
    浏览(45)
  • 数字图像处理常用算法的原理和代码实现详解

      本专栏详细地分析了常用图像处理算法的数学原理、实现步骤。配有matlab或C++实现代码,并对代码进行了详细的注释。最后,对算法的效果进行了测试。相信通过这个专栏,你可以对这些算法的原理及实现有深入的理解!   如有疑问,欢迎在评论区留言讨论! Canny边缘

    2024年01月16日
    浏览(45)
  • 图像处理中Gamma校正的原理和实现算法——Python

    图像处理中Gamma校正的原理和实现算法——Python 在图像处理中,Gamma校正是一种用于调整图像亮度的常见技术。本文将介绍Gamma校正的原理和实现方法,并提供Python代码示例进行演示。 一、Gamma校正的原理 Gamma校正是通过对图像像素值进行幂函数变换来调整图像亮度的技术。

    2024年02月10日
    浏览(34)
  • 【图像处理】基于双目视觉的物体体积测量算法研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文运用

    2024年02月11日
    浏览(37)
  • 使用图像处理算法检测金属表面的生锈区域: Python实现及步骤解析

    摘要: 本文主要介绍如何使用Python和OpenCV库来实现对金属表面的生锈区域的检测。图像处理在工业领域有着广泛的应用,尤其是对材料的表面缺陷的检测。本文将详细阐述该算法的具体实现步骤,并提供完整的Python代码示例。 1. 引言 金属的锈蚀是一个常见的问题,特别是在

    2024年02月12日
    浏览(42)
  • 【图像处理】基于收缩系数的粒子群优化和引力搜索算法的多级图像阈值研究【CPSOGSA】(Matlab代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥   🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献

    2024年02月12日
    浏览(47)
  • MATLAB算法实战应用案例精讲-【图像处理】缺陷检测(附python和matlab实现代码)

    目录 前言 算法原理 什么是缺陷检测 缺陷检测任务 缺陷检测的关键问题

    2023年04月17日
    浏览(47)
  • <图像处理> 图像插值算法

    图像插值在图像处理中常用于调整图像尺寸或变形,其目标是根据给定像素点周围像素点的信息来预测该像素点的值。 常见的图像插值算法可以分为两类:自适应和非自适应。自适应的方法可以根据插值内容的特点来进行调整,而非自适应的方法对所有像素点都进行相同的处

    2024年02月07日
    浏览(46)
  • 基于FPGA的运动目标检测跟踪系统项目:从顶层架构设计到RTL编写与仿真,完整实现FPGA图像处理算法实现的项目流程。

    基于FPGA的运动目标检测跟踪系统项目 ,FPGA项目,FPGA图像处理 FPGA项目 采用帧间差分法作为核心算法,该项目涉及图像采集,颜色空间转换,帧间差分核心算法,腐蚀等形态学处理,目标定位,目标标识,图像显示等模块。 通过该项目可以学习到以下两方面内容 1.FPGA顶层架

    2024年04月16日
    浏览(60)
  • 隐写术浅谈(二):LSB隐写与IDAT隐写

    在本系列的其他文章中,我主要讲了讲自己对于 隐写分析 的一些浅薄理解,但是大都是针对于如何反隐写(做题嘛,不寒碜),基本上很少讲如何去隐写。上一篇我们讨论了直接附加和 IHDR,这一篇我们继续讨论如何去进行隐写(LSB 隐写和 IDAT 隐写)(非 CTF 向)。(此文并

    2024年02月09日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包