计算机视觉是研究图像的学问,在图像的最终评价时,往往需要用到一些图像相似度的度量指标,因此,在本文中我们将详细地介绍原生和调用第三方库的计算图像余弦相似度的方法。
使用原生numpy实现
import numpy as npdef image_cosine_similarity(img1, img2):"""使用纯NumPy计算两张图像的余弦相似度"""# 展平图像并转换为浮点数vec1 = img1.flatten()vec2 = img2.flatten()# 计算点积dot_product = np.dot(vec1, vec2)# 计算L2范数norm1 = np.linalg.norm(vec1)norm2 = np.linalg.norm(vec2)# 计算余弦相似度return dot_product / (norm1 * norm2)
使用sklearn实现
import numpy as np
from sklearn.metrics.pairwise import cosine_similaritydef image_cosine_similarity_sklearn(img1, img2):"""使用 sklearn 计算两张图像的余弦相似度参数:img1, img2: 两张图像(2D 灰度或 3D 彩色 numpy 数组)返回:余弦相似度(范围 [-1, 1],但图像通常为 [0, 1])"""# 展平图像并转换为 floatvec1 = img1.flatten().reshape(1, -1).astype(float)vec2 = img2.flatten().reshape(1, -1).astype(float)# 计算余弦相似度similarity = cosine_similarity(vec1, vec2)return similarity[0][0] # 返回标量值