PS:如果你只是在寻找解决问题的方法,没有耐心看完本文,可以直接调用现成的API:https://api.yonyoucloud.com/apilink/tempServicePages/97dbba20-0466-4f00-96db-2fd50ae7d9ee_true.html

前言

水印,一般是指图片上的文字标识,比如发表在微博时图片都会自动打上肉眼可见的博主昵称,像这种一般用于标识某张图片的出处或者用于声明版权。但是这样做会破坏掉原图,而且影响美观,比较粗暴。此文主要是讨论另一种水印——盲水印,所谓盲水印,是指人感知不到的水印,包括看不到或听不见(因为数字盲水印也能够用于音频)。其主要应用于音像作品、数字图书等,目的是在不破坏原始作品的情况下,实现版权的防护与追踪。当然这篇文章只讨论图片上的应用。盲水印隐蔽性强,给水印数据进行编码过后不易被破解出来。这是它最大的优势。

原理

 

盲水印的实现过程主要参考了傅里叶分析(不知道傅里叶分析的可以自行百度或者看下一这篇文章)傅立叶变换可以把数据从时域转换到频域。而且过程可逆。盲水印就是在图像的频域上添加水印数据。再通过逆变换转回时域。区别是图片是二维数据,要把图片数据由时域转到频域需要用到二维傅立叶变换。
水印添加流程图如下:

流程图

图像的二维傅立叶变换

和一维数据不同,要想对图片进行频域转换就要使用二维傅立叶变换。其实,只要实现了一维傅立叶变换,二维傅立叶变换就不会那么难:先对图像矩阵数据每一行进行傅立叶变换,再对每一列进行傅立叶变换即完成二维傅立叶变换。这里还是用一张常见的美女lena. 对lena(256*256)进行二维傅立叶变换如下图:

lena傅立叶变换并中心化的过程.png

对于分辨率很大的图片,DFT的效率很低,通常不会考虑,取而代之的是FFT,但是,FFT的条件是要保证图片的宽和高都是2的幂级数。但是通常生活中的图片一般都不满足这个条件。这时候我们就需要对图片的宽和高进行补0扩充直到满足条件为止。

图片频域数据特征如下图所示:

fft_pic.jpg

  图片中明亮的部分就是低频部分,暗点的是高频部分。一般为了展示会把频谱图低频的部分移到中心(上面手机拍的最右边的图)。频谱图是关于中心点对称的。

  由于傅立叶变换是可逆的,若一张图片进行补零扩大后,进行逆变换后再把它补零的部分进行裁剪就可以得到原图。

水印数据嵌入

为了让水印更加隐蔽,需要将水印像素按照一定的顺序打乱,再进行二维傅立叶变化,最后再让它叠加在需要加水印的图片的频域上。为了提高水印的安全性,规定这种打乱的顺序需要外界传入一个密钥,根据不同的密钥生成不同乱序的规则,而且过程是可逆的。

1、乱序

水印乱序.png

2、水印添加过程.png

水印的添加过程

水印的提取

因为水印的添加是在原图的频域上进行叠加。我们只需要将原图和加了水印的图片分别进行傅立叶变换,最后通过减法则可提取出加密过的水印数据。通过已知的密钥可以逆推出打乱的规则,这样当我们从水印图片中提取出水印像素时,可以还原出水印像素的原序列。最后就可以得到原水印。

提取出的水印.png

后记

图片盲水印技术其实还有很多,时间限制,文中只介绍了比较基础的一种方法,但道理都是大同小异的,如果各位读者有兴趣可以自己去了解,当然,也可以直接使用现成的盲水印API去实现上述效果

