我在选择合适的形状检测算法时遇到问题。我的任务是识别“几何游戏”扑克牌上的形状。图片示例:
通过识别,我的意思是我的算法应该了解每种形状的顶点数量。如果是圆圈,也应该理解。
为了解决我的问题,我尝试应用某种过滤(柯氏过滤器)和openCV findCountours
过程。但是存在一个问题-由于背景的存在,有时形状不是连续的。您能否推荐我需要尝试使用哪些算法或一组算法来处理背景并正确识别形状?
答案 0 :(得分:1)
我们人类都知道卡片在地毯上,因为我们脑海中拥有3D模型,并且根据我们的经验,我们对卡片所涵盖的内容有所期待。
您将需要同时提供上述两种知识以进行机械加工。一种方法是背景减法。
https://docs.opencv.org/3.4/d1/dc5/tutorial_background_subtraction.html
这是告诉机器目标对象位于无意义的背景之上,以及预期的背景是什么样的。您也可以尝试使用opencv中的图像分割算法。
https://docs.opencv.org/3.4.3/d3/db4/tutorial_py_watershed.html
在您所拥有的那种背景下,我认为它效果不佳。但是很容易尝试一下。
根据对蓝色卡片的期望,您还可以尝试对蓝色进行均值平移过滤。尝试一下看是否有效。
http://www.chioka.in/meanshift-algorithm-for-the-rest-of-us-python/
您要寻找的关键字是图像分割,对象检测,背景过滤。遮盖目标对象后,即可执行常规的边缘/线检测和角检测以进行形状分类。 <---很多工作
祝你好运。
答案 1 :(得分:0)
我可能还会尝试在图片中添加“梯度方向的直方图”或HOG,然后您可以尝试使用最有效的损失函数将它们的相似度与某些“真相”进行比较。 / p>