测量手绘曲线与模板的相似性,惩罚比例/旋转
Measuring similarity of hand-drawn curve to template, penalizing scale/rotation
我有一个简单的应用程序,我希望在屏幕上向用户呈现一个笔画(任意但可能非常简单的 2D 曲线路径),并要求用户复制它,再次用一个笔画。我想测量用户复制笔画的准确性。
我第一次尝试使用 cv::matchShapes 复制此功能,将源曲线点的向量与绘制曲线的向量进行比较,正确地对形状相似性进行了很好的评分,但实际上太健壮了。我希望用户就地复制笔触,而不是在屏幕上的任意位置/比例上绘制它。
需要明确的是,
- 应该支持在任一方向上绘制笔画(尽管即使基础算法不支持两次测试,也可以添加此笔画。
- 度量不应因平移、旋转、缩放而保持不变,即用户必须将形状绘制到位。
- 中风可能会也可能不会闭合。我们事先知道模板是否已关闭。如果试探是闭合的(例如椭圆),那么我们希望用户能够在椭圆上的任意点开始和结束他们的笔触。如果需要,我们可以在测试相似性之前关闭绘制的曲线。
我意识到这与大多数计算机视觉相反,当你试图稳健地匹配任意输入时。在这种情况下,我想对输入的正确性进行评分,以达到非常精确的目标。任何人都可以提出更好的方法吗?我是计算机视觉的新手,虽然在图形开发方面经验丰富,所以如果这是微不足道的,请道歉。
一个不错的选择是倒角匹配。它非常健壮,但不能像您需要的那样对转换一成不变。输入是一个点集,因此它是否是闭合曲线并不重要,笔触的方向也无关紧要。
虽然这是一个非常标准的方法,但我没有找到维基百科的文章;这是我找到的最好的来源,尽管它实际上是在讨论一种扩展方法。
它应该在 OpenCV 中,但我再次没有找到任何文档,只有此示例。但无论如何,如果你有一个距离变换的实现,自己写是微不足道的。
这是原始出版物,供参考。
相关文章:
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- SFML 向下移动时如何围绕屏幕中心旋转?
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何使用增强::几何计算多边形的旋转固体体积?
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 如何绕任意轴旋转点?
- 测量手绘曲线与模板的相似性,惩罚比例/旋转