因此,如果我有一个2000 x 4的矩阵,其中行1是时间戳,行2-4是不同变量的数据。
我要做的是从一个变量(比方说第二列)中提取数据超过某个阈值,但是我想从该值再次低于阈值时提取前100个样本和下100个样本。
发布于 2016-05-25 23:21:38
检测某个值是否超过阈值:
overThresh=sampleMatrix(:,columnOfInterest)>threshold;这会创建一个与矩阵长度相同的逻辑列向量,其中'true‘表示大于阈值的元素。
现在,为了将这些区域扩展100个样本,我将使用图像处理中的一个技巧:图像扩张:
SE = strel('arbitrary', ones(100,1))
extractVector=imdilate(overThresh,SE)现在,对于您想要的样本,extractVector为真(在它们旁边超过阈值+ 100 )。
interestingSamples=sampleMatrix(extractVector,:)这将为您提供一个矩阵,其中包含所有列的值,但只包含您感兴趣的行。
编辑:您可以使用以下命令为每个违反阈值的事件分配标签(整数):
overthreshLabeled=bwlabel(overthresh);现在,每个区域将由一个数字组成,而不是"true's“。其中每个数字对应于超过阈值的相邻事件的特定区域。然后,您可以遍历区域编号并提取这些值,并将它们全部放入一个单元格中(必须是一个单元格,因为它们可以有不同的长度)。
ROIs{1,max(labeledThreshold)}=[]; % preallocation
for i=1:max(labeledThreshold)
region=labeledThreshold==i;
extractVector=imdilate(overThresh,SE) % Note: set SE before loop
ROIs{1,i}=sampleMatrix(extractVector,:)
endhttps://stackoverflow.com/questions/37440881
复制相似问题