可以将相邻的像素矩阵看作是图像矩阵的平移
水平:向左或者向右移动,垂直:向上或者向下移动,对角:先左右后上下(我是这么理解的)
最近做图像加密用到这个写一下
# coding=utf-8
import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#求水平,垂直,对角的相关系数以及相关系数图
def corrlelation_image(image,direction):#image灰度度图,direction方向:水平1,垂直2,正对角3
#求image的方差以及平均数
#mean_image=np.mean(image)
#var_image=np.var(image)
#获取图像像素的维度
m=image.shape[0]
n=image.shape[1]
X=np.zeros((m,n))
#水平方向,向右移,
if direction==1:
X=np.hstack((image[:,n-1].reshape(-1,1),image[:,:n-1]))#按列合并
#print('\n')
#print('Horizontal correlation coefficient',np.corrcoef(image.ravel(),X.ravel())[0][1])
plt.scatter(image.ravel(),X.ravel(),marker='.',s=0.1)
plt.xlabel('Gary vale of pixel location(a,b)')
plt.ylabel('Gary vale of pixel location(a+1,b)')
return np.corrcoef(image.ravel(),X.ravel())[0][1]
#垂直方向
if direction==2:
X=np.vstack((image[m-1,:].reshape(1,-1),image[:m-1,:]))#按行合并
#print('\n')
#print('Vertical correlation coefficient',np.corrcoef(image.ravel(),X.ravel())[0][1])
plt.scatter(image.ravel(),X.ravel(),marker='.',s=0.1)
plt.xlabel('Gary vale of pixel location(a,b)')
plt.ylabel('Gary vale of pixel location(a,b+1)')
return np.corrcoef(image.ravel(),X.ravel())[0][1]
#正对角方向,先上右移,在上移
if direction==3:
X=np.hstack((image[:,n-1].reshape(-1,1),image[:,0:n-1]))
X=np.vstack((X[m-1,:].reshape(1,-1),X[:m-1,:]))
#print('\n')
#print('Diagonal correlation coefficient',np.corrcoef(image.ravel(),X.ravel())[0][1])
plt.scatter(image.ravel(),X.ravel(),marker='.',s=0.1)
plt.xlabel('Gary vale of pixel location(a,b)')
plt.ylabel('Gary vale of pixel location(a+1,b+1)')
return np.corrcoef(image.ravel(),X.ravel())[0][1]
plt.show()
#读取图片
Img = cv2.imread('你的图片路径')#设置为需要加密图片的路径
#转换为灰度图
img2 = cv2.cvtColor(Img,cv2.COLOR_BGR2GRAY)
plt.figure()
direction=1#direction方向:水平1,垂直2,正对角3
d1=corrlelation_image(img2_after_Em,direction)#调用函数画图
print('Horizontal correlation coefficient of Original image:',d1)
plt.figure()
direction=2#direction方向:水平1,垂直2,正对角3
d2=corrlelation_image(img2_after_Em,direction)#调用函数画图
print('Vertical correlation coefficient of Original image',d2)
plt.figure()
direction=3#direction方向:水平1,垂直2,正对角3
d3=corrlelation_image(img2_after_Em,direction)#调用函数画图
print('Diagonal correlation coefficient of Original image',d3)