python实现图像的水平,垂直,对角的相关性

可以将相邻的像素矩阵看作是图像矩阵的平移

水平:向左或者向右移动,垂直:向上或者向下移动,对角:先左右后上下(我是这么理解的)

最近做图像加密用到这个写一下

# 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)

python实现图像的水平,垂直,对角的相关性_第1张图片python实现图像的水平,垂直,对角的相关性_第2张图片

python实现图像的水平,垂直,对角的相关性_第3张图片python实现图像的水平,垂直,对角的相关性_第4张图片

你可能感兴趣的:(python,开发语言,人工智能)