首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据数字化提取

数据数字化提取
EN

Stack Overflow用户
提问于 2016-07-04 08:23:35
回答 1查看 88关注 0票数 0

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

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

这是一些本地语言(0-9)。

更新2:

上一张图像的命令运行良好,但在新图像上,某些地方出现了问题(某种偏移)。我正在附上下面的图片

你有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-04 21:58:14

最新答案

我接受了您的反馈,并将算法改进为下面的bash脚本.

代码语言:javascript
复制
#!/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个单独的图像文件。我在单个单元格/文件周围放置了一个红色边框,这样您就可以看到它们的范围:

原始答案

我会在ImageMagick上这样做,它是免费的,安装在大多数Linux发行版上,也可以在OSX和Windows上使用。如果您喜欢这些语言,也有Perl、PHP、Java、node、.NET、Ruby、C/C++绑定。这里我使用终端中的命令行。

第一项工作是消除噪音,修整外缘:

代码语言:javascript
复制
convert scan.jpg -median 3x3 -fuzz 50% -trim +repage trimmed1.png

现在,再修剪一次,去掉顶部的外部框架和列标题:

代码语言:javascript
复制
convert trimmed1.png -crop 2000x2590+120+190 +repage trimmed2.png

现在被15个细胞分裂成10个细胞并保存为rectangles-nnn.png

代码语言:javascript
复制
convert trimmed2.png -crop 10x15@ rectangles-%03d.png

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

代码语言:javascript
复制
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

看看第一对:

您可以在1中完成这3个步骤,如下所示:

代码语言:javascript
复制
convert scan.jpg -median 3x3 -fuzz 50% -trim +repage  \
   -crop 2000x2590+120+190 +repage                    \
   -crop 10x15@ rectangles-%03d.png

您可能想要在每幅图像的每一面上刮掉几个像素,然后用(未经测试)这样的方法将大小调整到32x32:

代码语言:javascript
复制
mogrify -shave 3x3 -resize 32x32! rectangles*png
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38179958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档