绘图数字化 - 从图形图像中提取样本值

Posted

技术标签:

【中文标题】绘图数字化 - 从图形图像中提取样本值【英文标题】:Plot digitization - scraping sample values from an image of a graph 【发布时间】:2010-12-12 02:11:47 【问题描述】:

这并不是真正的“OCR”,因为它不能识别字符,但它与应用于曲线的想法相同。任何人都知道用于从(光栅)绘图图像中检索值的图像处理库或已建立的算法?例如,在这张图表中,我很难用眼睛读取准确的值,因为网格线之间存在这样的差距:

我可以使用直尺之类的,但它仍然容易出错。如果有软件可以截取任何旧图并自动将其转换为值表或可以查询的函数,那就太好了。

好像叫“曲线识别”?也可用于从未发表基础数据的科学论文中的曲线中提取数据。

并且可以有一些人工指导。例如,OCR 没有理由无法读取“100”并将其与线条匹配,但是在机器提取曲线相对于网格线的路径后,让人类给线条数值是可以的。我最感兴趣的是相对于网格跟踪曲线的功能,即使网格倾斜、旋转或warped in a non-affine way。

更新:

现在有一篇名为Converting scanned graphs to data 的***文章,链接中有一堆软件。还有一些software on alternativeto.net。我猜理论现在属于http://dsp.stackexchange.com,而软件解决方案属于http://superuser.com?

【问题讨论】:

我使用过arohatgi.info/WebPlotDigitizer 需要对图形进行一些手动注释,但在您的情况下,我认为这是最简单的选择! @RasmusBååth:是的,这就是我一直在使用的。不过,这更像是一个编程问题。 我使用PlotDigitizer。你可以试试它的free online app here。 【参考方案1】:

这是非常困难且容易出错的。 (我们在尝试分析化学的化学中经常做这种事情。)这主要取决于各种参数和条件。

    图像是位图(仅像素)还是矢量(EMF、WMF、SVG、PS、PDF...)?矢量比像素好得多。我们处理矢量(包括 PDF),但不接触像素。我们的一些合作者会尝试使用像素,但仅限于最近的文档。 如果您遇到像素问题,那么您的图像是否都来自同一来源?如果是这样,您提取字体信息的机会很小。恐怕你的形象太差了,需要做很多工作。但是,如果您可以计算出字体,那么如果所有文档都来自同一来源,您就有机会提取文本和数字。您可以使用启发式(例如数字可能在哪里等规则)或机器学习(可以训练方法的特征列表)。 您的图像似乎已被扫描(因为轴已像素化)。这使情况变得更糟。对机器来说,看起来直线的东西是可怕的。您的图像在页面上是否倾斜?您可能需要对其进行校正。 如果您有直线和曲线的模型,那么您可能需要将建模预期参数更改为图像。但这并非小事。

对不起,我很悲观。如果您真的想要这些信息,那么可以通过大量投资或与从事此类事情的团体合作来完成。

【讨论】:

我认为这并不像您想象的那么难。您对此有什么具体经验?我不明白刮图与“分析化学”有什么关系。 是的,我指的是光栅化图形,而不是矢量图。 @endolith 上图很可能出现在化学论文中。我们已经分析(并在同行评审的期刊上发表)如何从科学论文中提取信息。这些碰巧主要是在化学中,但它们包含显示该问题所有方面的图表。你“不认为它像我想象的那么难”。如果您实际上已经设法编写了软件,并且可以从显示的图片中提取信息(无需人工帮助),那么您会让很多人感到惊讶。 我的问题的重点是读取曲线相对于网格线的位置,而不是读取文本。我在问题的第一句话就这么说了。但我仍然坚持我的说法,即 OCR 读取数字“100”没有问题,特别是因为我刚刚通过 ocrterminal.com、onlineocr.net、free-ocr.com 和 googlecodesamples.com 运行了这张图片,他们都读到了“ 100”。这些针对文本页面进行了优化。如果 OCR 算法知道它在寻找数字而不是字母,并且它们沿着网格对齐,那么它会更加准确。 “您的图像似乎已被扫描……这使情况变得更糟。对机器来说,直线看起来很可怕。”我不明白为什么。即使是 Hough 变换示例脚本也可以找到图像中的线条:flickr.com/photos/56868697@N00/4071011102 寻找等长的等距平行线的专用程序应该能够很好地做到这一点。【参考方案2】:

“曲线识别软件”的谷歌建议http://www.curveunscan.com/

【讨论】:

Hmmm... 上面写着“曲线识别算法”,还讲了手动挑点:curveunscan.com/features.htm 这有点用,但需要大量手工挑选点,跟踪曲线不佳,并且经常崩溃。 :// 这是另一个软件解决方案,具有一定的曲线跟随能力:digitizer.sourceforge.net【参考方案3】:

http://www.digitizeit.de/ 是一个用于数字化图形的程序。

【讨论】:

【参考方案4】:

还有 potrace 是相关的,该页面又提到了其他选择

【讨论】:

【参考方案5】:

我不知道有什么软件可以满足您的要求,但如果您只能得到几个点,您可以使用某种回归来找到适合这些点的最佳函数。这个特殊的图表看起来像一个指数函数。所以你会想找到一个指数回归计算器。

【讨论】:

请告诉我们哪个“回归计算器”可以从图像中读取数据?【参考方案6】:

我使用 im2graph 将图形图像转换为数据,即数字。 im2graph 是免费的,可用于 Linux 和 Windows。非常顺利,您只需很少的努力即可产生结果。 见http://www.im2graph.co.il

【讨论】:

【参考方案7】:

用肉眼很难刮取数值。但是您可以使用图形数字化仪来对离网点进行采样。互联网上有很多这样的工具。有人已经提到过Digitizeit。但是,它不是免费的。

这是我常用的从图表和扫描文档中提取数据点的首选工具。

    PlotDigitizer.com:免费(在线)付费(离线),支持多图。它还支持对数刻度,就像您的图表中的那样。 WebPlotDigitizer:它也是一个非常流行的工具并且完全免费。但有时,我发现它有问题和故障。 Digitizeit:它是一个付费工具,没有在线版本。

【讨论】:

以上是关于绘图数字化 - 从图形图像中提取样本值的主要内容,如果未能解决你的问题,请参考以下文章

数字图像处理的Matlab实现—灰度变换与空间滤波

如何使用python从图像中提取文本或数字

基于opencv实现人脸识别案例

图像隐写基于matlab遗传算法的奇异值分解数字水印嵌入提取含Matlab源码 2115期

图像隐写基于matlab遗传算法的奇异值分解数字水印嵌入提取含Matlab源码 2115期

从jpeg中提取十六进制颜色,存储在data.frame中,然后使用ggplot进行绘图