盲水印API接口技术原理及实现方式相关推荐

  1. 图片版权保护 用这个盲水印API就够了

    "图片是我辛苦拍摄的,熬夜处理的,但是在其它网站居然被轻松挪用,严重者甚至整个一个山寨版摄影专栏!但是举证艰难,官网客服根本不予理睬,真是欲哭无泪!"这是一位摄影师曾经面临图片侵权 ...

  2. 0基础也能看懂的二维码生成器 API 的技术原理(附Java 接入代码)

    写在前面 二维码生成器 API 是一种将文本或 URL 转换为二维码图像的技术.在现代生活中,二维码已经成为了很多人生活中不可或缺的一部分,因为它们可以快速识别.易于存储,并具有可靠性.但是,大多数人 ...

  3. 细谈微信域名防封检测的技术原理及实现方式

    微信域名防封主要是通过技术手段来实现预防措施,网络上的什么不死域名完全是无稽之谈,没有哪家是可以做到完全防封的. 所以主要的还是让自己的域名推广效果更好一点,别被封了都不知道,以至于损失惨重. 想要继 ...

  4. 全文搜索引擎Elasticsearch,这篇文章给讲透了!(Elasticsearch技术原理及实现方式)

    关于Elasticsearch的技术原理及实现方式看了两篇讲的非常好的文章,在这里分享给大家. 其中一篇是: Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文 ...

  5. 过去别人小程序接口php,小程序请求API接口PHPSESSID变化的解决方式

    搜索热词 惠民小程序小编了解到,微信小程序成为当下热门话题,下面从多个方面来谈谈小程序请求API接口PHPSESSID变化的解决方式. 最新消息, 4月18日,腾讯在北京召开发布会,宣布将腾讯文档作为 ...

  6. 快递员上门取件api接口技术对接java文档

    上门取件,是电商平台为寄件用户提供的通过一键下单到快递员,并在2小时上门取件的寄件服务.适用于散客在线寄件.电商退货上门取件等业务场景:通过API指令由系统自动将消息发送给物流公司和快递员,由快递员上 ...

  7. 解密微信域名防封API接口实现原理

    微信域名防封是指通过技术手段来实现预付措施.一切说自己完全可以防封的那都是不可能的.一切说什么免死域名不会死的那也是吹牛逼的.我们要做的是让我们的推广域名寿命更长一点,成本更低一点,效果更好一点. 第 ...

  8. 最新!中国天气网api接口调用,key获取方式,数据请求秘钥获取,城市id获取方法

    以前的天气获取方式已经不支持了,虽然能获取到数据,但是获取到的信息已经不对了. 中国天气网提供的最新接口需要数据请求秘钥key.而且有效期只有7天,用完了还要重新购买,很麻烦,但是获取到的内容绝对是最 ...

  9. java视频教程enet网络,流媒体技术原理及播放方式(浅显易懂)

    一.流媒体技术原理 流式传输的实现需要缓存.因为Internet以包传输为基础进行断续的异步传输,对一个实时A/V源或存储 的A/V文件,在传输中它们要被分解为许多包,由于网络 是 动态变化的,各个包 ...

最新文章

  1. druid连接池_c3p0、dbcp、druid 三大连接池对比
  2. Ubuntu迁移/boot卷
  3. 数据分片排序oracle,Oracle数据库的优化
  4. 追踪社保基金操盘者的足迹-补充
  5. 前端学习(3262):js高级教程(5)数据变量和内存
  6. C++之纯虚函数和抽象类
  7. sentinel 端口_Sentinel原理:控制台是如何获取到实时数据的
  8. OGRE针对图形API调用的效率优化
  9. Highlight(高亮)Gridview控件列
  10. 【Val】对于博客使用些许意见
  11. java 同步原语_你所不知道的有关Java 和Scala中的同步问题
  12. 简单c语言图形程序设计,c语言简单图形编程
  13. 变量的定义、类型、注释、拼接字符串、选择循环结构、读取文件
  14. 网站建设对企业的好处有哪些?
  15. 见缝插针的人_“见缝插针”的创意人生
  16. idea为什么不显示运行按钮_idea 右键项目没有run 运行选项
  17. 输入正整数后逆置输出
  18. 好看的小武与hs文件的偶遇
  19. python oled_树莓派使用 OLED 屏显示图片及文字
  20. 通过支付宝二维码链接直接调起支付宝支付

热门文章

  1. java 多图片压缩成pdf_Java 压缩PDF中的图片
  2. ReactNative中使用FlatList
  3. Android RecyclerView复杂布局 实现多Item,item中含视频文件播放
  4. 数据分析师统计学必知必会!
  5. Halcon 18 深度学习配置与手写字符(MNIST)测试
  6. sqli-labs Less20
  7. Halcon 深度学习(三):缺陷检测
  8. js判断两个数组中是否含有相同值
  9. jq实现无缝轮播图发现的问题
  10. 事业单位适合考软考中级哪个科目?