文章目录

  • 摘要
  • 1. 方法
    • 1.1 步骤
    • 1.2 代码
    • 1.3 embed_bit=3(低3位嵌入) 实验现象
    • 1.3 实验现象分析
    • 1.4 所有实验现象
  • 2. 更新-彩色水印嵌入与提取
  • 参考资料

摘要

数字水印技术是一种保护图像版权的方式。LSB(Least Significant Bits, 最低有效位)技术是空域水印嵌入的一种方式。本文以灰度图像为对象,使用Python实现了任意长度位平面的水印嵌入方式,并且可以提取出水印对应的灰度图像。

1. 方法

1.1 步骤

  1. 读取图像(background、watermark)
  2. 对读取的图像进行嵌入
    2.1 划分对应的位平面
    2.2 将background的低位位平面替换为watermark的高位位平面
    2.3 合成图像(synthesis) ,实现嵌入
  3. 进行提取并绘制结果

本实验选择的嵌入位数是3

1.2 代码

喜欢的东西都在码里,可以不用本地配置环境,使用百度的飞浆平台进行在线运行。
开源这个代码不求赞,只求你们可以注册帮我拿点算力,或者fork一下项目,我真的很需要算力,所以希望我劝各位年轻人,要讲武德,耗子尾汁,不要白嫖。好卑微的博主呜呜呜。下面第一个Link给的算力多,注册之后点第二个link可以在线运行

百度飞浆邀请注册地址

该项目在线运行地址

import numpy as np
import matplotlib.pyplot as plt
import cv2class LSB_Embed():def __init__(self):pass@staticmethoddef get_bitPlane(img):"""获取灰度图像的8个位平面:param img: 灰度图像:return: 8个位平面的矩阵"""h, w = img.shapeflag = 0b00000001bitPlane = np.zeros(shape=(h, w, 8))for i in range(bitPlane.shape[-1]):bitplane = img & flag  # 获取图像的某一位,从最后一位开始处理bitplane[bitplane != 0] = 1  # 阈值处理 非0即1bitPlane[..., i] = bitplane  # 处理后的数据载入到某个位平面flag <<= 1  # 获取下一个位的信息return bitPlane.astype(np.uint8)@staticmethoddef lsb_embed(background, watermark, embed_bit=3):"""在background的低三位进行嵌入水印,具体为将watermark的高三位信息替换掉background的低三位信息:param background: 背景图像(灰度):param watermark: 水印图像(灰度):return: 嵌入水印的图像"""# 1. 判断是否满足可嵌入的条件w_h, w_w = watermark.shapeb_h, b_w = background.shapeassert w_w < b_w and w_h < b_h, "请保证watermark尺寸小于background尺寸\r\n当前尺寸watermark:{}, background:{}".format(watermark.shape, background.shape)# 2. 获取位平面bitPlane_background = lsb.get_bitPlane(background)  # 获取的平面顺序是从低位到高位的 0 1 2 3 4 5 6 7bitPlane_watermark = lsb.get_bitPlane(watermark)# 3. 在位平面嵌入信息for i in range(embed_bit):# 信息主要集中在高位,此处将watermark的高三位信息 放置在 background低三位信息中bitPlane_background[0:w_h, 0:w_w, i] = bitPlane_watermark[0:w_h, 0:w_w, (8 - embed_bit) + i]# 4. 得到watermark_img 水印嵌入图像synthesis = np.zeros_like(background)for i in range(8):synthesis += bitPlane_background[..., i] * np.power(2, i)return synthesis.astype(np.uint8)@staticmethoddef lsb_extract(synthesis, embed_bit=3):bitPlane_synthesis = lsb.get_bitPlane(synthesis)extract_watermark = np.zeros_like(synthesis)extract_background = np.zeros_like(synthesis)for i in range(8):if i < embed_bit:extract_watermark += bitPlane_synthesis[..., i] * np.power(2, (8 - embed_bit) + i)else:extract_background += bitPlane_synthesis[..., i] * np.power(2, i)return extract_watermark.astype(np.uint8), extract_background.astype(np.uint8)if __name__ == '__main__':root = ".."lsb = LSB_Embed()# 1. 获取背景和水印background = cv2.imread(r"{}/datasets/background/460.pgm".format(root), cv2.IMREAD_GRAYSCALE)watermark = cv2.imread(r"{}/datasets/watermark/swjtu2.png".format(root), cv2.IMREAD_GRAYSCALE)background_backup = background.copy()watermark_backup = watermark.copy()# 2. 进行水印嵌入embed_bit = 2synthesis = lsb.lsb_embed(background, watermark, embed_bit)# 3. 进行水印提取extract_watermark, extract_background = lsb.lsb_extract(synthesis, embed_bit)imgs = [background_backup, watermark_backup, synthesis, extract_watermark, extract_background]title = ["background", "watermark", "synthesis", "extract_watermark", "extract_background"]for i in range(len(imgs)):plt.subplot(2, 3, i + 1)plt.imshow(imgs[i], cmap="gray")plt.axis("off")plt.title(title[i])plt.show()

