在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个跨度)。
非常感谢任何帮助。
答案 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
以合并范围。