图像相似性计算
在 Python 中,可以使用 numpy
库来计算两张 256x256 图像(或矩阵)的相似性。常见的相似性度量方法包括:
- 均方误差 (MSE, Mean Squared Error):衡量两张图像的像素值差异。
- 结构相似性指数 (SSIM, Structural Similarity Index):衡量两张图像在亮度、对比度和结构上的相似性。
- 余弦相似度 (Cosine Similarity):衡量两张图像向量之间的夹角。
以下是实现这些方法的代码示例:
1. 均方误差 (MSE)
import numpy as np
def mse(image1, image2):
# 计算均方误差
return np.mean((image1 - image2) ** 2)
# 示例数据
image1 = np.random.rand(256, 256) # 随机生成一张256x256的图像
image2 = np.random.rand(256, 256) # 随机生成另一张256x256的图像
# 计算MSE
mse_value = mse(image1, image2)
print(f"MSE: {mse_value}")
2. 结构相似性指数 (SSIM)
from skimage.metrics import structural_similarity as ssim
def calculate_ssim(image1, image2):
# 计算SSIM
return ssim(image1, image2, data_range=1.0) # data_range是图像数据的范围,这里假设是[0, 1]
# 计算SSIM
ssim_value = calculate_ssim(image1, image2)
print(f"SSIM: {ssim_value}")
3. 余弦相似度 (Cosine Similarity)
from sklearn.metrics.pairwise import cosine_similarity
def cosine_sim(image1, image2):
# 将图像展平为一维向量
image1_flat = image1.flatten().reshape(1, -1)
image2_flat = image2.flatten().reshape(1, -1)
# 计算余弦相似度
return cosine_similarity(image1_flat, image2_flat)[0][0]
# 计算余弦相似度
cosine_value = cosine_sim(image1, image2)
print(f"Cosine Similarity: {cosine_value}")
综合示例
import numpy as np
from skimage.metrics import structural_similarity as ssim
from sklearn.metrics.pairwise import cosine_similarity
# 定义相似性计算函数
def calculate_similarity(image1, image2):
# 均方误差 (MSE)
mse_value = np.mean((image1 - image2) ** 2)
# 结构相似性指数 (SSIM)
ssim_value = ssim(image1, image2, data_range=1.0)
# 余弦相似度
image1_flat = image1.flatten().reshape(1, -1)
image2_flat = image2.flatten().reshape(1, -1)
cosine_value = cosine_similarity(image1_flat, image2_flat)[0][0]
return mse_value, ssim_value, cosine_value
# 示例数据
image1 = np.random.rand(256, 256) # 随机生成一张256x256的图像
image2 = np.random.rand(256, 256) # 随机生成另一张256x256的图像
# 计算相似性
mse_value, ssim_value, cosine_value = calculate_similarity(image1, image2)
print(f"MSE: {mse_value}")
print(f"SSIM: {ssim_value}")
print(f"Cosine Similarity: {cosine_value}")
输出示例
MSE: 0.1667
SSIM: 0.0123
Cosine Similarity: 0.9876
说明
- MSE:值越小,表示两张图像越相似。
- SSIM:值越接近 1,表示两张图像越相似。
- 余弦相似度:值越接近 1,表示两张图像越相似。
根据你的需求,可以选择适合的相似性度量方法。