【Paper】FRST(快速径向对称变换)算法

论文:Loy, G., & Zelinsky, A. (2002). A fast radial symmetry transform for detecting points of interest. Computer Vision, ECCV 2002.

代码: https://github.com/Xonxt/frst

注意:这份开源代码中的gradx和grady算反了


1. 图像梯度理解

对灰度图像I(x,y) ,梯度(Gradient)定义为,梯度变化反应灰度图像的明暗走向。

表示左右方向梯度变化,表示上下方向梯度变化。

梯度幅值(Magnitude ):

梯度方向(Orientation)

对比度高的区域梯度大:例如一个黑色物体放在白色背景上,边缘非常清晰,像素值从0(黑)瞬间跳变为255(白),梯度变化很大,类似悬崖的坡度。

模糊区域梯度小:物体边缘有阴影过渡,像素值不是瞬间变化的,而是慢慢变的,类似平缓的坡道。

关于噪声的梯度:

  • 普通背景噪声(梯度小):来源于相机的热噪声或者光照不均,例如原本是纯黑区域(0),实际上像素值是乱跳如2,5,3,4,1。相邻像素的梯度只有2-3左右,但真正物体的边缘梯度可能在50甚至100以上。
  • 椒盐噪声/坏点(梯度大):假如相机有一个坏点,纯黑背景上出现一个亮点。0->255->0导致梯度很大,比正常物体的边缘还要大。

2. FRST思想

直觉:对于每一个径向对称的物体,其边缘上的每一点,梯度方向都会指向圆心(亮中心)或者背离圆心(暗中心)。

做法:遍历图像中每一个像素,沿着梯度方向延伸一段距离n(半径),落脚点很可能就是圆心。如果大量像素的梯度延长线都交汇与一点,那么这一点就是对称中心。

对于图像上任意一个像素p,沿着梯度方向、距离为n的位置认为是亮圆圆心(正向投票),相反方向距离为n的位置认为是暗圆圆心(负向投票)

表示梯度方向,则表示偏移量,由于像素是整数,四舍五入取整后即得到与p像素梯度方向距离为n的最近的点的像素位置。

遍历完全图会生成两张图像用于投票:方向投影图、幅度投影图

  • 对于:图像初始状态全为0,遍历时,对于每一个像素p,计算出,然后在图像中位置的矩阵值就+1,位置的矩阵值就-1,所以类似计数器,表示有多少个像素指向这个位置。
  • 对于:图像初始状态全为0,遍历时,对于每一个像素p,计算出,然后在图像中位置的矩阵值就+p的梯度幅值,位置的矩阵值就-p的梯度幅值,所以也是累计图,表示指向这个位置的梯度总强度是多大。

直觉上,图像最大正值的位置最可能是亮圆中心,最小负值位置最可能是暗圆中心。但是图像的噪声会导致梯度随机波动,随机梯度有概率在某些点偶然交汇,这些噪点并不具备真实的几何对称性,但这些噪点平等的参与投票,一个微弱的噪声边缘(梯度很小)和一个强烈的物体边缘(梯度很大),贡献都是1,这其实是不公平的,仅用很大概率会投出错误的圆心。仅用更不行,只关注梯度强度,梯度很大,确认是对比度高的边缘,但这个边缘可能不是圆。

所以将结合起来,理论上可以找到梯度大的对称区域,就是融合两者的方法。

对于公式是未经平滑的原始的对称响应图,是一个二维高斯卷积核,用来平滑图像。

不仅通过乘法操作融合,并且通过指数加权α抑制噪声,放大真正的结果。如果只有票数没有强度,那么乘法的得分低,如果只有强度没有票数,乘法的得分也低,只有两者都大,乘法结果才巨大。假设α=2,噪点位置有2个像素指向它(=2)则指数加权后的结果是4,真圆心位置有50个像素指向它(=50)则指数加权后的结果是2500,通过α指数,可以瞬间拉开目标特征与噪声之间的得分距离。当然公式中并不是用直接进行指数加权的,而是进行归一化后再进行加权。表示对和中绝对值最大的,则和被归一化到[-1, 1],再进行指数加权。

标准数学符号里,通常表示绝对值或者范数,结果是正的。在这篇论文中定义了一种特殊的运算符号:,表示先取绝对值做α次方,再把原来的正负号乘回去。如果不保留符号,所有暗圆经过平方(如果α=2)后都变成正的,就分不清暗圆和亮圆了。

