基于Arnold变换的图像置乱-Python实现

一幅M*N的数字图像的二维Arnold 变换定义为:
                                                        
置乱代码:

AN = numpy.zeros([400,400])#所使用的图片的大小为400*400
AN = 读取的图像,我使用的是遥感图像的GDAL包,这里就不赘述了

n = 2
a = 3
b = 5
N = 400
for i in range(1,2):   
    for y in range(400):       
         for x in range(400):           
             xx = (x+b*y)%N           
             yy = ((a*x)+(a*b+1)*y)%N           
             AN[yy][xx] =im_data[y][x]   
    im_data[2000:,2000:]=AN
 

复原时用变换矩阵的逆矩阵即可:                                            
 
  
AN = numpy.zeros([400,400])
n = 2
a = 3
b = 5
N = 400
for i in range(1,2):
    for y in range(400):
        for x in range(400):
            xx = ((a*b+1)*x-b*y)%N
            yy = (-a*x+y)%N
            AN[yy,xx] =im_data[y,x]
     im_data = AN

原图:
基于Arnold变换的图像置乱-Python实现_第1张图片
变换后:

基于Arnold变换的图像置乱-Python实现_第2张图片

还原后:
基于Arnold变换的图像置乱-Python实现_第3张图片

你可能感兴趣的:(Python学习)