【问题标题】:How can I identify number of spans with a minimum N samples in between?如何识别中间至少有 N 个样本的跨度数?
【发布时间】:2017-01-17 03:25:58
【问题描述】:

在 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) 

我有兴趣在跨度计数中添加进一步的条件:跨度不仅应在大于 above_threshold 和 minAcceptableLength 时被识别,而且在两个不同跨度之间至少有 N 个样本时(否则它应该算作 1 个跨度)。

非常感谢任何帮助。

【问题讨论】:

    标签: matlab count signal-processing


    【解决方案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
    

    对于您的具体问题,您可以在调用bwlabel 之前将这些函数应用于isLongEnough 以合并跨度。

    【讨论】:

    • 如果一个跨度一开始不够长,但在合并跨度后它们变得足够长(然后它们将被视为跨度)怎么办?怎样才能避免这种情况?
    • @AJMA 您可以在above_threshold 上执行上述过程,而不是isLongEnough
    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2021-08-12
    • 2021-03-16
    • 2018-01-30
    • 1970-01-01
    相关资源
    最近更新 更多