我正试图在手绘图中检测对象和文本.
我的目标是能够将像this这样的东西“解析”到对象结构中以便进一步处理.
我的第一个目标是检测文本,线条和方框(箭头等……并不重要(暂时;))
我可以做Dilatation,Erosion,Otsu thresholding,Invert等,轻松搞定像this这样的东西
接下来的步骤我需要一些指导.
我有几个想法:
>轮廓分析
>使用UNIPEN的OCR
>边缘检测
轮廓分析
我一直在阅读CodeProject上关于“C#中图像识别的轮廓分析”,这可能是识别盒子等的好方法.但我的问题是盒子是连接的,因此不会形成与模板匹配的单独对象.
因此,如果这是一种可行的方法,我需要一些建议.
OCR使用UNIPEN
我想使用UNIPEN(参见CodeProject上的“使用多神经网络的大型模式识别系统”)来识别手写字母,然后从图像中“移除”它们,只留下方框和线条.
边缘检测
另一种方法是检测所有线条和角落,并以此方式推断图像所包含的方框和线条.在这种情况下,关于如何拉直线条并找到90度角的想法会有所帮助.
一般来说,我认为我只需要一些关于应用哪种策略的指针,而不是代码示例(虽然它会很棒;))
最佳答案 我将尝试回答关于轮廓分析及它们之间的界限.
如果您需要将互连的盒子变成单独的对象,那么就可以轻松实现:
>通过形态学关闭来封闭盒子边缘的间隙
>执行连接组件标记并查找紧凑对象(例如,其区域接近其边界框区域的对象)
你将获得盒子的内部.这些可以是椭圆形或矩形或您在常见图表中可以找到的任何形状,轮廓分析可以告诉您哪个.封闭的背景区域可能会出现问题(例如示例图中ABC链接之间的空格).您可以根据其边界框与多个其他对象的边界框重叠的标准来消除这些.
现在找到HoughLinesP的线段.如果某个段在其中一个对象的边缘的某个距离内完成或启动,则可以假定它已连接到该对象.
作为一种额外的触摸,您可以通过检查其端点附近的线段的宽度轮廓来尝试检测任一侧的箭头末端.
这是一个有趣的问题,我会尽力记住它并将它交给我的学生咬牙切齿.