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