【问题标题】:How to extract a 2D array from an image of the same array?如何从同一数组的图像中提取二维数组?
【发布时间】:2018-12-22 14:56:09
【问题描述】:

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

例如,如果数组的图像是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 开发一个基本的数独求解器,并且我已经用一个基本的回溯算法实现了同样的功能。现在,我不想通过输入二维数组来手动输入,而是想从数组的图像中获得相同的输入。

【问题讨论】:

标签: arrays algorithm image-processing


【解决方案1】:

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

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

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

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

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

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

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

另见:

Recognize numbers in images

【讨论】:

  • 感谢您的详细解释。如果图像是由相机拍摄的,您能否提供一些建议?
  • 从最简单的情况开始。就像你发的图片一样。仔细选择你的工具,例如 OpenCV 被广泛使用并且有据可查。你将从这个最简单的案例中学到很多东西。然后尝试从相机中识别出在最佳条件下拍摄的干净照片,并就如何处理相机图像的大小和分辨率等复杂问题进行大量研究。最终,您将解决所有难题并成为该主题的大师。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
相关资源
最近更新 更多