以数字方式提取数据

时间:2016-07-04 08:23:35

标签: image-processing

enter image description here

我有200页这个页面(15 * 10矩阵),我必须在每个相应的单元格中写下0-9的所有数字,然后在(32 * 32像素)的单独图像中以数字方式提取这些数字扫描每页一次后,每个数字。我怎样才能实现这一目标?这是我的研究目的所必需的。我是CS学生,所以我也可以编码。

更新: 对于标记:这是扫描图像之一

enter image description here

这是针对某些当地语言(0 - 9)..

更新2:

上一张图片的命令工作正常但在新图像上出现问题(某种偏移)... 我附上下面的图片 enter image description here

你建议做些什么改变?

1 个答案:

答案 0 :(得分:1)

更新了答案

我已收到您的反馈并将算法改进为以下bash脚本...

#!/bin/bash
################################################################################
# dice
#
# Trim borders off an image (twice) and then dice into 10x15 cells.
# 
# Usage: ./dice image
################################################################################
# Pick up image name from first parameter
image="$1"
echo DEBUG: Processing image $image...

# Apply median filter to remove noisy black dots around image and then get the
# dimensions of the "trim box" - note we don't use the (degraded) median-filtered image in
# later steps.
trimbox=$(convert "$image" -median 9x9 -fuzz 50% -format %@ info:)
echo DEBUG: trimbox $trimbox

# Now trim original unfiltered image into stage1-$$.png (for debug)
convert "$1" -crop $trimbox +repage stage1-$$.png
echo DEBUG: Trimmed outer: stage1-$$.png

# Now trim column headings
convert stage1-$$.png -crop 2000x2590+120+190 +repage stage2-$$.png
echo DEBUG: Trimmed inner: stage2-$$.png

# Now slice into 10x15 rectangles
echo DEBUG: Slicing and dicing
convert stage2-$$.png -crop 10x15@ +repage rectangles-%03d.png

# Now trim the edges off the rectangles and resize all to a constant size
for f in rectangles*png; do
   echo DEBUG: Trimming and resizing $f
   trimbox=$(convert "$f" -median 9x9 -shave 15x15 -bordercolor black -border 15 -threshold 50% -floodfill +0+0 white -fuzz 50% -format %@ info:)
   echo DEBUG: Cell trimbox $trimbox
   convert "$f" -crop $trimbox +repage -resize 32x32! "$f"
done

以下是生成的单元格 - 即150个单独的图像文件。我在单个单元格/文件周围放置了一个红色边框,以便您可以看到它们的范围:

enter image description here

原始答案

我会用 ImageMagick 来做到这一点,这是免费的,并且安装在大多数Linux发行版上,也适用于OSX和Windows。如果您喜欢这些语言,还有Perl,PHP,Java,节点,.NET,Ruby,C / C ++绑定。这里我在终端使用命令行。

第一项工作是摆脱噪音并修剪外边缘:

convert scan.jpg -median 3x3 -fuzz 50% -trim +repage trimmed1.png

enter image description here

现在,再次修剪以摆脱顶部的外框和列标题:

convert trimmed1.png -crop 2000x2590+120+190 +repage trimmed2.png

enter image description here

现在按15个单元划分为10个单元格并保存为rectangles-nnn.png

convert trimmed2.png -crop 10x15@ rectangles-%03d.png

检查我们得到了什么 - 是的,150张图片:

ls -l rect*

rectangles-000.png  rectangles-022.png  rectangles-044.png  rectangles-066.png  rectangles-088.png  rectangles-110.png  rectangles-132.png
rectangles-001.png  rectangles-023.png  rectangles-045.png  rectangles-067.png  rectangles-089.png  rectangles-111.png  rectangles-133.png
rectangles-002.png  rectangles-024.png  rectangles-046.png  rectangles-068.png  rectangles-090.png  rectangles-112.png  rectangles-134.png
rectangles-003.png  rectangles-025.png  rectangles-047.png  rectangles-069.png  rectangles-091.png  rectangles-113.png  rectangles-135.png
rectangles-004.png  rectangles-026.png  rectangles-048.png  rectangles-070.png  rectangles-092.png  rectangles-114.png  rectangles-136.png
rectangles-005.png  rectangles-027.png  rectangles-049.png  rectangles-071.png  rectangles-093.png  rectangles-115.png  rectangles-137.png
rectangles-006.png  rectangles-028.png  rectangles-050.png  rectangles-072.png  rectangles-094.png  rectangles-116.png  rectangles-138.png
rectangles-007.png  rectangles-029.png  rectangles-051.png  rectangles-073.png  rectangles-095.png  rectangles-117.png  rectangles-139.png
rectangles-008.png  rectangles-030.png  rectangles-052.png  rectangles-074.png  rectangles-096.png  rectangles-118.png  rectangles-140.png
rectangles-009.png  rectangles-031.png  rectangles-053.png  rectangles-075.png  rectangles-097.png  rectangles-119.png  rectangles-141.png
rectangles-010.png  rectangles-032.png  rectangles-054.png  rectangles-076.png  rectangles-098.png  rectangles-120.png  rectangles-142.png
rectangles-011.png  rectangles-033.png  rectangles-055.png  rectangles-077.png  rectangles-099.png  rectangles-121.png  rectangles-143.png
rectangles-012.png  rectangles-034.png  rectangles-056.png  rectangles-078.png  rectangles-100.png  rectangles-122.png  rectangles-144.png
rectangles-013.png  rectangles-035.png  rectangles-057.png  rectangles-079.png  rectangles-101.png  rectangles-123.png  rectangles-145.png
rectangles-014.png  rectangles-036.png  rectangles-058.png  rectangles-080.png  rectangles-102.png  rectangles-124.png  rectangles-146.png
rectangles-015.png  rectangles-037.png  rectangles-059.png  rectangles-081.png  rectangles-103.png  rectangles-125.png  rectangles-147.png
rectangles-016.png  rectangles-038.png  rectangles-060.png  rectangles-082.png  rectangles-104.png  rectangles-126.png  rectangles-148.png
rectangles-017.png  rectangles-039.png  rectangles-061.png  rectangles-083.png  rectangles-105.png  rectangles-127.png  rectangles-149.png
rectangles-018.png  rectangles-040.png  rectangles-062.png  rectangles-084.png  rectangles-106.png  rectangles-128.png
rectangles-019.png  rectangles-041.png  rectangles-063.png  rectangles-085.png  rectangles-107.png  rectangles-129.png
rectangles-020.png  rectangles-042.png  rectangles-064.png  rectangles-086.png  rectangles-108.png  rectangles-130.png
rectangles-021.png  rectangles-043.png  rectangles-065.png  rectangles-087.png  rectangles-109.png  rectangles-131.png

看看第一对夫妇:

enter image description here enter image description here

您可以像这样执行以下3个步骤:

convert scan.jpg -median 3x3 -fuzz 50% -trim +repage  \
   -crop 2000x2590+120+190 +repage                    \
   -crop 10x15@ rectangles-%03d.png

你可能想要在每张图像的每一面上刮几个像素,然后使用(未经测试的)调整大小为32x32:

mogrify -shave 3x3 -resize 32x32! rectangles*png