比较两张图片的相似性


1、原图上可以发现的信息,两张图拍摄角度不一样,图一拍的比较正,聚焦近;图二拍的有点倾斜,聚焦远。光照不一样,图一光照亮度要比图二高。图片中水泥模子干湿程度不一样,图一的水泥已经完全干了;图二还是水泥的凝结过程中的一种状态。拍照的方向不一样,假定图一是正向;图二就是反向的。水泥模子之间的距离也是不一样的,图一挨得比较近;图二挨得比较远。


2、如果单从比较两张图片是否相同,那肯定不相同;若是比较图一中水泥模子是否为图二中水泥模子晾干之后的结果,那答案是相同的,可以将图一或者图二换成与之对应的相位就可以比较。肉眼可见确实是相同的,现在的问题是如何利用计算机视觉的技术让计算机来判断他们的相似性。

我的想法是:图片的共同点就是水泥模子上面的图案了,那应该是利用这一点来比较他们的相似性了。

             

为了想要计算机比较好的进行处理比较,我的想法是将图片的位数、尺寸进行统一化,所以变成上面这种尺寸统一的灰度图了,要想判断两张图片中的内容是否为同一个,那就需要进行特别特征的检测与提取了,比如可以选择水泥模子上的图案作为特征加上模子周围的轮廓特征,比较相同东西是否一样。这就相当于目标检测加识别了,需要足够的数据集搭建网络来训练了。关于细节部分还是不知道怎么实现。

在网上调研发现opencv中有个函数可以判断两张图片是否相同:

import cv2
import numpy as np

file1 = 'results/1.png'
file2 = 'results/2.png'

img1 = cv2.imread(file1)
img2 = cv2.imread(file2)

cv2.imshow('img', img1)
cv2.imshow('img', img2)
cv2.waitKey(0)

difference = cv2.subtract(img1, img2)
result = not np.any(difference)  # if difference is all zeros it will return False

if result is True:    
    print("两张图片一样")
else:    
    cv2.imwrite("result.jpg", difference)    
    print("两张图片不一样")

也就是将上面的两幅灰度化处理后的统一尺寸的图片来进行操作,结果是相同的。以为得到了结果,其实这是错误的,上面的比较是将两幅图片进行相减,也即是两个数组进行相减,根据相减的结果判断;但是灰度化后,尺寸也统一了,它的数组是相同的,也就是说只要两张图片它所对应的数组是一样的,它的结果就是相同的。任意的两幅图片进行相同处理在这样相减都会得到图片是一样的结果,所以这种做法是错误的,这种方向都是错误的。要想判断图片相同,还的从特征入手,比较特征进行判断。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
比较不同大小但内容一致的两张图片相似性,可以使用图像的结构相似性指数(SSIM)或感知哈希算法(Perceptual Hashing)来进行比较。这些方法可以忽略图像的尺寸差异,并考虑图像的内容相似度。下面是使用Python实现这两种方法的示例代码: 1. 结构相似性指数(SSIM)比较: ```python import cv2 def compare_ssim(image1_path, image2_path): image1 = cv2.imread(image1_path) image2 = cv2.imread(image2_path) gray_image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY) gray_image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) ssim_score = cv2.compareSSIM(gray_image1, gray_image2) return ssim_score # Example usage: image1_path = "image1.png" image2_path = "image2.png" ssim_score = compare_ssim(image1_path, image2_path) print(f"SSIM Score: {ssim_score}") ``` 请确保在运行代码之前已经安装了OpenCV库(可以使用`pip install opencv-python`进行安装)。在示例代码中,`compare_ssim`函数接受两个图片路径作为参数,并返回计算得到的结构相似性指数(SSIM)。 2. 感知哈希算法(Perceptual Hashing)比较: ```python from PIL import Image import imagehash def compare_phash(image1_path, image2_path): image1 = Image.open(image1_path) image2 = Image.open(image2_path) phash1 = imagehash.phash(image1) phash2 = imagehash.phash(image2) similarity = 1.0 - (phash1 - phash2) / len(phash1.hash) ** 2 return similarity # Example usage: image1_path = "image1.png" image2_path = "image2.png" similarity = compare_phash(image1_path, image2_path) print(f"Similarity: {similarity}") ``` 请确保在运行代码之前已经安装了Pillow和ImageHash库(可以使用`pip install Pillow imagehash`进行安装)。在示例代码中,`compare_phash`函数接受两个图片路径作为参数,并返回计算得到的相似度。 这两种方法都可以用于比较内容一致但尺寸不同的图片相似性。根据具体需求选择合适的方法进行图片相似性比较

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hong_Youth

您的鼓励将是我创作的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值