亚像素数值极值检测算法总结

动机

在计算机视觉领域,经常需要检测极值位置,比如SIFT关键点检测、模板匹配获得最大响应位置、统计直方图峰值位置、边缘检测等等,有时只需要像素精度就可以,有时则需要亚像素精度。本文尝试总结几种常用的一维离散数据极值检测方法,几个算法主要来自论文《A Comparison of Algorithms for Subpixel Peak Detection》,加上自己的理解和推导。

问题定义

给定如下离散值,求其极值位置。可知125为观察极值。

\[[60, 80, 100, 120, 125, 105, 70, 55]\]

如果这些离散值是从某个分布\(f\)中等间距采样获得,其真正的极值位置应位于120和125之间。

下面给出形式化的定义:给定一组离散值,令\(x\)为观测到的极值点位置,其值为\(f(x)\),其左右相邻位置的值为\(f(x-1)\)和\(f(x+1)\),真正的极值点位置为\(x+\delta\),令\(\hat{\delta}\)为\(\delta\)的估计值。

算法

假设\(x\)的邻域可通过某个模型进行近似,如高斯近似、抛物线近似,则可以利用\(x\)的邻域信息根据模型估计出极值。使用的模型不同就有不同的算法,具体如下。

高斯近似

一维高斯函数如下:

\[y = y_{max} \cdot exp(-\frac{(x-\mu)^2}{2\sigma^2})\]

当\(y_{max}=\frac{1}{\sqrt{2\sigma}\pi}\)时为标准高斯函数,形如

假设\(x\)的邻域可用高斯近似,用\((x, f(x))\)、\((x-1, f(x-1))\)、\((x+1, f(x+1))\)三点对高斯函数进行拟合,获得模型参数\(\mu\)即为峰值位置,\(\hat{\delta}=\mu - x\)。将三点带入上面的高斯函数两边同时取对数求得:

\[\hat{\delta} = \frac{1}{2} \frac{\ln(f(x-1)) - \ln(f(x+1))}{\ln(f(x-1)) - 2\ln(f(x)) + \ln(f(x+1))}\]

下面可以看到,高斯近似相当于取对数后的抛物线近似

抛物线近似

使用抛物线近似\(x\)的局部,可以将\((x, f(x))\)、\((x-1, f(x-1))\)、\((x+1, f(x+1))\)三点带入\(y=a(x-b)^2+c\)求参数\(b\)即为估计的极值位置,也可采用泰勒展开牛顿法)来求极值。泰勒公式实际上是一种利用高阶导数通过多项式近似函数的方法,下面的图示可直观理解这种近似,图示为通过泰勒公式近似原点附近的正弦曲线:

泰勒近似\(x\)附近,如只取到二阶则为抛物线近似。假设高阶可导,极值为\(f(x+\delta)\),则根据泰勒公式,

\[f(x+\delta) = f(x) + f‘(x)\delta + \frac{1}{2} f‘‘(x)\delta^2 + O(\delta^3)\]

极值处导数为0,这里\(x\)为常数\(\delta\)为变量,两边同时对\(\delta\)求导,忽略高阶项可得

\[f‘(x+\hat{\delta}) = f‘(x) + f‘‘(x)\hat{\delta} = 0\]

使用一阶微分和二阶微分近似\(f‘(x)\)和\(f‘‘(x)\)得

\[\hat{\delta} = - \frac{f‘(x)}{f‘‘(x)} = - \frac{(f(x+1)-f(x-1))/2}{(f(x+1)-f(x))-(f(x) - f(x-1))}= \frac{1}{2}\frac{f(x-1)-f(x+1)}{f(x+1)-2f(x)+ f(x-1)}\]

与带入抛物线求参数的结果是一致的,加上对数则与高斯近似一致。

质心算法

In physics, the center of mass of a distribution of mass in space is the unique point where the weighted relative position of the distributed mass sums to zero, or the point where if a force is applied it moves in the direction of the force without rotating.——Center of mass wiki

若将\(x\)、\(x-1\)、\(x+1\)看成质点,将\(f(x)\)、\(f(x-1)\)、\(f(x+1)\)看成质点的质量,则可以把质心作为极值的估计。根据质点相对质心位置的质量加权和为零,可求得质心位置。令\(R\)为质心坐标,\(m\)和\(r\)分别为质点质量和坐标,则\(n\)个质点的质心满足

\[\sum_{i=1}^n m_i(r_i - R) = 0\]

令\(M = \sum_{i=1}^n m_i\),质心坐标为

\[R = \frac{1}{M} \sum_{i=1}^n m_ir_i\]

