前提
高次元の行列のコサイン類似度を求めていますが、高次元の行列のコサイン類似度が算出されてしまいます。
実現したいこと
高次元の行列のコサイン類似度において、一行一列のコサイン類似度の値を求めたいです。
発生している問題
以下の二つの高次元の行列のコサイン類似度を求めると、
X=desc1=[[ 64 29 2 ... 253 255 31]
[ 1 0 14 ... 253 255 63]
[ 1 8 30 ... 123 255 56]
...
[ 32 6 6 ... 255 255 53]
[ 33 50 108 ... 249 255 32]
[ 52 79 119 ... 255 143 62]]
、
Y=desc2=[[ 1 22 118 ... 253 255 60]
[ 33 6 124 ... 255 255 32]
[ 3 130 253 ... 40 245 10]
...
[192 13 2 ... 255 255 32]
[ 32 6 7 ... 255 255 53]
[ 33 238 5 ... 253 255 32]]
cos_similarity(X, Y)=
[[4.93989218e-06 1.52681294e-05 3.31346771e-06 ... 3.03287671e-07
1.38625918e-05 3.90736928e-06]
[9.87978435e-06 9.05116654e-06 9.17575673e-06 ... 4.54931506e-06
2.54944217e-06 7.48360558e-06]
[2.17528585e-05 2.92562959e-06 1.16396173e-05 ... 9.09863012e-06
1.48186326e-05 1.10598419e-05]
...
[1.51663356e-05 2.02965553e-05 9.94040312e-06 ... 6.44486300e-06
1.26675408e-05 1.55632505e-05]
[1.62929777e-05 1.45367220e-05 9.17575673e-06 ... 3.03287671e-06
4.78020407e-06 8.07964496e-06]
[9.18646615e-06 1.21596480e-05 3.48338913e-06 ... 6.52068492e-06
4.78020407e-07 1.35102260e-05]]
全体のソースプログラム
import cv2
import numpy as np
import matplotlib.pyplot as plt
img1 = cv2.imread('/content/drive/My Drive/kaokao.png', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('/content/drive/My Drive/masatoshikaoryouiki.png', cv2.IMREAD_GRAYSCALE)
akaze = cv2.AKAZE_create()
matcher = cv2.BFMatcher(cv2.NORM_HAMMING)
特徴量検出
kp1, desc1 = akaze.detectAndCompute(img1, None)
kp2, desc2 = akaze.detectAndCompute(img2, None)
コサイン類似度計算
import numpy as np
def cos_similarity(X, Y):
Y = Y.T
return np.dot(X, Y)/(np.linalg.norm(X) * np.linalg.norm(Y, axis=0))
X = np.array(desc1)
Y = np.array(desc2)
print(cos_similarity(X, Y))
回答2件
あなたの回答
tips
プレビュー