3 回答

TA贡献1798条经验 获得超7个赞
首先,我发现您的初始方法相当不错,我可能会尝试相同的方式(我特别欣赏行/列投影以及直方图,这是一种被低估的方法,通常在实际应用中非常有效)。
但是,由于您希望采用更健壮的处理管道,因此以下建议可以完全自动化(同时通过ImageMagick消除去偏斜):
特征提取:通过广义霍夫变换提取圆。正如其他答案所建议的那样,您可以使用OpenCV的Python包装器。检测器可能会漏掉一些圆圈,但这并不重要。
使用圆心应用鲁棒的对准检测器。您可以使用此处所述的Desloneux无参数检测器。不用担心数学,该过程很容易实现(您可以在线找到示例实现)。
通过选择方向来消除对角线。
找到直线的交点以获得点。您可以通过假设这些相交的理想固定位置来将这些坐标用于偏斜校正。
该管道可能会占用一些CPU资源(尤其是步骤2,该过程将继续进行某种贪婪的搜索),但是它应该非常健壮和自动。

TA贡献1863条经验 获得超2个赞
正确的方法是对图像使用Connected Component分析,将其分割为“对象”。然后,您可以使用更高级别的算法(例如,在分量质心上进行霍夫变换)来检测网格,并通过查看网格包含的活动像素数来确定每个单元的开/关状态。

TA贡献1864条经验 获得超6个赞
如果您将分量质心的位置视为输入到hough变换中的数据点(而不是单个像素)的位置,则会对单元格所在的行进行非常快速的“低分辨率”分析。这也可以删除需要预先校正。另一种选择是使用Ransac来确定网格的布置。从像素级升级到组件级后,事情将变得更加直观,您基本上可以轻松地提出强大的解决方案。
添加回答
举报