软件开发讲究代码复用,通过复用可以使工程更易维护,代码量更少..... 开发者可以通过继承,组合,函数模块等实现不同程度上的代码复用.但不知你有没有想过,软件开发也是一种工程作业,绝不仅仅是写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理.....),你每天都在build,clean,签名,打包,发布,有没有想过这种过程,也可以像代码一样被描述出来, 也可以被复用.
最初使用的一只猫的图片进行了变换,因此叫猫脸变换
常见的图像预处理,使原本有意义的图像变为一张无意义的图像,一般称作二维猫脸变换
通常需要多次Arnold变换才可以达到目的
原理:
将各个像素点进行置换,像素值没有改变,只是位置进行了改变
本质上,满足矩阵行列式值为1的变换称作猫脸变换
特点:
周期性;若图像为方形,存在逆变换(因为矩阵满秩)
鲁棒性:
如果图像遭到破坏,解密后依旧可以恢复部分数据
二.过程
狭义猫脸变换 (N是正方形图像的边长):
分解步骤:
1.水平错切(x + y)
2.竖直错切(x + 2y)
3.取模(mod N)
狭义猫脸逆变换 :
当图片的长和宽相同时,猫脸变换具有逆变换
广义猫脸变换 :
广义猫脸逆变换:
问题(1):为什么猫脸变换可以做到置换?
置乱的实质是位置的映射,且映射一一对应
其之所以可以满足一一映射的关系,其原因是行列式表示了在二维坐标系下的映射关系,即可逆的线性变换,det值恒为1,保证了变换前后的面积(det值即表示面积的线性变化比例)相同,所以取模后不存在多对一映射的情况
问题(2):为什么猫脸变换具有鲁棒性?
因为猫脸变换中能量平均分布在整个图形内,部分损坏无法影响到整体图像的恢复
Python