如何在手绘图像中获取特定物体或形状的位置(x,y)和数量?

时间:2013-03-23 08:11:33

标签: image-processing computer-vision neural-network object-detection handwriting

首先,我自己学习了几周关于图像处理,NN,dll的知识,所以我真的很陌生。对不起我的英语不好。

我的绘图有图像或照片,我想得到物体/形状(黑点)的坐标n,它周围的数字,数字表示点的序号。

The image

如何获得它?如何检测点?点的形状识别?数字手写识别?然后分割得到位置?或者使用模板匹配?但是由于手绘,每个点都有不同的形状。使用神经网络?在NN中,神经元通常包含每个像素来识别一个角色,对吧?我可以使用每个神经元所包含的角色或绘图点来识别我的整个画面吗?

我很新,所以我真的需要你的建议,如果我错了,请纠正我!请告诉我我必须学习什么,必须做什么,必须使用什么。  非常感谢你。 :“d

1 个答案:

答案 0 :(得分:2)

这是一个难以通过快速解决方案解决的难题。

以下是我将如何处理它:

  1. 获得更好的图片。您的图像非常嘈杂,并且在高光照条件下拍摄。使用更好的相机和更好的照明条件,这样您可以使背景尽可能白,并尽可能使黑点。尽量使对比度最大化。
  2. 对图像进行阈值处理,使所有背景都为白色,点和数字为黑色。也许你可以应用一些侵蚀和/或扩张来帮助将黑暗边缘连接在一起。
  3. 以某种方式检测矩形,并将工作区域设置为矩形内部(裁剪图像的其余部分,以便留下矩形内的区域)。您可以通过检测图像中的轮廓来完成此操作,然后具有最大区域的轮廓是矩形(因为它是图像中的最大对象)。当然,这不是唯一的方法。请参阅:OpenCV find contours
  4. 一旦你只剩下点,圆圈和数字,你需要找到一种方法来检测它们并区分它们。您可以再次找到所有轮廓(或者您可能已经从上一步中找到了所有轮廓)。您需要找出一种方法来查看某个轮廓是圆形,圆形(圆点)还是数字。这是它自己的问题。也许你可以计算轮廓边界框中的白/黑像素。圆点和数字的黑色像素数更多。您还需要对与点连接的数字(如图像中的数字5)进行一些操作
  5. 一旦你知道什么是圆点,圆圈或数字,就可以使用OCR库(Tesseract or any other OCR lib)来尝试识别这些数字。您还可以使用神经网络库(可能使用MNIST dataset进行训练)来识别数字。一个好的将是一个类似于LeNet-5的卷积神经网络。
  6. 正如您所看到的,这是一个需要解决许多不同步骤的问题,并且涉及许多不同的组件。我建议的步骤可能不是最好的,但我认为可以解决一些工作。