YTZImageComparison 是一个使用 Objective-C 编写的开源框架,基于对图片颜色分析,用于取色和图片对比。它实现了对图片优势色(主色)的提取,以及提取图片对应点颜色、对图片进行简单的相同/相似比较。其中取主色的算法是借鉴了 GitHub 上的开源项目 ColorCube。
第一次在 GitHub 上看到 pixelogik 和 luisespinoza 的取主色项目 ColorCube 和 LEColorPicker 时,就产生了一个想法,是否可以用这个取色算法做一些更实际的事情?于是就有了接下来的这个项目。
1. 首将传入的图片重绘为小尺寸图片,以避免遍历所有像素点所带来的性能问题;
2. 然后得到重绘后图片的 ARGB 分量值;
3. 将 RGB 这三个分量对应到以 R, G, B 作为空间直角坐标轴的分量(即得到颜色空间);
4. 搜索每个 RGB 对应点相邻方向的 26 个点的 RGB 值,该点是否比旁边的点更“鲜艳”;
5. 如果是,则将其加入鲜艳色数组;
6. 计算鲜艳色出现的频率,并按频率高低加入到返回值数组。
其中可以根据多个枚举值来定制“鲜艳”的标准,也可以设置忽略一个 RGB 色彩空间的颜色,避免一些颜色的干扰。
具体可以查看 ColorCube。
1. 首先将传入的图片重绘为小尺寸图片;
2. 然后得到重绘后图片的 ARGB 分量值;
3. 由参数 Rect 算出该像素 ARGB 信息在字符数组中的位置;
4. 返回一个该 ARGB 分量组合成的 UIColor。
1. 首先将传入的两张图片重绘为相同的小尺寸图片;
2. 然后得到重绘后图片的 ARGB 分量值;
3. 计算对应像素在颜色空间上的距离,小于相等的色差阈值则匹配度加一;
4. 匹配度高于最低相等阈值则视为图片相同。
对于相同图片的算法主要是基于对像素的色差对比,这样的对比结果是比较稳定的。
1. 首先将传入的两张图片重绘为相同的小尺寸图片;
2. 利用第一个取主色算法取出对应图片主色;
3. 计算对应图片对应主色在颜色空间上的距离,小于相似色差阈值则匹配度加一;
4. 若所有对应主色都符合阈值要求,则图片相似。
对于相似图片的算法主要是基于对图片主色的对比,当然,只对图片色调进行对应筛选是不精确的。接下来需要优化相似算法以及优化大量图片对比时的性能。
1. 提取图片主色
2. 提取图片对应点(像素)颜色
3. 图片相同/相似