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

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

请注意,默认指标是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程序,找出最匹配的一个:

输出:

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

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

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

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

本文完整代码