1.随机打乱各行进行数字图像加密
import cv2
import numpy as np
import matplotlib.pyplot as plt
import ch
ch.set_ch()
RGB = cv2.imread(r’D:\DigitPictureProcess\hist02.PNG’)
# 返回矩阵的行和列
s = RGB.shape[0]
r = np.random.choice(s, size=s, replace=False, p=None)
RGBS = RGB[r, :, :]
j = 0
f = np.arange(0, len(r))
while j <= len(r):
# find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
for (i, val) in enumerate(r):
if val == j:
f[j] = i
j = j + 1
RGBE = RGBS[f, :, :]
plt.subplot(1, 2, 1)
plt.imshow(RGBS)
plt.title(u”加密后”)
plt.subplot(1, 2, 2)
plt.imshow(RGBE)
plt.title(u”解密后”)
plt.show()
2. 随机打乱各列进行数字图像加密
import cv2
import numpy as np
import matplotlib.pyplot as plt
import ch
ch.set_ch()
RGB = cv2.imread(r’D:\DigitPictureProcess\hist02.PNG’)
# 返回矩阵的行和列
s = RGB.shape[1]
r = np.random.choice(s, size=s, replace=False, p=None)
RGBS = RGB[:, r, :]
j = 0
f = np.arange(0, len(r))
while j <= len(r):
# find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
for (i, val) in enumerate(r):
if val == j:
f[j] = i
j = j + 1
RGBE = RGBS[:, f, :]
plt.subplot(1, 2, 1)
plt.imshow(RGBS)
plt.title(u”加密后”)
plt.subplot(1, 2, 2)
plt.imshow(RGBE)
plt.title(u”解密后”)
plt.show()
3.同时打乱各行各列进行数字图像加密
import cv2
import numpy as np
import matplotlib.pyplot as plt
import ch
ch.set_ch()
RGB = cv2.imread(r’D:\DigitPictureProcess\hist02.PNG’)
# 返回矩阵的行和列
s_1 = RGB.shape[0]
r = np.random.choice(s_1, size=s_1, replace=False, p=None)
RGBS = RGB[r, :, :]
s_2 = RGB.shape[1]
c = np.random.choice(s_2, size=s_2, replace=False, p=None)
RGBSS = RGBS[:, c, :]
i = 0
f = np.arange(0, len(c))
while i <= len(c):
# find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
for (k, val) in enumerate(c):
if val == i:
f[i] = k
i = i + 1
j = 0
g = np.arange(0, len(r))
RGBE = RGBSS[:, f, :]
while j <= len(r):
# find(r==j)是返回r中等于j的值的索引,可以是多个,赋值给f的第j个位置
for (k, val) in enumerate(r):
if val == j:
g[j] = k
j = j + 1
RGBEE = RGBE[g, :, :]
plt.subplot(1, 2, 1)
plt.imshow(RGBSS)
plt.title(u”加密后”)
plt.subplot(1, 2, 2)
plt.imshow(RGBEE)
plt.title(u”解密后”)
plt.show()
4. 随机打乱像素点进行数字图像加密