如何从同一阵列的图像中提取2D阵列



是否可以从相同的图像中提取2D矩阵?由于没有这方面的相关经验,我很难继续前进。

例如,如果阵列的图像是这样的,则对应的2D阵列(空白由0表示(将如下:

5 3 0 0 7 0 0 0 0
6 0 0 1 9 5 0 0 0
0 9 8 0 0 0 0 6 0
8 0 0 0 6 0 0 0 3
4 0 0 8 0 3 0 0 1
7 0 0 0 2 0 0 0 6
0 6 0 0 0 0 2 8 0
0 0 0 4 1 9 0 0 5
0 0 0 0 8 0 0 7 9

我想知道一些算法或软件,可以帮助我提取数组。由于我之前没有任何经验,即使是朝着正确的方向努力也将不胜感激。

背景:我正在使用Java开发一个基本的数独求解器,我已经用一个基本回溯算法实现了它。现在,我不想通过键入2D阵列来手动输入,而是想从阵列的图像中获得相同的输入。

图像识别并不像看上去那么简单。低分辨率的低质量图片很难处理,因为它有阴影或有光泽的部分比其他部分更亮。更不用说相机的3D角度和图像平面中的2D旋转了。在图像识别开始之前,所有这些因素都应该被减少或消除。

假设您有一个宽度和高度已知的干净输入图像,您需要将输入图像切成与矩阵条目相对应的几个正方形。然后对每个小的子图像运行一个数字识别算法。

对于第一部分,很多时候最好将图像从24位rgb颜色转换为8位灰度。这样,在rgb空间中具有几乎相同颜色的图像像素将被聚类为在8比特灰度空间中具有相同强度。在这种情况下,即使是只有两个强度的二进制图像也是有用的。有一些图像处理包可以为你做这件事。然后,剪切图像并不比进行2D阵列操作更难。

对于第二部分,可以将强度相同的所有正方形都丢弃为空。对于非空正方形,你必须调用一个数字识别算法。

您可以使用许多用于模式识别的软件包,例如OpenCV或特定的OCR(光学字符识别(软件包。

为此编写自己的前馈神经网络并不难:

https://en.m.wikipedia.org/wiki/Feedforward_neural_network

另请参阅:

识别图像中的数字

最新更新