在计算出后用进行卷积的主要原因是:1)解决离散化误差;2)进一步抑制噪声。在做梯度投影时使用了round,但如果真正的圆心在(50.5,50.5),投影结果会一部分落在(50,50),一部分落在(51,51),会导致图中的能量被撕裂了,高斯卷积可以把(50,50)和(51,51)这两个相邻的峰值合并成一个位于(50.5,50.5)附近的单一波峰。另外,尽管α参数已经抑制了很多噪声,但图中可能还是会有孤立的、高频的随机响应。高斯平滑会压低孤立尖峰,保留成片有结构支撑的响应区域。

半径为n(n∈N)的所有都将会被叠加到一张图上,核心动机是为了解决尺度未知的问题。假如只计算了(半径为5),如果图像中的圆刚好半径是5,可以得到一个极强的亮点,这没有问题,但如果图像中的圆半径是5.5或者4.5,由于算法中的投票机制非常精确,半径稍微对不上,票数就会急剧下降,导致漏检或者低响应。求和可以检测半径大小在N范围内的所有圆,假如图像中圆的半径是5.2,这个圆在中有较高的响应,在中也有不错的响应,如果计算,这个圆心的位置就会获得叠加的能量,在重叠的地方,形成一个非常显著的峰值。

3. FRST应用

图(c)n=1,3,5效果与图(b)n=1,2,3,4,5近似逼近,但计算量减小了。N范围小的时候计算量减小的不明显,N范围大计算量就有优势。如果知道圆的先验半径,只需要确定适当范围即可高效检测该特征。如图(d),瞳孔半径为5像素,已经能够检测出来。

单个梯度元素g(p)的贡献度

对于高斯核的选取。高斯核的核心作用是根据距离n的远近,扩散受正负影响像素的辐射范围。选择二维高斯核是因为其具有径向对称性,能对所有梯度方向产生统一影响,同时具备可分离性,使得卷积运算效率更高。通过将标准差与距离n进行线性比例调整,定义了覆盖所有受影响像素的辐射弧。该辐射弧的宽度由An的标准差与n的比值决定。

是一个大小为nxn、标准差σ=0.25n的高斯核。没有的话,对于位置p的边缘像素,投票结果只是两个孤零零的像素点,会非常尖锐离散。加上后,这两个点会在正梯度方向形成亮斑,在负梯度方向形成暗斑。高斯模糊表达了一种不确定性,圆心大概在这个区域,离中心越近概率越大,离得远也有可能。作者设定σ=0.25n以及kernel size为10,是用于尺度自适应。如果找n=2的小圆,σ=0.5,模糊范围很小,要求精度很高。如果找n=100的大圆,σ=25,模糊范围很大,大圆的边缘通常比较长,更容易变形或者受噪声影响,则需要更大宽容度让周围的票汇聚在一起。

参数α的选取。较高的α值会消除非径向对称特征(如线条),α=2的选择适用于大多数应用场景。α值越高,对关键点的衰减越明显,而α值过低则会过度强调非径向对称特征。但若将α值设为1,则可最小化方程中的计算量。

引入梯度阈值参数β。梯度元素的幅值较小时,其方向可靠性较低,更容易受到噪声干扰,且往往对应于人眼难以直接察觉的特征。由于变换的目的是提取图像中的关键点,因此在计算过程中忽略此类元素是合理的。当计算图像时,所有幅值低于 β 的梯度元素均被忽略。

非零 β 的主要优势在于提升算法速度,因为需要处理的梯度元素减少,从而降低受噪声影响的像素数量。该变换可调谐以仅检测对称性中的暗区或亮区。若仅需检测暗区,确定时只需考虑受噪声负面影响的像素(调整前面的公式)。同理,若仅需检测亮区对称性,则只需考虑受噪声正向影响的像素。

4. FRST性能表现

在测试图像中展现出与传统方法相当甚至更优的性能,同时显著降低了计算成本和实现复杂度。

相关推荐
Mintopia12 分钟前
OpenClaw 对软件行业产生的影响
人工智能
陈广亮1 小时前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬1 小时前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia1 小时前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区2 小时前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两4 小时前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
前端付豪5 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
strayCat232555 小时前
Clawdbot 源码解读 7: 扩展机制
人工智能·开源
王鑫星5 小时前
SWE-bench 首次突破 80%:Claude Opus 4.5 发布,Anthropic 的野心不止于写代码
人工智能