我创建了一个iPhone应用程序,可以扫描图纸页面的图像,并告诉我哪些方格被涂黑,哪些方格是空白的。
我从左到右进行扫描,并使用图纸上的线作为指南。当我遇到图纸线时,我开始寻找黑色,直到再次遇到图纸线。然后,我不再沿着扫描线继续,而是完全扫描该方格以寻找黑色。然后我继续下一个框。在行末,我跳过几个像素然后重新开始扫描新一行(因为我已经确定每个框有多高)。
这种方法有点有效,但存在问题。有时我会将图纸线误认为是“黑色”。有时,如果图像倾斜或页面照明不均匀,则无法获得良好的结果。
我想做的是指定几个“对齐”框,然后调整图片大小和旋转(和扭曲)以与这些框对齐。然后,我想,一旦我对齐了图像,我就知道所有方格的位置,就不必扫描方格,只需扫描方格位置内部以查看它们是否为黑色。这样应该更快,更可靠。如果我要操作来自相机的图像,我将更有灵活性,可以要求用户将图片对齐以匹配对齐标记,而不是必须自己对齐图像。
鉴于这是我的第一个图像处理项目,我感觉自己在重复造轮子。我希望得到关于如何做到这一点以及是否使用OpenCV等库的建议。
我附上了一个类似于我想要处理的图像。我正在寻找所有具有显着黑色标记的方格列表,即A8、C4、E7、G4、H1、J9。
注意以下问题:
我从左到右进行扫描,并使用图纸上的线作为指南。当我遇到图纸线时,我开始寻找黑色,直到再次遇到图纸线。然后,我不再沿着扫描线继续,而是完全扫描该方格以寻找黑色。然后我继续下一个框。在行末,我跳过几个像素然后重新开始扫描新一行(因为我已经确定每个框有多高)。
这种方法有点有效,但存在问题。有时我会将图纸线误认为是“黑色”。有时,如果图像倾斜或页面照明不均匀,则无法获得良好的结果。
我想做的是指定几个“对齐”框,然后调整图片大小和旋转(和扭曲)以与这些框对齐。然后,我想,一旦我对齐了图像,我就知道所有方格的位置,就不必扫描方格,只需扫描方格位置内部以查看它们是否为黑色。这样应该更快,更可靠。如果我要操作来自相机的图像,我将更有灵活性,可以要求用户将图片对齐以匹配对齐标记,而不是必须自己对齐图像。
鉴于这是我的第一个图像处理项目,我感觉自己在重复造轮子。我希望得到关于如何做到这一点以及是否使用OpenCV等库的建议。
我附上了一个类似于我想要处理的图像。我正在寻找所有具有显着黑色标记的方格列表,即A8、C4、E7、G4、H1、J9。
注意以下问题:
- 图像的光覆盖可能不是理想的,但应在整个图像中相对一致(即没有阴影)。
- 所有方块都可以为空或全部为黑色,并且算法需要能够确定这一点。
- 图像可能会倾斜或绕任何轴旋转。绕z轴的旋转可能很容易修复。可能会围绕x或y轴旋转,使图像的一侧比另一侧宽。然而,如果我实时扫描从相机接收的图像,我可以要求用户将对齐标记与屏幕上的标记对齐。如何最好地确保对齐以给用户适当的反馈?只检查4个角是否为黑色可能会产生误报,当相机指向黑色表面时。
- 并不是每个方格都会被均匀或持续涂黑,但我认为会有足够的黑色,让人类眼睛毫无疑问。
- 蓝色网格可能有用,但有些情况下黑色标记可能会重叠蓝色网格。我认为虚拟网格可能比依赖打印网格更好。我认为使用对齐标记来对齐图像,然后允许布置精确虚拟网格。然后可以对每个网格框的内容进行采样,以查看它是否主要为黑色,而不是从左到右扫描,对吧?这是另一张有更多网格标记的图像。在此图像中,除了先前标记的A8、C4、E7、G4、H1、J9、I之外,我还标记了E2、G8和G9、I4和J4,您可以看到蓝色网格被遮挡。
- 这是我这个项目的第一阶段。最终,我希望将该算法扩展到能够处理至少几百个插槽和可能不同的颜色。