如何在matlab中从图形中提取数据?

如何在matlab中从图形中提取数据?,matlab,user-interface,plot,matlab-figure,Matlab,User Interface,Plot,Matlab Figure,我保存了不同的Matlab绘图在一个独特的。图。图为: 现在,我想在这些图中引入一个滤波器来减少噪声,但不幸的是,我丢失了生成这些信号的代码。 图中是否有提取每个信号数据的方法? 我试过这个: open('ttc_delay1000.fig'); h = gcf; %current figure handle axesObjs = get(h, 'Children'); %axes handles dataObjs = get(axesObjs, 'Children'); %handles

我保存了不同的Matlab绘图在一个独特的。图。图为: 现在,我想在这些图中引入一个滤波器来减少噪声,但不幸的是,我丢失了生成这些信号的代码。
图中是否有提取每个信号数据的方法? 我试过这个:

open('ttc_delay1000.fig'); 
h = gcf; %current figure handle
axesObjs = get(h, 'Children');  %axes handles
dataObjs = get(axesObjs, 'Children'); %handles to low-level graphics objects in axes

objTypes = get(dataObjs, 'Type');  %type of low-level graphics object

xdata = get(dataObjs, 'XData');  %data from low-level grahics objects
ydata = get(dataObjs, 'YData');
但我很困惑,我不知道这样做是否正确。
谢谢

针对您的问题的一行:

data = get(findobj(open('ttc_delay1000.fig'), 'Type','line'), {'XData','YData'});
步骤如下(从内部调用到外部调用):

  • 打开文件
  • 看看它的系列线
  • 返回数据
数据{n,1}
将包含
系列的
扩展数据
编号
n
,而
数据{n,2}
将包含所述
系列的
YData

如果您想直接平滑图形中的线条,其想法是相同的:

    %//Prepare moving average filter of size N
    N = 5;
    f = @(x) filter(ones(1,N)/N, 1, x);

    %//Smooth out the Y data of the LineSeries
    hf = open('ttc_delay1000.fig');
    for hl = transpose(findobj(hf,'Type','line'))
            set(hl, 'YData', f(get(hl,'YData')));
    end;
    saveas(hf, 'ttc_delay1000_smooth.fig');

那么,你的代码产生了什么?是的,这段代码应该可以完成这项工作;但是请记住,你已经失去了你的功能,你的数据样本数量有限,因此你需要对如何过滤/减少噪音保持明智。过滤高频噪音的一种残酷方式(我称之为chuck Norris)is:1/对信号进行fft运算-2/将高频对应的所有系数设置为0 3/对结果进行ifft运算以获得滤波信号。数学家或非Chuck Norris粉丝强烈建议在fft后使用高斯低通滤波器step@Betelgeuse我已经添加了代码来平滑线条。关于从数字中获取数据的原始问题已经得到了回答;询问过滤是一个完全不同的问题。请回答另一个问题。等等,findobj为孙辈工作?这些年来我一直在做什么@BillBokeey当第一个参数是图形句柄(或数组)时,搜索仅限于这些句柄及其后代。