从纸上提取数据如何做到?
我发现关注我的这个公众号的有很多是学习时间序列的,那肯定有很多人看过这本书:
但是这本书有个缺点就是数据没办法下载,都是被打印成表格或者图像,有的是没有数据的。当时就感觉如果要是能从图像中将数据抠出来,那么或许还行。但是限制于代码能力,一直没成功过。后来在知乎上看了一个叫打浦桥程序员(https://www.zhihu.com/people/da-pu-qiao-cheng-xu-yuan)写的一个软件叫薅Curve。这个软件是基于matlab写的一个可以从图像中提取数据。他使用Matlab简直到了让我羡慕的地步,虽然不使用Matlab,但是感觉他写那个代码的精神让我佩服、震撼。
然鹅写这个文章也不是为了夸他的,我看着他用的这个Matlab做了这么酷的事情,我也就用python搞了一个,哈哈哈哈。但是目前还不成熟(肯定是和他的没法比)。但是也就相当于一个入门版,后面我会不断的完善这个软件。
实例说明:
在上面那个书里面的第264页有这样的一个图:
如果我想提取这个图怎么做:
第一步先将它导入:
import imageioimport matplotlib.pyplot as pltimport numpy as npfrom scipy.ndimage import convolve%matplotlib notebook img = imageio.imread('图像 6.jpeg')# img = imageio.imread('截屏2020-11-18 下午3.56.33.png')if img.shape[2] == 4: img = img[:, :, :3]img.shape
然后可视化:
接下来是将这个rgb图转换成灰色图像,用于后面处理,并画出这个图像的直方图:
然后我设置一定的范围,对像素点筛选:
被赛选后的点仍然包含大量的不相关的点,比如坐标等,这个时候使用matplotlib套索工具,将需要的点给他圈出来:
上面的套索设置好范围后,接下来就是筛选哪些点在这个范围内。使用python一些gis包就可以做到。
然后再将真实的点和虚拟的点的坐标关联起来,通过转换,即可达到提取到真实的数据:
当然,这目前还是第一版本的,后面继续更新,目前代码不会放出来。