1.3 embed_bit=3(低3位嵌入) 实验现象

1.3 实验现象分析

  1. background和synthesis不仔细看是分不出来区别的,但是仔细看,能看出来swjtu的logo有些痕迹,如果减少嵌入位数,就无法看出痕迹了。
  2. extract_watermark的颜色和watermark的颜色不一致。实际测试,这应该是python绘图显示的原因,当我把水印区域的数据单独截取出来进行绘制。效果如下:

    几乎与watermark一致,看不出来区别。
  3. extract_watermark水印的其他部分是因为没有做处理导致的。在进行提取的时候,没有给予提取算法的水印尺寸这个先验信息,算法不知道哪里是水印边界,因此只有水印部分可被算法正常提取,算法将其余部分与水印部分一视同仁进行提取,因此产生了像马赛克一样的图像。

1.4 所有实验现象

  1. embed_bit = 1

  2. embed_bit = 2

  3. embed_bit = 3

  4. embed_bit = 4

  5. embed_bit = 5

  6. embed_bit = 6

  7. embed_bit = 7

  8. embed_bit = 8

2. 更新-彩色水印嵌入与提取

该文章是对灰度图进行LSB进行操作,只需进行一些微微修改,即可实现图像的嵌入与提取,点击查看link。

参考资料

[1]. github
[2]. 最低有效位LSB图像水印法[1.5x]