带入得

\[x + \hat{\delta} = \frac{(x-1)f(x-1)+xf(x)+(x+1)f(x+1)}{f(x-1)+f(x)+f(x+1)}\]

\[\hat{\delta} = \frac{f(x+1)-f(x-1)}{f(x-1)+f(x)+f(x+1)}\]

以上考虑的是3质点系统的质心,还可考虑5质点、7质点等,甚至考虑所有点。

线性插值

这个模型假设在极值两侧是线性增长和线性下降的,且上升和下降的速度相同,即\(y=kx+b\),上升侧\(k>0\),下降侧\(k<0\),两者绝对值相同,可以利用这个性质求解极值位置。

若\(f(x+1)>f(x-1)\)则极值位于\((x, x+1)\)之间,可列等式

\[\frac{f(x) - f(x-1)}{x-(x-1)} = \frac{f(x+\delta)-f(x)}{x+\delta - x} = \frac{f(x+\delta)-f(x+1)}{x+1-(x+\delta)}\]

解得

\[\hat{\delta}=\frac{1}{2}\frac{f(x+1)-f(x-1)}{f(x)-f(x-1)}\]

同理,若\(f(x-1)>f(x+1)\)求得

\[\hat{\delta}=\frac{1}{2}\frac{f(x+1)-f(x-1)}{f(x)-f(x+1)}\]

数值微分滤波

这个方法是利用极值处导数为0的性质,在微分滤波结果上插值得到导数为0的位置,因已知极值点在\(x\)附近,因此只需在\(x\)附近做微分和插值即可。插值时取极值点两侧正负值连线的过零点作为极值点的估计,如下图所示

论文Real-time numerical peak detector中定义了4阶和8阶线性滤波器\([1, 1, 0, -1, -1]\)和\([1,1,1,1,0,-1,-1,-1,-1]\),对应的函数形式为

\[g_4(x)=f(x-2)+f(x-1)-f(x+1)-f(x+2)\]

\[g_8(x)=f(x-4)+f(x-3)+f(x-2)+f(x-1) \-f(x+1)-f(x+2)-f(x+3)-f(x+4)\]

2阶形式为\(g_2(x) = f(x-1) -f(x+1)\),这些滤波器的表现与数值微分滤波器相似。

当\(f(x+1)>f(x-1)\)时,极值点位于\((x, x+1)\)之间,\(g(x)<0\),\(g(x+1)>0\),极值点位置为\(g(x)\)与\(g(x+1)\)连线的过零点,通过斜率求得

\[\hat{\delta} = \frac{g(x)}{g(x+1)-g(x)}\]

若\(f(x-1)>f(x+1)\),则

\[\hat{\delta} = \frac{g(x-1)}{g(x-1)-g(x)} - 1\]

总结

这些数值极值检测方法均是先获取观测极值\(x\)及其邻域信息,然后综合邻域信息在各自的模型假设下通过插值估计出极值位置。若能知道数值来自的真实分布,则直接拟合真实分布然后求极值即可,但往往我们并不知道真实的分布是什么,即使知道真实分布,有时为了快速计算,也会采取插值的方式来估计极值,毕竟偏差可接受效果足够好就可以了。应用时,为了抗噪可对数据先平滑然后求极值,具体采用何种方法可在准确和速度间权衡——所用模型与真实分布越相近自然越准确,如果实在不知道怎么选,就实践对比吧(因为我也不知道),毕竟伟大领袖教导过我们——实践是检验真理的唯一标准

参考

个人博客地址:亚像素数值极值检测算法总结

原文地址:https://www.cnblogs.com/shine-lee/p/9419388.html

时间: 2024-08-29 16:44:21

亚像素数值极值检测算法总结的相关文章

OpenCV——Harris、Shi Tomas、自定义、亚像素角点检测

在图像处理和与计算机视觉领域,兴趣点(interest points),或称作关键点(keypoints).特征点(feature points) 被大量用于解决物体识别,图像识别.图像匹配.视觉跟踪.三维重建等一系列的问题.我们不再观察整幅图,而是选择某些特殊的点,然后对他们进行局部有的放矢的分析.如果能检测到足够多的这种点,同时他们的区分度很高,并且可以精确定位稳定的特征,那么这个方法就有使用价值. 图像特征类型可以被分为如下三种: <1>边缘 <2>角点 (感兴趣关键点) &

三维精密测量(一) —— 一种求圆标志中心亚像素级边缘标定算法

