在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)
我感兴趣的是在spans计数的数量中添加一个进一步的条件:对于minAcceptableLength,不仅当跨度大于above_threshold时,而且当两个不同跨度之间至少有N个样本时,也应该识别跨度(否则应将其计为1个跨度)。
任何帮助都是非常感谢的。
发布于 2017-01-16 19:20:57
可以使用一些形态学操作来确定两个跨度是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
以合并跨度。
https://stackoverflow.com/questions/41683511
复制