最近在做课题研究的时候,在三维曲面寻找波峰方面遇到了些困难,虽然查找资料的时候有看到findpeaks和imregionalmax两个找极大值的函数,要么就是只适用于二位曲线,要么就是不能很好地滤除噪声引起的无效波峰,最后偶然看到一个大佬的思想,给了我很大的启发。
本文参考波峰识别算法介绍 | Zealseeker's Blog中的峰突prominence思想,对该识别算法进行说明改进,以利用MATLAB工具实现三维曲面中的有效波峰标定。
参考文章中对二维曲线进行举例说明,如下图所示,共有5个可见波峰,有效波峰用o表示,噪声引起的无效波峰用x表示,最大高度为5个单位长度。
假设对第3个x波峰进行检测,计算该点向左的波谷left_base,从波峰依次向左前进,若识别到该点比前一个点的高度更低,则继续向左前进,直至到达波谷,认为该点为left_base,同理向右前进可以得到right_base。
然后计算峰突强度(即峰突出的强度)prominence,假设该波峰x的高度为h,则
prominence=min(h-left_base,h-right_base)
可以得到,该波峰的left_base=3-2=1,right_base=3-1=2,则prominence=min(1,2)=1。