如何识别中间至少有N个样本的跨距数?

时间:2017-01-16 19:14:49

标签: matlab count signal-processing

在Matlab上,我有一段代码在生物医学信号中计算超过某个阈值的跨度数:

   EMG_signal = [1 2 4 2 0 0 2 2 0 2 0 2 2 2] % Sample signal with 2 bursts
   threshold = 1.5
   above_threshold = (EMG_signal > threshold)
   minAcceptableLength = 3; % or 200 or whatever.
   % Find spans that are long enough.
   isLongEnough = bwareafilt(above_threshold, [minAcceptableLength, inf])
   % Count the number of spans (bursts) that are long enough.
   [labeledSpans, numberOfBursts] = bwlabel(isLongEnough) 

我有兴趣为spants数增加一个条件:不仅要在大于above_threshold和minAcceptableLength时识别跨度,还要在两个不同跨度之间存在最少N个样本时识别跨度(否则它应该算作1个跨度)。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用一些形态学操作来确定两个跨距是N还是更多样本。我们的想法是通过N样本“扩展”1的每个跨度,这样理论上会合并两个跨度,它们比N个样本分开。然后,您可以通过对相同数量的样本进行侵蚀来进行跟踪,这将使所有跨度缩小回原始大小,但合并的跨度将保持合并。

在图像处理工具箱中,此方法随imclose

一起提供
values = [1 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 1 1];

N = 3;      % Breaks between span < 3 will be removed

kernel = repmat(1, 1, N);

result = imclose(values, kernel);
%   1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 0 1 1 1 1 1

针对您的具体问题,您可以在调用isLongEnough之前将这些功能应用于bwlabel以合并范围。

相关问题