【问题标题】:Image similarity comparison图像相似度比较
【发布时间】:2011-08-09 11:50:26
【问题描述】:
我最初在 cstheory.stackexchange.com 上提出了这个问题,但被建议将其移至 stats.stackexchange.com。
是否有现有算法可以返回两个位图图像之间的相似性度量?所谓“相似”,我的意思是人类会说这两张图片是从同一张照片中修改而来的。例如,算法应该说以下 3 张图像是相同的(原始的、位置偏移的、缩小的)。
相同
我不需要检测扭曲或翻转的图像。我也不需要检测它是否是不同方向的同一个物体。
不同
我想使用此算法来防止我网站上的垃圾邮件。我注意到垃圾邮件发送者懒得更改他们的垃圾邮件图片。它不仅限于面孔。我已经知道那里已经有很多很棒的面部识别算法了。垃圾图片可以是任何东西,从 URL 到足球场再到裸体。
【问题讨论】:
标签:
algorithm
image-processing
image-recognition
【解决方案3】:
亚马逊有一个名为 Rekognition 的新 API,可让您比较两张图像的面部相似性。该 api 返回每个人脸彼此之间的相似度百分比以及每个人脸的边界框。
Rekognition 还包括一个用于面部分析(返回性别、大致年龄和其他相关面部细节)和对象场景检测(返回图像内对象的标签)的 api。
【解决方案4】:
计算图像相似度的重要技术之一是“mean structuresimilarity”。
import cv2
from skimage import compare_ssim
img = cv2.imread('img_1.png')
img_2 = cv2.imread('img_2.png')
print(compare_ssim(img, img_2))
【解决方案5】:
如果您只想要图像相似度,那是一回事,而面部相似度则是另一回事。两个非常不同的人可能出现在同一背景中,图像相似性分析表明他们是相同的,而同一个人可能在两种不同的环境中被拍摄,相似性分析表明他们是不同的。
如果您需要进行面部分析,您应该搜索特定的算法。计算相对眼睛、鼻子和嘴巴的大小和位置通常在这种分析中完成。
【解决方案6】:
使用https://github.com/Netflix/vmaf比较两组图像。
首先使用ffmpeg将图像转换为yuv422p,然后运行测试。注意分数差异。这可以用来判断图像是相似还是不同。对于这个示例,它们看起来都非常相似......
ffmpeg -i .\different-pose-1.jpg -s 1920x1080 -pix_fmt yuv422p different-pose-1.yuv
ffmpeg -i .\different-pose-2.jpg -s 1920x1080 -pix_fmt yuv422p different-pose-2.yuv
.\vmafossexec.exe yuv422p 1920 1080 different-pose-1.yuv different-pose-2.yuv vmaf_v0.6.1.pkl --ssim --ms-ssim --log-fmt json --log different.json
Start calculating VMAF score...
Exec FPS: 0.772885
VMAF score = 2.124272
SSIM score = 0.424488
MS-SSIM score = 0.415149
ffmpeg.exe -i .\same-pose-1.jpg -s 1920x1080 -pix_fmt yuv422p same-pose-1.yuv
ffmpeg.exe -i .\same-pose-2.jpg -s 1920x1080 -pix_fmt yuv422p same-pose-2.yuv
.\vmafossexec.exe yuv422p 1920 1080 same-pose-1.yuv same-pose-2.yuv vmaf_v0.6.1.pkl --ssim --ms-ssim --log-fmt json --log same.json
Start calculating VMAF score...
Exec FPS: 0.773098
VMAF score = 5.421821
SSIM score = 0.285583
MS-SSIM score = 0.400130
参考How can I create a YUV422 frame from a JPEG or other image on Ubuntu
【解决方案7】:
稳健的哈希函数做到了。但在该领域仍有大量研究正在进行。我不确定是否已经有可用的原型。
希望对您有所帮助。