我正在尝试检测用黑/蓝/红/绿标记写在白板上的形状。形状可以是圆形、矩形或三角形。图片可以在这篇文章的底部找到。
我使用OpenCV作为图像识别的框架。
我的第一个任务是研究并列出可用于检测的不同策略。到目前为止,我发现了以下内容:
1)灰度,模糊,边缘,轮廓检测,然后一些逻辑来确定检测到的轮廓是否是形状?
2)不同形状特征的Haar训练
3) SVM分类
4)灰度,模糊,边缘,霍夫变换和某种颜色分割?
我还遗漏了什么策略吗?有没有更新的文章或经过测试的方法?你会怎么做?
其中一张测试图:https://drive.google.com/file/d/0B6Fm7aj1SzBlZWJFZm04czlmWWc/view?usp=sharing
更新:第一种策略似乎效果最好,但远非完美。当盒子没有关闭,或者白板有很多噪音时,问题就出现了。哈尔训练似乎不是很有效,因为要检测的形状很简单,没有很多特定的特征。我还没有尝试过CNN,但它似乎最适合图像分类,而不是那么适合检测更大图像中的形状(但我不确定)
我认为第一个选项应该有效。你可以用傅里叶描述符来对分割的形状进行分类。
http://www.isy.liu.se/cvl/edu/TSBB08/lectures/DBgrkX1.pdf也许你可以在这里找到一些有用的东西:
http://www.pyimagesearch.com/2016/02/08/opencv-shape-detection/如果你想尝试一种更具挑战性但更现代的方法,可以考虑深度学习方法(我会从CNN开始)。在互联网上有许多可用的实现。虽然对于这个特定的项目来说可能有点多余,但它将来可能会对您有所帮助。