Matlab测量距离问题:仅获取黑色桩间距,如何计算空白区域距离?
用Matlab同时计算峰值与谷值间距的方法
你当前的代码仅通过findpeaks提取了波形中的峰值(对应图中的黑色桩),要同时计算空白区域(谷值)的距离,只需要对数据取反后再调用findpeaks,就能提取原数据的谷值位置,之后合并峰值和谷值的位置并排序,就可以计算所有相邻区间的距离。
修改后的代码如下:
clc; clear all; close all; imtool close all; workspace; I = [values of data]; % 替换为你的原始数据 % 提取峰值(黑色桩)的位置 [pks,locs,widths,proms] = findpeaks(I,'MinPeakProminence',4); findpeaks(I,'MinPeakProminence',4,'Annotate','extents'); text(locs+.02,pks,num2str((1:numel(pks))')); % 提取谷值(空白区域)的位置:对数据取反,谷值变为峰值 [~, valleys_locs] = findpeaks(-I,'MinPeakProminence',4); % 可根据实际数据调整prominence参数 % 合并峰值和谷值的位置,并按从小到大排序 all_locs = sort([locs, valleys_locs]); % 计算所有相邻位置的间距(包括桩之间、空白区域的距离) distances = diff(all_locs); % 可选:在图上标注间距 for i = 1:length(distances) mid_loc = (all_locs(i) + all_locs(i+1))/2; mid_val = (I(all_locs(i)) + I(all_locs(i+1)))/2; text(mid_loc, mid_val, num2str(distances(i)), 'HorizontalAlignment','center'); end
关键说明:
- 对原始数据
I取反得到-I,原数据的谷值会变成新数据的峰值,用findpeaks即可提取谷值位置 - 合并并排序所有峰值、谷值位置后,用
diff计算相邻位置的差值,就是所有区间的距离 - 可根据实际波形调整
MinPeakProminence参数,确保准确识别所有峰值和谷值

内容的提问来源于stack exchange,提问作者lam yaa
相关产品推荐
相关产品推荐

