【导读】本文是专栏《计算机视觉40例简介》的第1个案例《图像加密与解密》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。
目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。
大家可以在公众号“计算机视觉之光”回复关键字【案例01】获取本文案例的源代码及使用的测试图片等资料。
针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。
本文简要介绍了本案例的一些基础知识,更详细的理论介绍、代码实现等内容请参考《计算机视觉40例简介》第4章《图像加密》以获取更详细信息。
图像加密与解密的展示如图1所示:
- 图像在加密后得到的是一张混沌图像,我们根本无法从加密后的图像中获取任何有效信息。
- 解密后图像,与原始图像保持一致。
图1 图像加密解密展示
图像加密解密具有非常重要的应用。例如,我们可以把图像加密,也可以把密码等关键信息保存在图片上然后对图片进行加密从而实现高保密的要求。
加密的方法有很多种,我们可以:
- 置乱加密:将图像内所有的像素点打乱顺序,实现加密。
- 异或加密:通过异或运算的方式实现加密、解密。
本文讨论异或的加密。异或加密运算如表1所示(使用xor表示异或运算),针对数字0和数字1,其运算规律为:
- 相同的数值运算时,结果为0
- 不同的数值运算时,结果为1
但是,这里很有意思的一点在于,存在如下逻辑链条:
- 假设:a和b异或得到c
- 推论1:c和a异或会得到b
- 推论2:c和b异或会得到a
按照上述逻辑,我们得到如下逻辑:
- 加密:明文(a)和密钥(b)加密得到密文(c)
- 解密:密文(c)和密钥(b)解密得到明文(a)
表1 异或运算
采用数值加密、解密的逻辑,即可得到图像加密、解密的逻辑,图像加密解密模型如图2所示。其中,密钥图像是加密、解密双方约定的任意一幅图像(本例中使用的是一幅城市风景图)。解密后得到的解密图像与原始图像完全一致。
图2 加密模型
运行程序,结果如图3所示,其中:
- 图(a)是原始图像lena。
- 图(b)是密钥图像key,其看起来是杂乱无章的。
- 图(c)是加密得到的加密图像encryption。是通过对原始图像lena(图(a))和密钥图像key(图(b))进行按位异或得到的。该图像看起来是杂乱无章的。虽然图像encryption和图像key都是杂乱无章的,但是他们是不一样的。
- 图(d)是解密得到的解密图像decryption,是通过对加密图像encryption(图(c))与密钥图像key(图(b))按位异或得到的。
图3 程序的运行结果
在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书中,从理论基础、实现过程等角度系统深入地介绍了图像加密与解密的具体算法和实现流程,并对代码实现进行了细致的解释。欢迎大家阅读第4章《图像加密》,获取详细内容。
《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。