亚像素算法

在这篇博客里,主要讲解两点:点定位(Point localization)以及边缘定位(Edge localization),均是亚像素级定位精度。当然还有其他定位方法,这里仅针对亮点和边缘两种情形分别进行精确定位。

 

1. 为何需要进行亚像素定位?

>数字图像通常是被离散化成像素形式;

>每个像素对应一个整数坐标位置;

>整数坐标位置对于很多应用然而并不精确,比如跟踪、相机标定、图像配准、图像拼接以及三维重构;

>为达到有些应用的精确性,需要精确到浮点坐标位置;

所以会涉及到亚像素定位问题。亚像素定位就是计算特征所在图像中的真实位置,而真实位置有时候并不在像素所在整数坐标位置上,而是在像素的内部。

 

2. 基本思想

>设计一个特征模型以便进行定位,通常使用数学模型来描述图像的特征,数学模型也不一定就完全能表达图像的特征,至少能接近,否则设计的模型欠妥;

>使用常用算法进行定位,初定位精度一般达到整数坐标位置即可,通常初定位的精度要保证至少在精确位置附近,否则偏离较远,算法计算可能也会实效;

>反复迭代使用匹配模型进行精确定位,检测图像特征位置,使特征位置精度达到亚像素级别,迭代的目的通常是优化模型参数;

注意,大多数亚像素定位算法需要对特征所在的位置有一个良好的估计,否则会将图像上的噪声位置误认为期望的特征位置。

 

3. 点定位

首先,点在图像里是如何呈现的?如下图所示:

>一个“点”通常会占用多个像素;

>一个“点”通常也不具有强边缘性质,其边缘通常是光滑的、模糊的;

 

那么我们当然不能以一个像素区域作为“点”的位置,应该以一个坐标点来标记这个“点”的位置,通常计算点区域的中心位置 或者 点区域的最亮位置所对应的坐标, 那么如何去计算该点的位置呢?

 

结合上图所示,点的灰度分布特征是不是跟二维高斯模型很相似?中心处最亮,离中心距离越远会随之变暗。所以这里的图像特征,我们用高斯模型进行描述。

利用高斯模型,我们可以构建点的最终模型函数M,如下:

说明下,这个模型比单独的高斯模型更适合表达图像特征,如果仅仅用高斯模型,那么离中心越远,图像亮度越小,但图像的亮度的最小程度也就是四周的暗区域,这些暗区域的灰度强度值并不为0,而是A。

上述表达式中的各个参数解释如下:

>M:代表对应像素位置上的强烈程度

>(x,y):图像中某个像素位置

>A:背景的强烈程度,比如上面的黑色区域

>B:亮区域中的强烈程度的峰值

>(u,v):亮区域中的峰值所在的位置

>sigma:高斯模型方差

上面左边表达式可以简化为:,其中表示图像的像素位置;是点的模型参数,当模型参数已知,那么图像特征已被定位,也就是高斯模型的中心位置(u,v),该坐标位置是浮点型的,也即是亚像素别级的。

针对图像中存在"点"情形,如果模型,即对应像素位置的强度与模型函数M估计出来的强度相同,那么我们认为用该模型匹配点区域的像素值是完美的,该模型是适合描述该区域的特征。事实上,在点区域里,保证不了左右两等式相等,我们只求左右两等式尽量逼近,那么如何获取一个良好的匹配模型呢,也即如何求解出模型的最佳参数呢?基本都是通过残差进行分析,如:

,其中W相当于一个窗口或者是一个模板,所以W窗口移动到点附近哪个位置是最合适的?在进行残差计算前,首先使用一个简单算法粗定位一个位置,将窗口中心移动至该位置上,再进行残差计算。我们的目的是最小化误差,即可获取亚像素位置坐标(u,v)。 亚像素定位方法可以直接对误差函数的每一个参数进行偏导求取,也可以使用梯度下降法进行求解,最终得到模型的相关参数(这里极有可能得到的解是局部最优解)。当然求解的方法很多,最好使用的方法能解出全局最优解,这样解的模型才是最优的。

 

