||
在科研中,我们有时想把别人文章里的数据扣出来和自己的数据进行比较。如果是散点图可以使用像GetData和Origin的Digitizer插件来抠图。这些软件一般都是用鼠标一个一个点击数据点的方法来抠图。但是对于连续曲线据比如XRD,XPS等如何抠图呢(图1)?用鼠标一个一个的点工作量就很大很麻烦,而且用鼠标点击也有一定的误差。这里提供一种用MATLAB结合Origin对连续曲线进行抠图读取数据的方法,避免了用鼠标点的繁琐和误差。
图 1 连续的曲线数据如何抠图呢?
所需程序:MATLAB、Origin、Photoshop(必要时)
脚本和例子:dig_curve_data.rar (点击下载)
使用方法:
1. 用截屏软件将数据图从文章里截取下来,如果截取的图片里除了你想要的数据曲线外还有其他的数据曲线和标注,需用Photoshop将图片处理干净,必须保证在“数据采集区域”内只有你想抠取的曲线(“数据采集区域”定义见图5)。
2. 运行dig_curve_data.m,此时会弹出第一个“选择要打开的文件”对话框,选中刚才的截图。选择后会在图片所在的文件夹会生成“I.mat”文件,这个“I.mat”文件存储着图片每一个像素点的颜色值(0-255)。紧接着会弹出第二个“选择要打开的文件”对话框,此时先不要着急选择文件,因为下面要用Origin修改输入文件里的参数值。
3. 将“I.mat”导入到Origin中(“I.mat”为二进制文件,但是可以被Origin读取)。选择菜单Worksheet → Convert to Matrix… → Direct将Worksheet转换为Mbook(如图2)。
图 2 将Worksheet转换为Mbook
4. 然后选择菜单Plot→ Contour → Color Fill(图3)将生成的Matrix绘成Color Fill图(图4 左图)。由于数据量一般都很大,所以会在图上出现“Speed Mode is On”的字样。此时右击图片,在弹出的菜单中选择Plot Details…,在弹出的对话框中选择Layer子菜单,不勾选Matrix data, maximum复选框,就可以将Speed Mode关闭(图4)。
图 3 将转换的Mbook利用Contour Fill绘图
图 4 关闭Speed Mode
5. 用记事本打开input.txt,在input.txt中设置三个参考点的值和数值像素值,像素值使用Origin的Data reader工具读取。并设定抠图区域,设定的抠图区域内必须要保证“数据采集区域内”只有数据曲线,没有其他曲线和标注。input.txt输入模板如下表,各个参数的含义见图5。
677.5 1000 %原点坐标(do), 698 1000 %x轴对应的坐标(dx), 677.5 22000 %y轴对应的坐标(dy), 629 412 %原点轴对应的像素值(po), 3020 412 %y轴对应的像素值(px), 629 2192 %y轴对应的像素值(py), 796 522 %数据采集区域对角线第一个顶点region_1的像素值,需要手动输入 3000 2000 %矩形方框对角线第二个顶点region_2的像素值,默认值为0的时候为图片最右上端的像素值。 |
图 5 input.txt各个参数的示意图
6.编辑好input.txt后再转到MATLAB中,在“选择要打开的文件”对话框中选择input.txt文件。运行成功后就可以得到一个“图片名+.dat”的文件,这个就是抠取的数据的文件,其中部分y值为NaN代表此处没有数据点。
说 明:
1.矢量dx-do必须要和dy-do垂直;
2.如果抠图数据和原图对不上,可能是因为判断像素点是否为数据点的标准有问题,可以手动修改脚本中lp的值;
3.本程序只是提供一个程序设计思路,不习惯MALAB的网友可以根据本程序思想在其他语言下编写程序;
4.如有疑问或bug请@肖瑞春(xiaoruichun@foxmail.com);
5.如果线比较粗,像素点比较大也是可以成功抠图的,这里的算法是取像素点的平均值,因为数据值一般都在像素点的中间。
6.稍后如果有需要将更新脚本,让程序自动进行颜色判断,不用PS处理图片,而且可以对多条曲线进行抠图。
7.抠图数据仅供研究,如果需要在期刊发表请主动联系数据作者。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-13 04:54
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社