在本文中,我们将介绍如何使用图像相似性量度库来比较图像。根据库的文档,我们可以使用八种不同的评估指标来计算图像之间的相似度。
幸运的是,所有可怕的数学运算已为我们实现,我们可以立即开始测量图像相似度。我们只需要调用所选评估指标的名称并传递两个图像作为参数即可。例如:
请注意,默认指标是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程序,找出最匹配的一个:
输出:
如您所见,青苹果是赢家。如果查看每个结果,就会发现第二个最相似的图像是红梨。
现在,让我们来看看当很难预测结果时会发生什么。让我们将红色番茄的照片放在数据集文件夹中:
我要说的是,青苹果和番茄看起来都像红苹果。让我们根据数学来检查结果:
为了使它更加令人兴奋,让我们尝试比较更多不同的图像。自从我喜欢绘画以来,我为此实验拍摄了自己的绘画照片。
本文完整代码