我想比较两个矢量图像(比如说SVG)并看看它们有多接近。 基本上,我想测试跟踪算法的正确性,该算法将光栅图像转换为矢量格式。
我想测试这个算法的方式是:
- 拍摄一些矢量图片。
- 将矢量图像光栅化为png。
- 将上述png转换为跟踪算法。
- 将跟踪程序(SVG)的输出与原始程序进行比较。
虽然我知道RMSE(在imagemagick中)有一些光栅图像的矩阵,但如果有一些标准的矢量格式矩阵,我不熟悉。 我可以想到一些简单的例如弧数,线,曲线等。但是这些不能检测几何和颜色的偏差。有人可以建议一个良好的标准指标或其他方法来解决这个问题。
答案 0 :(得分:4)
我不知道这方面的标准指标,但我确实有一个指针,我希望它会有所帮助。
Batik项目使用一组工具来测试其SVG文档的渲染不会从一组参考图像中过度偏离。我的理解是它基本上对SVG进行栅格化并对两个图像执行基于像素的差异,以查看它们之间的差异。它应该足够聪明,可以忽略不可避免的差异,例如可能源于抗锯齿的细微差别。
您可以在http://jpfop.sourceforge.net/jaxml-batik/html-docs/test.html了解更多相关内容(尤其是SVGRenderingAccuracyTest部分)。
当然,这意味着您将进行栅格比较而不是矢量比较。你的情况下的矢量比较将是非常困难的,因为完全不同的曲线可能会产生非常相似的渲染 - 我认为这是好的。更重要的是,输入可能具有隐藏在另一个之后的形状,使得输出无法猜测它是什么。因此输出最终会显示完全错误,即使它可能产生像素完美的等效渲染。
但是,如果您确实希望执行矢量比较(也许您的数据受限于使其更加可行的方式),最简单的可能是首先规范两个SVG(将所有形状转换为路径,消除所有元数据,应用继承所有属性和规范化它们的值,规范化路径数据以始终使用相同的形式等)并将其用于两个目的:首先,查看规范化树结构中的差异。这应该已经给你一些有用的信息。其次,如果你觉得勇敢,可以测量各曲线之间差异的表面。我会考虑开始使用后者,因为它可能会给你很多假阴性。