Triangle 发表于 2017-3-16 06:49:39

如果原始数据和程序已丢失,从图片文件中重新找回数..

有时候(比如写毕业大论文时),我们需要将几张图拿出来,合并成一张图。

但这些图可能是几年以前画的图片,怎么也找不到原始数据和程序了,只剩下一些Matlab的fig文件。

如何从这些fig文件中重新找回原始数据?

这时候,有个脑袋瓜转得快的童鞋举手了:我们可以用这些fig文件,画出jpg或者tif格式的曲线图,然后用这条推文[定制高级版:如何从别人论文里的曲线图中,获取数据点和线的值?]里的方法,不就可以了么?

童鞋你真聪明,下课后到这里来报到,给你平时成绩加10分。

但是,在这个问题上,如果使用上面那种方法至少有两个局限性:


(1) 当曲线上点的密集程度大到一定程度时,尤其是曲线的数量还不止一条时,采用鼠标手动取点会非常辛苦,如下图:



(2) 如果不是曲线图,而是等高线图,上面那种方法无能为力,如下图:


下面是几种从fig文件中重新找回原始数据方法,你值得拥有:


1. 单条曲线图





如果图像是类似于上面这样的单条曲线,可以通过下面方式输出横坐标,纵坐标的取值。
open('figname.fig');h_line=get(gca,'Children');xdata=get(h_line,'Xdata');ydata=get(h_line,'Ydata');

2. 多条曲线图





如果图像是类似于上面这样的多曲线,可以通过下面方式输出横坐标,纵坐标的取值。
open('figname.fig');lh = findall(gca, 'type', 'line');% 如果图中有多条曲线,lh为一个数组xc = get(lh, 'xdata');         % 取出x轴数据,xc是一个元胞数组yc = get(lh, 'ydata');         % 取出y轴数据,yc是一个元胞数组
%如果想取得第2条曲线的x,y坐标x2=xc{2};y2=yc{2};
3. 空间曲线






如果图像是类似于上面这样的空间曲线,可以通过下面方式输出x,y,z 坐标的取值。
open('figname.fig');h_line=get(gca,'Children');%get line handlesxdata=get(h_line,'Xdata');ydata=get(h_line,'Ydata');zdata=get(h_line,'Zdata');

4. 场图

如果图像是类似于上面这样的场图,即图像的每个像素都有数据,可以通过下面方式获得图像每个点的值。

输出data是矩阵,大小是图像像素的行列数。

open('figname.fig');h=get(gca,'Children');data=get(h,'Cdata');
不过,这些补救办法终究只是补救。最好的办法,还是在平时要养成备份的习惯:及时备份、多重备份!

转载自:3M君




                  

奋勇杀敌 发表于 2017-3-16 06:49:43

小手一抖,沙发到手!

阿森纳 发表于 2017-3-16 15:15:22

好好 学习了 确实不错

一揽芳华 发表于 2017-3-16 21:08:47

支持一下:lol

医学博士 发表于 2017-3-17 02:16:26

路过,学习下

田老师 发表于 2017-3-17 08:26:03

不知该说些什么。。。。。。就是谢谢

飘雪无垠 发表于 2017-3-18 18:59:18

过来看看的

风枫 发表于 2017-3-19 19:02:22

帮你顶下哈!!

爱学习的我 发表于 2017-3-19 22:13:30

沙发!习惯性沙发!

孤巷 发表于 2017-3-22 11:34:37

希望三角板论坛越来越强大!
页: [1] 2
查看完整版本: 如果原始数据和程序已丢失,从图片文件中重新找回数..