17 个版本
0.4.1 | 2024 年 4 月 4 日 |
---|---|
0.4.0 | 2024 年 3 月 21 日 |
0.3.1 | 2023 年 9 月 26 日 |
0.3.0 | 2023 年 5 月 31 日 |
0.2.3 | 2022 年 6 月 8 日 |
#81 in 图像
9,302 每月下载量
用于 9 个 crates (7 直接)
52KB
1K SLoC
image-compare
Rust 图像库中的图像比较
比较灰度图像
按结构
- 按 RMS - 分数通过以下公式计算:$1-\sqrt{\frac{\sum_{x,y=0}^{x,y=w,h}\left(f(x,y)-g(x,y)\right)^2}{w*h}}$
- 按 MSSIM
- MSSIM 如下实现:维基百科: $\mathrm{SSIM}(x,y)={\frac{(2\mu_{x}\mu_{y}+c_{1})(2\sigma_{xy}+c_{2})}{(\mu_{x}^{2}+\mu_{y}^{2}+c_{1})(\sigma_ {x}^{2}+\sigma_{y}^{2}+c_{2})}}$
- MSSIM 通过使用 8x8 像素窗口进行 SSIM 并对结果进行平均来计算
按直方图
- 实现了几个距离度量,请参阅 OpenCV 文档
- 相关系数 $d(H_1,H_2) = \frac{\sum_I (H_1(I) - \bar{H_1}) (H_2(I) - \bar{H_2})}{\sqrt{\sum_I(H_1(I) - \bar{H_1})^2 \sum_I(H_2(I) - \bar{H_2})^2}}$
- 卡方 $d(H_1,H_2) = \sum _I \frac{\left(H_1(I)-H_2(I)\right)^2}{H_1(I)}$
- 交集 $d(H_1,H_2) = \sum _I \min (H_1(I), H_2(I))$
- Hellinger 距离 $d(H_1,H_2) = \sqrt{1 - \frac{1}{\sqrt{\int{H_1} \int{H_2}}} \sum_I \sqrt{H_1(I) \cdot H_2(I)}}$
比较 RGB(A)
按结构:RMS,SSIM
- RGB 类型图像被分割成 R,G 和 B 通道并分别处理。
- 最差的颜色结果被传播为分数,但浮点型 RGB 图像提供了对所有值的访问。
- 如 gherkin 测试所示,这个结果目前不值得,因为它需要更多的时间
- 可以通过不仅传播单个颜色得分结果,而是使用每个像素的最差结果来改进。
- 这种方法在混合模式下实现,见下文。
按结构:"混合比较"。
- 根据T.871将图像分割到YUV色彩空间。
- 使用MSSIM处理Y通道。
- 通过RMS比较U和V通道。
- 将差异重新组合成一个美观的可视化图像。
- RGB得分计算如下:$\mathrm{score}=\mathrm{avg}_{x,y}\left( \mathrm{min}\left[\Delta \mathrm{MSSIM}(Y,x,y),\sqrt{(\Delta RMS(U,x,y))^2 + (\Delta RMS(V,x,y))^2}\right]\right)$
- RGBA可以通过使用
rgba_blended_hybrid_compare
与指定的背景颜色预乘。 - 否则,对于
rgba_hybrid_compare
,也使用MSSIM比较$\alpha$通道,并将其考虑在内。 - 然后使用每个像素的平均$\alpha$,$\bar{\alpha}(x,y) = 1/2 (\alpha_1(x,y) + \alpha_2(x,y))$,作为线性加权因子。
- RGBA得分计算如下:$\mathrm{score}=\mathrm{avg}_{x,y}\left(1/\bar{\alpha} \cdot \mathrm{min}\left[\Delta \mathrm{MSSIM}(Y,x,y),\sqrt{(\Delta RMS(U,x,y))^2 + (\Delta RMS(V,x,y))^2}, \Delta \mathrm{RMS}(\alpha,x,y)\right] \right)$
- RGBA的边缘情况:$\mathrm{score} \in (0, 1)$,且如果$\bar{\alpha} = 0.0$,则$\mathrm{score} = 1.0$。
- 这允许对RGB和RGBA的颜色差异和结构差异进行良好的分离。
- 差异图像的解释
- RGB:红色包含结构差异,绿色和蓝色包含颜色差异,颜色越多,差异越大。
- RGBA:与RGB相同,但$\alpha$包含$\alpha$差异的倒数。如果某物非常半透明,$\alpha$差异很大,区分颜色和结构差异将变得困难。此外,最小$\alpha$被限制在0.1,因此您仍然可以看到所有变化。
更新日志:0.4.1
- 支持混合比较大于4096x4096的图像(感谢@nikarh)
0.4.0:
- 支持image-rs系列0.25
0.3.1:
- 从image-rs中移除了额外的依赖项,使这个库更加精简(感谢@ericseppanen)
0.3.0:
- 在0.2.x版本中发现了一个错误,混合RGB比较过度加权了颜色差异。测试中的数字已调整。
- 对于大多数图像影响很小,但对于颜色过滤的图像影响明显,现在相似度更高。
- 添加了两种RGBA比较方法。
- 添加了GitHub内联latex方程式而不是嵌入图像 - 修复了暗主题渲染问题。
- 使API更直观。
依赖项
~4MB
~77K SLoC