赞
踩
0.引言
在读文献的时,经常遇到这样的情况:文章里提出的方法好有趣啊,好想拿文中用的数据来试试看看能不能得到相近的结果,可是文中只有根据原始数据绘制的曲线图,没有数据。如下图所示。
此时,如果能从文中把这幅图截取下来,输入到一个函数中去,最后能返回从图片中提取到的曲线的坐标数据,岂不美哉。
这便是本文的工作。
1.思路详解与分析
1.1准备待提取数据的曲线图片
将待提取数据的曲线的图片(如.jpg格式图片),利用imread输入到matlab中。
1.2曲线图片预处理与数据转换
曲线图片预处理步骤的主要工作包含如下:
(1)图像二值化
将输入图像进行二值化处理,但分割得到的结果并不全为数据,其中可能还包括坐标轴等干扰点需要去除。
(2)获取从图片像素到曲线坐标的定标数据
首先,通过ginput()手动从图片中提取到两个像素点,这两个点分别为曲线坐标框的左上角和右下角。
此时,便获得了曲线在图片上的像素范围
[x_index_min, x_index_max] & [y_index_min, y_index_max]
然后,手动输入实际曲线的数据坐标范围 [x_min, x_max] & [ymin, y_max]. 如下所示。
此时,一方面得到了像素坐标,一方面得到了实际坐标。接下来便利用这对数据,将图片中全部的像素坐标转换到实际坐标。
最终,得到了由图片提取到的数据散点图,如下
可以看到,此时得到的结果,虽然曲线与所需要的相近,但曲线外的部分,如坐标轴框、坐标轴刻度等也被转换成了数据,还需要进一步的处理。
1.3数据的进一步处理并得到最终曲线
这一步的主要工作是在数据中除去曲线之外的部分(包括坐标轴框、坐标轴刻度等);以及解决一个x数据对应多个y数据的情况。
显然,坐标轴在整幅数据中,均处于边界位置,因此&
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。