4. 边缘定位

边缘定位算法跟点定位算法相似。 下面是一幅带有边缘的图像:

 

这里着重讲解下边缘模型的推导:

 

其中,是原始图像坐标系;是定义的边缘的局部坐标系。

对于单位跃阶边缘,我们可以定义如下:

因此,对于一个理想的二维跃阶边缘,以为坐标系,那么沿着轴方向有:

这里我们可以假设一个模型来对实际边缘进行模拟,实际边缘其实是模糊的,没有跃阶现象,那么我们可以认为实际边缘是由一个二维的跃阶边缘与一个一维的高斯函数进行卷积形成的:

其中在图像坐标系中的位置为(u,v).

所以,需要定位的亚像素位置应该是理想中的二维跃阶边缘位置,在真实边缘图像中,该位置应该是从暗到亮转变过程中,导数发生最大变化所对应的位置。

此时我们结合上面坐标系图示,可以得到边缘点在局部坐标系和图像坐标系位置转换关系

我们最终建立的边缘模型可以表示为:

其中是模型参数向量。

求解参数,仍是使用误差函数分析,使误差函数最小化,此处的W是一窗口或者模板

可以使用梯度下降法优化残差函数,求取,最终获得(u,v),也即是定位得到的边缘亚像素位置,边缘方向是垂直于theta角的。

 

当然,亚像素定位算法很多,视图像的具体特征而定,欢迎讨论留言。

  • 12
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MATLAB亚像素程序是一种用于图像处理和分析的工具。它可以帮助提高图像的分辨率和准确性。 MATLAB中的亚像素处理算法通过在像素级别上进行插值来提高图像的分辨率。例如,如果原始图像的每个像素表示一个灰度值,并且我们希望将图像放大两倍,则亚像素算法将根据周围像素的信息估计新像素的值。通常,这种算法使用插值方法,例如双线性插值或三次样条插值。 在MATLAB中,可以使用内置的函数和工具箱来实现亚像素算法。可以通过编写自定义函数,或使用现有函数(如imresize)来实现不同的亚像素算法。 在编写MATLAB亚像素程序时,我们需要考虑以下几个方面: 1. 输入图像:程序应该能够处理不同类型的图像,如灰度图像、彩色图像或多帧图像序列。 2. 插值方法:根据具体需求选择适当的插值方法,例如双线性插值、双三次插值等。 3. 代码优化:根据图像的大小和处理需求,优化程序以提高性能和效率。 4. 结果评估:验证亚像素算法的有效性和准确性,通常使用定性和定量指标进行评估。 总之,MATLAB亚像素程序是用于提高图像分辨率和准确性的工具。通过使用适当的插值方法和优化程序,我们可以实现更好的图像质量和更准确的图像分析结果。 ### 回答2: MATLAB亚像素程序是指利用MATLAB编程语言来实现对图像像素级别的精细处理。通常情况下,图像的像素只能表示为整数值,而无法表示小数值或更精细的数值。然而,在某些图像处理任务中,需要对图像进行更细致的处理,比如像素级别的插值或者子像素级别的运算。 MATLAB亚像素程序可以通过一些算法或者技术来实现对图像的亚像素处理。其中比较常见的方法包括插值算法和优化算法。 插值算法是一种通过已知的像素值推测未知像素值的方法。常见的插值算法包括双线性插值、双立方插值等。这些算法可以利用已知的像素值来估计缺失像素的数值,从而实现亚像素级别的处理。 优化算法则是通过最小化某个目标函数来优化图像的像素值,从而实现亚像素级别的处理。常见的优化算法包括最小二乘法、最大似然估计等。这些算法可以通过对图像像素值的优化,得到更精细的结果。 总之,MATLAB亚像素程序是一种能够通过各种算法和技术实现对图像像素精细处理的程序。它可以对图像进行插值或者优化,从而得到更精确和细致的图像处理结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值