提取超过阈值的数据

时间:2016-05-25 14:58:04

标签: matlab

因此,如果我有一个2000 x 4矩阵,其中第1行是时间戳,第2-4行是不同变量的数据。

我要做的是从一个变量(比如第2列)中提取数据超过某个阈值,但是我想从值返回时提取前100个样本和接下来的100个样本再次低于门槛。

1 个答案:

答案 0 :(得分:1)

检测值是否超过阈值:

overThresh=sampleMatrix(:,columnOfInterest)>threshold;

这会创建一个与矩阵长度相同的逻辑列向量,其中' true'指示大于阈值的元素。

现在要将这些区域扩展100个样本,我将使用图像处理技巧:图像扩张:

SE = strel('arbitrary', ones(100,1))
extractVector=imdilate(overThresh,SE)

现在,对于您想要的样本(在阈值+ 100旁边),extractVector为true。

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,:)
end
相关问题