找回密码
 立即注册
查看: 6|回复: 0

Python判断两张图片的相似度

[复制链接]

30

主题

2

回帖

164

积分

管理员

积分
164
发表于 2025-3-25 08:43:01 | 显示全部楼层 |阅读模式
     在Python中,判断两张以numpyndarray格式存储的图片的相似度,通常可以通过多种方法来实现,包括但不限于直方图比较、像素差比较、结构相似性指数(SSIM)、特征匹配等。以下是一些常见方法的简要介绍和示例代码。

1. 像素差比较

最直接的方法是计算两张图片对应像素之间的差异。然而,这种方法对图片的旋转、缩放等变换非常敏感。

  1. import numpy as np

  2. def pixel_difference(img1, img2):
  3.     if img1.shape != img2.shape:
  4.         raise ValueError("Images must have the same shape")
  5.     diff = np.sum(np.abs(img1.astype(np.float32) - img2.astype(np.float32)))
  6.     return diff

  7. # 假设 img1 和 img2 是两个相同尺寸的 ndarray 图片
  8. # result = pixel_difference(img1, img2)
  9. # print(f"Pixel Difference: {result}")
复制代码
2. 直方图比较

通过比较两张图片的直方图来判断它们的相似度。这种方法对颜色分布敏感,但对空间信息不敏感。

  1. from skimage.exposure import histogram

  2. def histogram_comparison(img1, img2):
  3.     hist1, bin_idx1 = histogram(img1)
  4.     hist2, bin_idx2 = histogram(img2)
  5.     # 这里可以使用多种方法来比较直方图,如计算欧氏距离、巴氏距离等
  6.     diff = np.linalg.norm(hist1 - hist2)
  7.     return diff

  8. # 假设 img1 和 img2 是两个 ndarray 图片
  9. # result = histogram_comparison(img1, img2)
  10. # print(f"Histogram Difference: {result}")
复制代码
3. 结构相似性指数(SSIM)

SSIM是一种衡量两幅图片视觉相似度的指标,它考虑了亮度、对比度和结构信息。

  1. from skimage.metrics import structural_similarity as ssim

  2. def compare_ssim(img1, img2):
  3.     # 确保img1和img2是灰度图,如果不是,需要先转换
  4.     if img1.ndim == 3:
  5.         img1 = img1.mean(axis=2)
  6.     if img2.ndim == 3:
  7.         img2 = img2.mean(axis=2)
  8.     (score, diff) = ssim(img1, img2, full=True)
  9.     return score, diff

  10. # 假设 img1 和 img2 是两个 ndarray 图片
  11. # score, diff = compare_ssim(img1, img2)
  12. # print(f"SSIM: {score}, Diff: {diff}")
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软件开发编程门户 ( 陇ICP备2024013992号-1|甘公网安备62090002000130号 )

GMT+8, 2025-4-3 21:08 , Processed in 0.042474 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表