arrays - 如何从同一数组的图像中提取二维数组?

标签 arrays algorithm image-processing

是否可以从相同的图像中提取二维矩阵?由于没有这方面的相关经验,我无法进一步推进。

比如数组的图像是this ,对应的二维数组(空格用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 开发一个基本的数独解算器,并且我已经使用一个基本的回溯算法实现了相同的解算器。现在,我不想通过输入二维数组来手动输入,而是想从数组的图像中获取相同的内容。

最佳答案

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

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

对于第一部分,很多时候最好将图像从 24 位 rgb 颜色转换为 8 位灰度。这样,在 rgb 空间中具有几乎相同颜色的图像像素将被聚类为在 8 位灰度空间中具有相同的强度。在这种情况下,即使只有两种强度的二值图像也会很有用。有图像处理包可以为您完成。然后切割图像并不比进行二维数组操作更难。

对于第二部分,您可以丢弃所有强度与空方 block 相同的方 block 。对于非空方 block ,您必须调用数字识别算法。

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

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

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

另见:

Recognize numbers in images

关于arrays - 如何从同一数组的图像中提取二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51338463/

相关文章:

ruby - 如何在 ruby​​ 中找到第一个值的数组之间的并集

java - 区分表中的行

algorithm - 计算机视觉 : SURF (Speeded Up Robust Features) with Color consideration

java - A* 算法不到处寻找

python - 将url中的图像与python中文件系统中的图像进行比较

javascript - 如何在单击按钮时将 Javascript 数组传递到 PHP 数组?

java - 从数组中删除重复项并写入文本文件

algorithm - MATLAB中的相邻灰度相关性矩阵(NGLDM)

Android OpenCV - 从 Houghlines 检测曲线

将 float 32 位大端字节序转换为小端字节序