我目前想知道一个应该很容易但到目前为止找不到简单解决方案的图像识别问题。
输入是一个大约 1 兆像素的矩形图片,显示一个轻的木质表面。它上面有一个薄但可见的网格。网格是黑黑色的,规则的,几乎是正方形的(大约比宽度长 8%)。网格大小正好是 19x19。一般的板颜色是“木头”,它可以变化,但往往是浅棕色。(更多信息)
表面上放置了许多小的,圆形的,黑白相间的石头。它们总是放置在十字路口,但由于人为错误,它们可能会稍微偏离。它们的颜色是纯黑色和白色。
棋盘上覆盖着 0 到大约 300 颗棋子(361 个十字路口的 80%)。黑色和白色石头的数量大致相同。
边界的大小(从未放置过棋子的棋盘边缘)各不相同,但已知为“小”。
光线可能会导致棋盘上出现石头的阴影。此外,它会导致在石头上出现一个白点(在光的方向上)。
我想检测网格上石头的位置。
我的想法是查看每个像素的亮度并将它们分为 3 类:浅色(白色石头)、中等(白板)和深色(黑色石头)。具有许多黑色像素的区域被认为是黑色石头,依此类推。
之后,可以使用黑白区域的大小来计算实际的网格大小。
另一个想法是识别网格线并使用它们来计算网格大小和位置。由于线条很细(并且经常被石头覆盖),我不知道该怎么做。
我很想听听你对这个问题的想法。有没有看起来合适的算法?你能想出一些很酷的技巧吗?我疯了吗?这个问题无法解决?我正在使用 C#,但欢迎使用任何语言。