Skip to content
返回

一个基于图像特征比较的图片相似度匹配工具

发现错误了吗?

一个基于图像特征比较的图片相似度匹配工具

纯数学实现,无任何深度学习与模型训练成分。

项目地址:https://github.com/MichaelSatoshi1983/pixelmatch

完全 deterministic,结果可复现。

我暂时为他起名为黄渤孙红雷辨别器。

当然,你也可以用来辨别苹果和鸭梨、香蕉和牛油果…

主要特性和实现

多种图像特征提取

图片相似度计算

我是如何实现的?

先预制菜加工一下

为了统一尺度和颜色空间,工具首先将图片重采样到固定尺寸(默认256x256),并生成灰度矩阵与RGB矩阵。灰度矩阵用于HOG和Gabor特征,RGB矩阵用于HSV直方图和pHash计算。

g := resizeGrayFloat(img, cfg.size, cfg.size)
R,G,B := resizeRGB(img, cfg.size, cfg.size)

特征提取

HSV直方图 + 空间金字塔

HOG(方向梯度直方图)

Gabor滤波器响应

pHash(感知哈希)

MS-SSIM(多尺度结构相似性指数)

tf := buildFeatures(timg) // 构建目标图像特征

相似度度量与融合

每类特征计算相似度或距离

然后通过归一化 + 排名融合 + 加权求和得到最终综合评分:

s1 := (wColor*nColor[i] + wHog*nHog[i] + ... + wSSIM*nSSIM[i])/wSum
s2 := (rColor[i] + rHog[i] + ... + rSSIM[i])/5.0
results[i].score = 0.6*s1 + 0.4*(s2/float64(len(results)))

最终按分数升序排序,Top N就是最相似的图片。

咋用:

go run main.go -target 你要对比的图片 -dir 图片的目录

发现错误了吗?

上一篇文章
在 Ruby 中遇见图灵机
下一篇文章
Go 真的需要 block defer 吗?