【每周一坑】图像的指纹:数字水印 + 【解答】鸡兔同笼

简介: 有人可能好奇,仅凭截图就能知道是谁干的吗?这里就是用到了“数字水印”技术。

曾经有过这样的新闻:某公司的员工将内网论坛上的言论截屏发布到互联网上,引发了热议。于是公司通过截图定位到了员工的身份,将其开除。


有人可能好奇,仅凭截图就能知道是谁干的吗?这里就是用到了“数字水印”技术。


数字水印(Digital Watermarking)技术是将一些标识信息(即数字水印)直接嵌入数字载体当中(包括多媒体、文档、软件等)或是间接表示(修改特定区域的结构),且不影响原载体的使用价值,也不容易被探知和再次修改。但可以被生产方识别和辨认。

— 百度百科


只要在你看的页面上嵌入了肉眼不可见的信息,记录你的身份,之后再通过相应的解码软件从流出的截屏上提取出这些信息,就能知道你是谁了。


数字水印的应用还包括防伪防篡改保护版权等场景。


数字水印是个很大的范畴,有很多实现方式,具有不同的实现难度、信息容量、抗攻击性、对原图的干扰等。


这里我们介绍一种很简单的实现方式:


  1. 图像中的每个像素通常可以用 RGB(红绿蓝)三个 0~255 的值来表示。如果把这个值转成二进制来表示,就是 00000000~11111111
  2. 把每个值的最后1位全部设成0,对图像的影响非常细微,人眼无法察觉。
  3. 这样,空出来的最后1位就可以拿来存储信息。把水印字符转成二进制,依次填入这些位置上,就完成了信息的嵌入。
  4. 提取信息就是上述的逆过程:把图像的像素信息取出来,提取最后1位,拼出信息。


今天我们的题目就是:请将一段文字嵌入到一张图片中,然后再成功地复原出来。


示例原图:



嵌入信息后:



提取信息:



相比较之前的题目,这期的问题难道稍高,因此再给一些提示:


  1. 之前几次图像处理用到的 PIL 库,可以方便得到图像的像素值,以及保存新图像。
  2. 将一个字符 c 转成二进制表示:bin(ord(c))[2:],反之:chr(int(s, 2))
  3. 将一个整数 x 的二进制末位设为 0x // 2 * 2
  4. 处理后的图像需要保存成 pngbmp,因为 jpg 是有损压缩,无法保证像素值不变。
  5. 仍然没有头绪的话,可以网上搜索“python 数字水印”寻找参考

详细解答和参考代码将在下次栏目中给出,也可以其他同学在留言中的代码

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.com

codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。



【解答】鸡兔同笼


上一次的题目 【每周一坑】鸡兔同笼 +【解答】房贷计算器 看来是比较简单,因为是本栏目到目前为止提交答案最多的一次。


大家的解法主要有三种:


1. 枚举法


即循环假设鸡数或兔数,验证是否满足头数和脚数的条件。


参考解答:


def calc_count(m, n):
    for c in range(m+1):
        r = m - c
        if c * 2 + r * 4 == n:
            return c, r
    return 0, 0
m = int(input('heads(m):'))
n = int(input('feet(n):'))
c, r = calc_count(m, n)
if c == r == 0:
    print('invalid input')
else:
    print('cocks', c, 'rabbits', r)


TY、penger、GS、😱ེི、Famisi、Bun、张钒、神无月、扶南、喵喵 等同学用了此方法。


2. 计算法


此方法即直接使用推导出的数学算式,计算出结果。


知寒 、Fiat Lux、臧贵城、胖胖萌、阎雷、Butter.Fly.、王文亚、Mayo、灿夜、徐大龙、一休叔叔、会飞的猫、laughing…、╮(╯▽╰)╭、鑫HEAD、A暴躁的眼镜吴 等同学用了此方法。


王目田|xa 同学的代码实现了以上两种方式。


3. 解方程法


利用 sympynumpy 模块里的解方程工具,通过二元方程求解。


曹东、小鱼干拿来啦、花儿笑了、shadowsong 用了这种方式。


虽然从这个问题来看,枚举法有点多余,直接计算很方便。但我想说的是,枚举法更具有“编程的思维”。编程新手可以体会下二者的区别。


感谢各位同学的参与。


期待在下一期中看到你的代码!


如需了解视频课程及答疑群等更多服务,请号内回复 码上行动

代码相关问题可以在论坛上发帖提问 bbs.crossincode.com

推荐阅读:

押韵工具 | 虎扑| 开发工具 | 世界杯 | 高考 | 我用Python | 知乎 | 排序 | 朋友圈 | 电影票 | 技术宅 |单词表 | 新手建议

相关文章
|
7月前
|
机器学习/深度学习 算法
应用规则学习算法识别有毒的蘑菇
应用规则学习算法识别有毒的蘑菇
|
机器学习/深度学习 人工智能 TensorFlow
检测脸部情绪有多难?10行代码就可以搞定!
检测脸部情绪有多难?10行代码就可以搞定!
|
7月前
|
计算机视觉
人脸识别活体检测之张张嘴和眨眨眼——readme
人脸识别活体检测之张张嘴和眨眨眼——readme
|
机器学习/深度学习 编解码 人工智能
|
机器学习/深度学习 算法 计算机视觉
让换脸无所遁形!南洋理工发布全球首个DeepFake篡改序列检测还原数据集|ECCV 2022
让换脸无所遁形!南洋理工发布全球首个DeepFake篡改序列检测还原数据集|ECCV 2022
162 0
|
人工智能 算法 vr&ar
「缸中之脑」成真?动态电极绕过眼睛直接刺激大脑,在盲人脑海画出字母
最新研究绕过眼睛,通过动态电极刺激大脑,直接让天生的盲人脑海中出现字母!「智子倒计时」、「缸中之脑」、「黑客帝国」,让人分不清虚拟还是现实的直接意识输入,或许真的离我们不远了。
268 0
「缸中之脑」成真?动态电极绕过眼睛直接刺激大脑,在盲人脑海画出字母
|
存储 安全 Java
暗渡陈仓:披着图片外衣的特洛伊木马
InfoStealer是一种木马,功能为收集受害计算机系统用户的敏感信息,并将其转发到一个预定的位置,而搜集的信息包含财务信息,登录凭据,密码或者都有,这些信息可能被出售在黑市上。AVAST将其命名为MSIL:Agent-AKP。
327 0
暗渡陈仓:披着图片外衣的特洛伊木马
|
安全 定位技术 计算机视觉
睫毛长度精准复刻!扫描面部数据,用特殊技术和3D打印制作人脸,“画皮”直呼内行
睫毛长度精准复刻!扫描面部数据,用特殊技术和3D打印制作人脸,“画皮”直呼内行
248 0
|
存储 人工智能 算法
3D打印和语音识别改装旧赛车:音调变速、口令转弯,重现“四驱兄弟”招牌技能!
3D打印和语音识别改装旧赛车:音调变速、口令转弯,重现“四驱兄弟”招牌技能!
222 0
左手握技术,右手握需求,但声纹识别依旧当不了“独行侠”
作为生物识别技术的一种,声纹识别是“低调”的,也是经受磨难较多的。
416 0