# 图像相似度
**Repository Path**: zhangxinxu/image-similarity
## Basic Information
- **Project Name**: 图像相似度
- **Description**: 判断图像,或者图像部分区域是不是在视觉上接近纯色,ES6+
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 19
- **Forks**: 2
- **Created**: 2021-06-27
- **Last Updated**: 2025-04-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 图像相似度
#### 介绍
判断图像,或者图像部分区域是不是在视觉上接近纯色。
#### 使用说明
本JS的执行依赖于 color-thief.js,本项目中的 color-thief.js 做过一点自定义,使其支持部分区域取色的选择,使用原项目JS可能会没有效果。
使用示意:
```html
```
全局暴露了2个方法,一个是 `imageSimilarityValue()` 方法,语法如下:
```js
imageSimilarityValue(src, bounding)
```
其中:
`src` 是任意格式的图像地址。
`bounding` 是图像上局部区域的尺寸设置,格式是数组,需要4个数组项,都是数值,分别表示坐标和宽高,例如 `[10, 10, 300, 100]` 表示判断原始图像左上角坐标是 10,10,宽高是 300x100 的矩形区域的视觉色彩是否丰富。
返回值是个Promise,通常使用示意。
```js
imageSimilarityValue(src, bounding).then(result => {
// result
});
```
其中 `result` 是个对象,格式如下所示:
```js
{
colors: ['rgb(0,0,0)', ...],
similarity: 0-255
}
```
`colors` 是图像限制在特定尺寸后选取的4个主要颜色,`similarity`是这些颜色的平均相似度值。
第二个方法是`imageSimilarity()`方法,语法如下:
```js
imageSimilarity(src, bounding).then(similarity => {
// similarity是数值
});
```
这里的 `similarity` 是整数值,范围从0-5,分别表示相似的程度,值越小则越相似。
这是当前JS项目内置的规则:
```js
// 0 极度相似
// 1 相似
// 2 不太相似
// 3 不相似
// 4 差异较大
```
`imageSimilarity()` 方法底层依赖的就是 `imageSimilarityValue()` 方法,这里的 `similarity` 其实就是把 `imageSimilarityValue()` 方法中返回的 `similarity` 值和 50 相处取了个整。
为什么取50,全是作者自己的感觉,所以,这个相似度的阈值选择可能是不准确的,大家可以根据自己实际需求进行调整。
#### 其他
* 实现原理可参考这里:https://www.zhangxinxu.com/wordpress/?p=9982
* 项目中的 demo2.html 需要 http/https 协议访问,直接 file 协议打开无效,demo.html没有此限制。
* MIT Licence