一.边缘细定位边缘 1 参数拟合法的基本原理 CCD是光积分器件,它以固定大小的面积在固定的时间间隔内对投影其感光面上的光强进行积分,输出的结果就是图像的灰度值.由于CCD的积分时间和面积是相对固定的,所以它的输出灰度值只与感光面上光强分布有关.对于某一像素的灰度值输出可以表示为 原文地址:https://www.cnblogs.com/fujj/p/9678658.html

图像处理之角点检测与亚像素角点定位

角点是图像中亮度变化最强地方反映了图像的本质特征,提取图像中的角点可以有效提高图像处理速度与精准度.所以对于整张图像来说特别重要,角点检测与提取的越准确图像处理与分析结果就越接近真实.同时角点检测对真实环境下的对象识别.对象匹配都起到决定性作用.Harr角点检测是图像处理中角点提取的经典算法之一,应用范围广发,在经典的SIFT特征提取算法中Harr角点检测起到关键作用.通常对角点检测算法都有如下要求: 1. 基于灰度图像.能够自动调整运行稳定,检测出角点的数目. 2. 对噪声不敏感.有一定的噪声

亚像素边缘检测评述

转载请注明出处:http://blog.csdn.net/lsh_2013 1 引言 数字图像的边缘检测是图像分割.目标识别.区域形状提取等图像处理领域的重要基础.在进行图像理解和分析时,第一步往往是边缘检测.目前边缘检测已经成为机器视觉领域最活跃的课题之一,其研究具有非常重要的理论意义和实际应用价值.传统的边缘检测方法的检测精度最高只能达到一个像素级,但是,随着科学技术的飞速发展,工业检测等应用对精确度的要求不断提高,传统的像素级边缘检测方法已经不能满足实际测量的需要,本文重点介绍的亚像素边缘

OpenCV中feature2D学习——亚像素级角点检测(cornerSubPix)

概述 除了利用Harris进行角点检测和利用Shi-Tomasi方法进行角点检测外,还可以使用cornerEigenValsAndVecs()函数和cornerMinEigenVal()函数自定义角点检测函数.如果对角点的精度有更高的要求,可以用cornerSubPix()函数将角点定位到子像素,从而取得亚像素级别的角点检测效果. cornerSubPix()函数 (1)函数原型 cornerSubPix()函数在角点检测中精确化角点位置,其函数原型如下: C++: void cornerSub

OpenCV亚像素级的角点检测

亚像素级的角点检测 目标 在本教程中我们将涉及以下内容: 使用OpenCV函数 cornerSubPix 寻找更精确的角点位置 (不是整数类型的位置,而是更精确的浮点类型位置). 理论 代码 这个教程的代码如下所示.源代码还可以从 这个链接下载得到 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #inclu

寻找Harris、Shi-Tomasi和亚像素角点

Harris.Shi-Tomasi和亚像素角点都是角点,隶属于特征点这个大类(特征点可以分为边缘.角点.斑点). 一.Harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性较高,但是也可能出现有用信息丢失的情况. 函数:cornerHarris() void cv::cornerHarris ( InputArray  src,  //需要为8位单通道     OutputArray  dst,  //结果     int  blockSize, //领域大小     int  ksi

OpenCv_cvFindCornerSubPix()查找亚像素级角点

如果我们进行图像处理的目的不是用于识别特征点而是进行稽核测量,则通常需要更高的精度,而cvGoodFeatureToTrack()只能提供简单的像素坐标值,但有时候我们会需要实际坐标值而不是证书坐标值,例如,我们想要确定图形中一个尖锐的峰值点的位置,但是峰值点的位置一般都不会位于一个像素点的正中心,,这时候就可以使用亚像素检测方法. 亚像素级角点的位置在社星际标定.跟踪并重建蛇形阿基的轨迹或者重建被跟踪目标的三维结构时就是一个基本的测量值.通过cvGoodFeaturesToTrack()函数可

车道线检测文献解读系列(一) 基于机器视觉的高速车道标志线检测算法的研究_李晗

作者背景 基于机器视觉的高速车道标志线检测算法的研究_李晗 东北大学车辆工程硕士学位论文 2006年 [GB/T 7714]李晗. 基于机器视觉的高速车道标志线检测算法的研究[D]. 东北大学, 2006. DOI:10.7666/d.y852642.` 论文结构一览 预处理 灰度化 [亮点]模式判别 选择日间模式还是夜间模式: 在每个检测周期开始时,首先判断采用日间模式还是夜间模式工作.摄像机视野中的上半部分为天空背景,天空亮度可以显著区分日间和夜间环境.由于天空的颜色为蓝离,日间天空的蓝色分