2012-04-17 90 views
4

我打算检测从C#中的字符(OCR)生成的线的端点。我想是这样的:线端点检测

enter image description here

我的意思是“终点”什么是我想要得到的任何线路的两端中的人物......例如“C”有两个端点(一个在顶部和底部一个),如上图所示,用红色像素表示。我可以从“更胖”的现有扫描字符中提取单行,我可以进行边缘检测并进行Flood-fill分析,但似乎无法复制上述内容!任何指向文章或现有代码的指针将非常感谢!任何代码示例都会很好,因为我可以轻松地将C++或任何.NET语言转换为C#。

谢谢,乔希

回答

1

既然你没有的“终点”,但是,我建议一个定义:

  • 一个黑点是IIF所有邻居(即黑点与曼哈顿距离终点< = 3)位于小于45度的扇区中。

找到每个相邻黑点的角度不应太困难。对这些角度进行排序并找到范围也并不困难,但需要注意不连续性(角度突然变化360度)。按斜率排序可能稍微快一些,但实际上并不计算角度。使用提前退出逻辑可以获得额外的加速。

+0

好吧我会用定义更新问题。基本上我想得到的是任何行的结尾......例如'C'有两个端点(一个在顶部,一个在底部),如上图所示,用红色像素表示。我还考虑过扫描整行(因为我已经使用了黑色的像素,因为我使用了填充算法来从PNG中选择字符,然后使用线条细化算法将它缩小到一行)并搜索仅被另一个黑色像素包围的黑色像素(包括对角线在内的所有方向)。 – jduncanator 2012-04-18 06:08:42

+0

@jduncanator:这个定义没有足够的技术来实际使用。另外,一个端点可能很容易有两个黑色的邻居,都在同一侧。 – 2012-04-18 14:20:27