LSB水印嵌入与提取-灰度图像_Python Version相关推荐

  1. 小波变换:基于matlab的数字图像水印嵌入及提取(灰度图)

    1.水印嵌入 水印嵌入使用的算法 a)分解级数:根据人类视觉系统的照明和纹理掩蔽特性,将水印嵌入到图像的纹理和边缘不易被察觉,但对于图像滤波和有损压缩容易丢失细节信息.小波变换低频部分集中了图像大部分 ...

  2. matlab实现LSB图像水印的嵌入与提取

    这篇是我在网上参考的原文,当时我要完成这个任务,搜集资料,也是从别人那找到的. 这篇文章的目的就是将这些整理出来,方便大家参考. LSB图像水印嵌入与提取原创:https://blog.csdn.ne ...

  3. 数字图像处理-数字水印的嵌入与提取

    数字水印嵌入与提取 //本篇报告所有内容已上传csdn我的资源中(包括源码与报告word和ppt),欢迎大家下载进行进一步修改研究. 摘要:本报告重点介绍数字水印的嵌入与提取算法.数字水印根据水印的嵌 ...

  4. 【图像隐写】基于LSB+DWT+DCT三种算法实现图像和音频水印嵌入提取含Matlab源码

    1 简介 基于LSB+DWT+DCT三种算法实现图像和音频水印嵌入提取. 1.1 LSB算法 根据LSB算法简单易实现的特点,结合在图像置乱技术中很好特性的Arnold变换.利用变化产生影子图像.通过 ...

  5. 【信号处理】基于小波变换的音频水印嵌入提取matlab源码

    较早利用分块DCT的水印技术,他们的水印方案是用一个密钥随机的选择图像的一些分块,在频域的中频上稍稍改变一个三元组来隐藏二进制序列信息.这种方法对有损压缩和低通滤波是稳健的.Cox等[提出了着名的基于 ...

  6. 【语音隐写】基小波变换算法求解水印嵌入提取【含Matlab源码 513期】

    ⛄一.简介 随着计算机和网络的飞速发展,人们的许多创作和成果都以数字形式进行存储和发布.然而,数字作品极易被非法拷贝.伪造和窜改,使得很多版权所有者不愿意利用网络公开其作品,从而阻碍其自身发展.目前, ...

  7. 数字水印算法matlab源程序 matlab版数字水印算法 /DCT/DWT/LSB/HVS/W-SVD数字水印源码 数字水印的嵌入和提取 W-SVD数字水印实现

    发以下多套系统源码: 1.matlab版数字水印算法 2.MATLAB数字水印 源代码+文档 3.数字水印技术matlab代码 4.数字水印 JPEG压缩 matlab代码 5.数字水印 添加噪声 m ...

  8. 【图像隐写】基于matlab LSB数字水印嵌入提取【含Matlab源码 2412期】

    ⛄一.DCT数字水印简介 1 前言 随着网络通信技术的发展,社会节奏的加快,网络通信技术的成熟,需求也开始发生改变,人们对便利的需求也越来越大,通过将媒体信息数字化,使得信息表达的精准和效率得到了明显 ...

  9. 基于离散余弦变换(DCT)傅里叶变换(DFT)小波变换(DWT)的彩色图像数字水印的嵌入、提取简介及MATLAB实现

    一.引言 该篇包括三部分,1)引言.2)图像变化技术简介和代码实现 .3)基于图像变换技术的数字水印技术及代码实现. 数字水印是一种有效的数字产品版权保护和数据安全维护技术, 是信息隐藏领域的一个重要 ...

最新文章

  1. 【单片机】写电子钟时遇到的问题
  2. YYHS-魏传之长坂逆袭(梦回三国系列T1)
  3. 微信小程序页面搜索框查询(无后台接口情况下)
  4. docker for ubuntu安装
  5. WPF 和 windows Form Application的区别
  6. SqlHelper操纵数据库工具类
  7. (61)Verilog HDL模块例化Verilog模块
  8. 旷视申请赴港IPO:阿里蚂蚁金服持股近30%
  9. CentOS7.x Hadoop集群搭建
  10. 后缀自动机SAM详解
  11. 隋朝之前,扬州指的是现在的南京
  12. 抛负载”ISO 7637-2测试标准讲解,车规级TVS管优选建议
  13. 深圳大学计算机考研初试+复试经验
  14. 计算机表格如何增加一列,word中的表格如何增加一列 word表格怎么增加一列
  15. Unity 3D课程总结
  16. 服务器扩容申请文档,服务器扩容操作
  17. UML-包图中包与包之间的关系
  18. 7-1 电话聊天狂人
  19. 前端小白奋斗史03(css)
  20. [AT ZONe2021]Sneaking

热门文章

  1. 上海贝岭携手亚信安全治理勒索邮件 建设主动防护体系实现零感染率
  2. windows 程序设计 第三章读书笔记(上)
  3. 网吧2023:热闹回来了,电竞战歌起
  4. 幼儿园的计算机一年级的教案,一年级活动教案
  5. 一. spring cloud gateway集成 spring cloud stream binder kafka,实现“动态路由“刷新与加载之采坑记录
  6. 深度学习模型中的参数数量(备忘)
  7. 蒟阵P3390 【模板】矩阵快速幂
  8. Android怎么改airpod的名字,AirPods怎么改名?AirPods永久更改名称教程
  9. 梅科尔工作室-赵凌志-鸿蒙笔记4
  10. 音乐程序——两只老虎