python correlation_Python实现的距离相关函数(Distance correlation)

原文:https://gist.github.com/satra/aa3d19a12b74e9ab7941from scipy.spatial.distance import pdist, squareform

import numpy as np

from numbapro import jit, float32

def distcorr(X, Y):

""" Compute the distance correlation function

>>> a = [1,2,3,4,5]

>>> b = np.array([1,2,9,4,4])

>>> distcorr(a, b)

0.762676242417

"""

X = np.atleast_1d(X)

Y = np.atleast_1d(Y)

if np.prod(X.shape) == len(X):

X = X[:, None]

if np.prod(Y.shape) == len(Y):

Y = Y[:, None]

X = np.atleast_2d(X)

Y = np.atleast_2d(Y)

n = X.shape[0]

if Y.shape[0] != X.shape[0]:

raise ValueError('Number of samples must match')

a = squareform(pdist(X))

b = squareform(pdist(Y))

A = a - a.mean(axis=0)[None, :] - a.mean(axis=1)[:, None] + a.mean()

B = b - b.mean(axis=0)[None, :] - b.mean(axis=1)[:, None] + b.mean()

dcov2_xy = (A * B).sum()/float(n * n)

dcov2_xx = (A * A).sum()/float(n * n)

dcov2_yy = (B * B).sum()/float(n * n)

dcor = np.sqrt(dcov2_xy)/np.sqrt(np.sqrt(dcov2_xx) * np.sqrt(dcov2_yy))

return dcor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
影像匹配是计算机视觉领域的一个重要任务,它的目标是在两幅或多幅图像中寻找相似的特征点,以实现图像的对齐、拼接、识别等功能。相关系数法是一种常用的影像匹配方法,它基于图像中灰度值的相似程度进行匹配。 在 Python 中,可以使用 OpenCV 库实现相关系数法影像匹配。具体步骤如下: 1. 加载图像 使用 `cv2.imread()` 函数加载待匹配的两幅图像。 ```python import cv2 # 加载图像 img1 = cv2.imread("image1.jpg", cv2.IMREAD_GRAYSCALE) img2 = cv2.imread("image2.jpg", cv2.IMREAD_GRAYSCALE) ``` 2. 提取特征点 使用 `cv2.ORB_create()` 函数创建 ORB 特征点检测器,并使用 `detectAndCompute()` 函数提取图像中的特征点和描述符。 ```python # 创建 ORB 特征点检测器 orb = cv2.ORB_create() # 提取特征点和描述符 kp1, des1 = orb.detectAndCompute(img1, None) kp2, des2 = orb.detectAndCompute(img2, None) ``` 3. 匹配特征点 使用 `cv2.BFMatcher()` 函数创建暴力匹配器,并使用 `match()` 函数将两幅图像中的特征点进行匹配。 ```python # 创建 BF 暴力匹配器 bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) # 匹配特征点 matches = bf.match(des1, des2) ``` 4. 计算相关系数 对匹配结果进行排序,并选取前 N 个最佳匹配点。使用这些点计算相关系数,以确定两幅图像的匹配程度。 ```python # 将匹配点按照相似程度排序 matches = sorted(matches, key=lambda x: x.distance) # 取前 N 个最佳匹配点 N = 50 best_matches = matches[:N] # 计算相关系数 sum = 0 for match in best_matches: sum += match.distance correlation = sum / N ``` 相关系数越大,表示两幅图像的匹配程度越高。可以根据相关系数的大小来确定是否存在匹配点。如果相关系数太小,说明两幅图像不太相似,可能存在误匹配的情况。 以上就是使用 Python 中的 OpenCV 库实现相关系数法影像匹配的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值