Python图像相似度2种方法和嵌入空间度量学习

图像相似度

方法#1

在本文中,我们将介绍如何使用图像相似性量度库来比较图像。根据库的文档,我们可以使用八种不同的评估指标来计算图像之间的相似度。

幸运的是,所有可怕的数学运算已为我们实现,我们可以立即开始测量图像相似度。我们只需要调用所选评估指标的名称并传递两个图像作为参数即可。例如:

请注意,默认指标是psnr。

有两种使用此软件包的方法:您可以在终端中执行命令或编写单独的Python脚本。

如果要在两个图像之间进行快速评估,请在终端中运行以下命令:

(可选)添加— metric标志以指示要使用的评估指标。

在本文中,我选择了三个评估指标:rmse,psnr和ssim。

首先,让我们了解我们将要构建的程序:

  • 我们会将原始图片作为参数传递给我们的程序。
  • 该代码将遍历数据集文件夹中的所有图像,并计算每个图像与原始图像之间的相似度值。
  • 最后,我们将打印每个评估指标的各个结果。

编程

让我们使用pip或pip3安装库:

接下来,创建一个新的Python脚本文件并粘贴以下代码:

上述代码分析:

  • 导入必要的库文件
  • 无需每次运行脚本都对图像进行硬编码,而是使用argv [1]函数提供图像名称作为命令行参数。
  • 我们使用OpenCV Python包读取图像。我的将在一个单独的文件夹中,称为test。如果需要,请调整代码。
  • 为了比较不同指标的结果,我们将创建字典,其中的键是数据集图像的名称,而值是相似度值。
  • 图像相似性度量程序包要求图像具有相同的形状。 由于我们正在比较形状稍有不同的图像,因此我们需要提供相同的形状。 为此,我们将使用cv2.resize(data_img,dim,interpolation = cv2.INTER_AREA)函数,在该函数中,将根据原始图像的尺寸调整数据集图像的大小。
  • 我们将遍历数据集目录,调整每个图像的大小,然后填充每个字典。请注意,由于尺寸调整,图像可能会变形。
  • calc_closest_val(dict,checkMax)函数返回最相似的图像。 它还打印出每个图像的相似度值。 请注意,根据某些评估指标(如RMSE),值0表示该数据非常合适。 对于其他指标,反之亦然-值越高,匹配越好。 这就是为什么我们要使用bool参数checkMax。 它根据字典中的最小值或最大值选择最接近的图像。
  • 最后,为方便起见,我们将根据每个评估指标显示最相似的图像。

演示

首先,我将为原始图像创建一个文件夹。然后,我将比较图像放置在数据集文件夹中。

这个红苹果将是我们原始的查询图像:

我们将其与其他水果进行比较:

现在,让我们运行Python程序,找出最匹配的一个:

$ python3 measure_similarity.py red_apple.jpg

输出:

The difference between  dataset/red_pear.jpg  and the original image is : 
 0.8827639040117994
The difference between  dataset/cherry.jpg  and the original image is : 
 0.8542221298727691
The difference between  dataset/green_apple.jpg  and the original image is : 
 0.9379929447852137
The closest value:  0.9379929447852137
######################################################################
The difference between  dataset/red_pear.jpg  and the original image is : 
 0.018479494
The difference between  dataset/cherry.jpg  and the original image is : 
 0.022247538
The difference between  dataset/green_apple.jpg  and the original image is : 
 0.014238722
The closest value:  0.014238722
######################################################################
The difference between  dataset/red_pear.jpg  and the original image is : 
 55.925131298420894
The difference between  dataset/cherry.jpg  and the original image is : 
 55.43173546627284
The difference between  dataset/green_apple.jpg  and the original image is : 
 58.09926725713899
The closest value:  58.09926725713899
######################################################################
The most similar image accroding to SSIM:  {'dataset/green_apple.jpg': 0.9379929447852137}
The most similar image accroding to RMSE:  {'dataset/green_apple.jpg': 0.014238722}
The most similar image accroding to SRE:  {'dataset/green_apple.jpg': 58.09926725713899}

如您所见,青苹果是赢家。如果查看每个结果,就会发现第二个最相似的图像是红梨。

现在,让我们来看看当很难预测结果时会发生什么。让我们将红色番茄的照片放在数据集文件夹中:

我要说的是,青苹果和番茄看起来都像红苹果。让我们根据数学来检查结果:

为了使它更加令人兴奋,让我们尝试比较更多不同的图像。自从我喜欢绘画以来,我为此实验拍摄了自己的绘画照片。

原始图片:

图像数据集:

我看到了两张与小房子相似的照片,这些小房子与原始照片相似。

秋天风景和房子最匹配。

这些怎么样?

乍一看,结果令我有些惊讶。但是,当我仔细观察时,与该女孩合影的照片具有深蓝色背景,就像原始图像一样。北极光的绘画在背景中具有相似的山脉。

如您所见,结果基于不同的评估指标而有所不同。

我们已经了解了如何使用不同的评估指标来衡量图像相似度。图像相似性度量库为我们实现了这些方法。

哪种方法最好?

很难预测出准确的结果。度量根据不同方面比较图像。这取决于您要如何比较图像。

源代码

方式2

嵌入空间度量学习

度量学习是一种直接基于距离度量的方法,旨在建立图像之间的相似性或相异性。 另一方面,深度度量学习使用神经网络从图像中自动学习判别特征,然后计算度量。其目的在训练可以将输入嵌入到高维空间中的模型,以便训练方案定义的“相似”输入彼此靠近。 这些模型一旦训练就可以为下游系统生成嵌入,在这些系统中这种相似性是有用的; 示例包括作为搜索的排名信号或作为另一个监督问题的预训练嵌入模型的一种形式。

图像相似度搜索

相似度搜索建模

源代码

参阅 - 亚图跨际
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值