前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Wolfram语言把表格图像转换为CSV格式

用Wolfram语言把表格图像转换为CSV格式

作者头像
WolframChina
发布2019-07-31 12:26:10
9290
发布2019-07-31 12:26:10
举报
文章被收录于专栏:WOLFRAM

关键词:数据处理、图像处理

Mathematica教你如何处理那些非文本数据

以下范例演示如何使用图像处理功能将表的图像转换为可轻松操作的 CSV 文件。

在该表中,水平和垂直网格线比单元格的背景更暗。FindPeaks 用于查找这些网格线的位置。getGridLines 将返回包含行和列网格坐标的两个列表的列表。

代码语言:javascript
复制
getGridLines[img_, opts : OptionsPattern[]] := Block[{vals},
   vals = ImageData[Binarize[img, .7], opts];
   FindPeaks[1 - (Mean /@ #), 0, 0, .5][[All, 1]] & /@ {vals, 
     Transpose[vals]}
   ]
代码语言:javascript
复制
{rows, cols} = getGridLines[img, DataReversed -> True];
HighlightImage[img, {PointSize[.008], Red, Outer[List, cols, rows]}]

然后可以基于这些坐标对图像进行分割。 一旦图像被分割并进行一些小的清理,TextRecognize 就可以完成繁重的工作。

代码语言:javascript
复制
segmentImage[img_] := Block[{i = Binarize[img], rowPairs, colPairs},
   {rowPairs, colPairs} = Partition[#, 2, 1] & /@ getGridLines[img];
   Outer[ImageTake[i, ##] &, rowPairs, colPairs, 1]
   ];
cleanUp[data_, pats_] := MapAt[StringReplace[pats], data, {All, 2 ;;}];
data = cleanUp[TextRecognize /@ segmentImage[img], {" " -> ""}];
TextGrid[data]

此数据现在可以导出为 CSV。 导入 CSV 数据时,会自动解释数字,您可以使用标头构建 Dataset。

首先,在继续之前导入完整数据。

现在,您可以将美国人口的第一行与原始图像进行比较。

代码语言:javascript
复制
dset[["United States"]]
代码语言:javascript
复制
ImageTake[img, 80, {1250, -1}]

看起来这里的所有数据都匹配! 要检查其余数据是否也匹配,您可以获取除第一行之外的所有列的总和,并查看它们是否匹配。

代码语言:javascript
复制
dset[[2 ;;]][Total]

事实证明他们完全匹配!

代码语言:javascript
复制
dset[["United States"]] == dset[[2 ;;]][Total]
True

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WOLFRAM 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档