我正在尝试从信号中检测某种形状的曲线及其位置,如下所示:
(图片链接:http ://tinypic.com/view.php?pic=ab5j45&s=6 )
我会将信号作为浮点数组获取。
由于噪声和其他变化,曲线可能不准确,所以我不能使用简单的数字匹配。我想知道 OpenCV 中是否有可以用于此目的的东西。
请注意,我需要检测不同形状的曲线及其在信号中的位置,但如果我知道检测一种类型,我可以使用相同的方法检测其他类型。
问候,彼得
我会尝试定义一个参数数学函数来表示您想要匹配的形状。
然后,您需要做的就是应用一种技术(例如最小二乘法)来获得与信号曲线最匹配的参数值。
您可能希望将您的函数与滑动窗口进行匹配,尤其是当您想匹配信号中的多个事件时。
噪声和“其他变化”是高频,因此您需要使用低通滤波器对信号进行滤波(对于滤波,使用卷积操作)。看来您的信号频率非常低(可能低于 5KHz?)。过滤后,查看您的信号,当您获得所需的曲线形状时,应用数值匹配。
匹配滤波器在与给定形状(或要匹配的模式的能量)最匹配的信号的整数位置处具有最高峰。但除此之外,匹配滤波器输出的相邻值通常可用于通过计算 (IIRC) 来微调位置tau = a-b/(a+b)
,其中 a=峰值,b 是次优值。
如果要匹配的信号具有良好的自相关特性——一个高峰值并且在距峰值 +-1 处接近零(基本上意味着检测导频信号),则此方法尤其有效。