VFC算法详解1
VFC算法(Vector Field Consensus,向量场一致性算法) 是一种常用于计算机视觉与图像处理的核心算法。其核心功能是从包含大量“误匹配(外点)”的初始特征点对中,精准筛选出“正确匹配(内点)”。相比于传统的RANSAC算法,VFC算法在误匹配比例极高或图像发生非刚性形变的场景下表现出更高的鲁棒性与效率。
VFC论文核心公式(1)(2)(3)推导与理解文档
一、基础符号与物理意义
结合论文2D图像点匹配核心场景,所有符号均对应实际工程数据,无抽象数学: | 数学符号 | 程序员直白理解 | 实际数据含义 | |--------|--------------|-------------| | \(\mathcal{X} \subseteq \mathbb{R}^P\) | 输入空间 | 第一张图的特征点坐标,2D匹配中\(P=2\)(\(x=[u,v]^T\)像素坐标) | | \(\mathcal{Y} \subseteq \mathbb{R}^D\) | 输出空间 | 点的位移向量,2D匹配中\(D=2\)(\(y=[dx,dy]^T\)) | | \(N\) | 样本数量 | 候选匹配对的总个数 | | \(x_n\) | 第\(n\)个输入样本 | 第一张图中第\(n\)个特征点的坐标向量 | | \(y_n\) | 第\(n\)个输出样本 | 第\(n\)个匹配对的位移向量(第二张图相对第一张图) | | \(x_i、x_j\) | 第\(i/j\)个输入点 | 样本集中任意两个输入特征点,用于计算核相似度 | | \(\Gamma(x,x')\) | 矩阵值核函数 | 衡量两个点的相似度,输出\(D×D\)矩阵(论文用简化标量核) | | \(\lambda\) | 正则化系数 | 平衡「拟合精度」和「函数平滑度」的超参数 |
二、核心前置:RKHS范数与平滑度的等价性
1. 关键结论
论文中RKHS空间的函数范数平方 \(\|f\|_{\mathcal{H}}^2\) = 函数的总平滑度(导数平方和) - 范数越小 → 函数导数越小 → 变化越平缓 → 越平滑 - 范数越大 → 函数导数越大 → 变化越剧烈 → 越崎岖(过拟合)
2. 数学本质
RKHS范数是平滑度的数学封装,等价于函数各阶导数的平方积分,天然用于惩罚函数抖动、防止过拟合,是公式(1)正则项的核心依据。
三、公式(1):带正则化的插值优化目标
1. 公式原文
\[\mathcal{E}(f)=\min _{f \in \mathcal{H}}\left\{\sum_{n=1}^{N}\left\| y_{n}-f\left(x_{n}\right)\right\| ^{2}+\lambda\| f\| _{\mathcal{H}}^{2}\right\}\]
2. 物理意义
我们的目标:找到一个函数\(f\),实现向量场插值(给任意点\(x\)输出对应位移\(y\)),同时满足两个要求: 1. 函数在样本点上的输出尽量接近真实位移; 2. 函数足够平滑,不抖动、不过拟合。
3. 公式两项拆解
| 公式项 | 名称 | 直白含义 | 代码类比 |
|---|---|---|---|
| \(\sum_{n=1}^{N}\left\| y_{n}-f(x_{n})\right\| ^{2}\) | 拟合损失 | 函数在样本点的输出与真实位移的误差平方和,越小拟合越准 | 机器学习MSE损失 |
| \(\lambda\| f\| _{\mathcal{H}}^{2}\) | 正则化项 | 惩罚函数的抖动程度,越小函数越平滑 | L2正则化,防止过拟合 |
4. 核心作用
平衡拟合精度与平滑度,避免函数为了贴合样本而剧烈抖动(点匹配中可抵抗外点噪声)。
四、公式(2):最优解的固定形式
1. 公式原文
\[f(x)=\sum_{n=1}^{N} \Gamma\left(x, x_{n}\right) c_{n}, \quad c_{n} \in \mathcal{Y}\]
2. 物理意义
公式(1)的最优解\(f\),一定是N个核函数的线性组合: - 每个样本点\(x_n\)对应一个核函数\(\Gamma(x,x_n)\); - \(c_n\)是待求的\(D\)维系数向量(唯一未知数); - 把所有核函数加权求和,就是最终的插值函数。
3. 工程价值
将无限维函数优化问题,降维为求N个系数的有限维问题,代码可直接求解。
五、Gram矩阵\(\tilde{\Gamma}\)的具体构建
公式(3)中的\(\tilde{\Gamma}\)是Gram矩阵,由核函数和样本点\(x_i/x_j\)直接构建,分通用形式和论文简化形式(工程用简化版)。
1. 通用形式(矩阵值核)
- 核函数:\(\Gamma(x_i,x_j)\) 输入两个点,输出\(D×D\)矩阵;
- Gram矩阵:\(N×N\)分块矩阵,总维度\((D·N)×(D·N)\);
- 构建规则:第\(i\)行第\(j\)列的分块 = \(\Gamma(x_i,x_j)\)。
示例:\(N=2\)(2个匹配对)、\(D=2\)(2D位移) \[ \tilde{\Gamma} = \begin{bmatrix} \Gamma(x_1,x_1) & \Gamma(x_1,x_2) \\ \Gamma(x_2,x_1) & \Gamma(x_2,x_2) \end{bmatrix} \] 每个分块是\(2×2\)矩阵,最终拼成\(4×4\)矩阵。
2. 论文简化形式
论文用高斯标量核,计算量大幅降低: \[\Gamma(x_i,x_j) = \kappa(x_i,x_j)·I_D, \quad \kappa(x_i,x_j)=e^{-\beta\|x_i-x_j\|^2}\] - \(\kappa(x_i,x_j)\):标量高斯核,衡量\(x_i\)和\(x_j\)的距离相似度; - \(I_D\):\(D\)阶单位矩阵; - Gram矩阵:\(\tilde{\Gamma} = K \otimes I_D\)(\(K\)为\(N×N\)标量核矩阵,\(\otimes\)为克罗内克积)。
示例:\(N=2,D=2\),标量核矩阵\(K=\begin{bmatrix}k_{11}&k_{12}\\k_{21}&k_{22}\end{bmatrix}\) \[ \tilde{\Gamma} = \begin{bmatrix} k_{11} & 0 & k_{12} & 0 \\ 0 & k_{11} & 0 & k_{12} \\ k_{21} & 0 & k_{22} & 0 \\ 0 & k_{21} & 0 & k_{22} \end{bmatrix} \]
六、公式(3)完整推导过程
1. 公式原文
\[(\tilde{\Gamma}+\lambda I) \tilde{C}=\tilde{Y}\] - \(\tilde{C}\):系数拼接向量(待求); - \(\tilde{Y}\):样本位移拼接向量(已知); - \(I\):与\(\tilde{\Gamma}\)同维度单位矩阵。
2. 推导前置:向量向量化
把公式(2)的系数、样本输出拼接为长列向量,转化为矩阵运算: 1. 系数向量:\(\tilde{C} = \begin{bmatrix} c_1 \\ c_2 \\ \vdots \\ c_N \end{bmatrix}\)(维度\(D·N×1\)) 2. 样本向量:\(\tilde{Y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_N \end{bmatrix}\)(维度\(D·N×1\)) 3. 函数输出:\(\tilde{V} = \begin{bmatrix} f(x_1) \\ f(x_2) \\ \vdots \\ f(x_N) \end{bmatrix} = \tilde{\Gamma}\tilde{C}\)(由公式(2)直接推导)
3. 步骤1:将公式(1)转化为矩阵形式
拟合损失 + 正则项的矩阵表达: \[\mathcal{E}(\tilde{C}) = \underbrace{(\tilde{Y}-\tilde{\Gamma}\tilde{C})^T(\tilde{Y}-\tilde{\Gamma}\tilde{C})}_{拟合损失} + \underbrace{\lambda \tilde{C}^T\tilde{\Gamma}\tilde{C}}_{正则项}\]
4. 步骤2:展开损失函数
利用矩阵转置性质\((\tilde{\Gamma}\tilde{C})^T=\tilde{C}^T\tilde{\Gamma}^T\),且\(\tilde{\Gamma}\)对称(\(\tilde{\Gamma}^T=\tilde{\Gamma}\)): \[ \mathcal{E}(\tilde{C}) = \tilde{Y}^T\tilde{Y} - 2\tilde{Y}^T\tilde{\Gamma}\tilde{C} + \tilde{C}^T\tilde{\Gamma}^2\tilde{C} + \lambda\tilde{C}^T\tilde{\Gamma}\tilde{C} \]
5. 步骤3:对\(\tilde{C}\)求导并令导数为0
二次函数最小值出现在梯度为0处,用到矩阵求导规则: 1. \(\frac{d}{dx}(b^Tx)=b\);2. \(\frac{d}{dx}(x^TAx)=2Ax\)(\(A\)对称)
求导结果: \[\frac{d\mathcal{E}}{d\tilde{C}} = -2\tilde{\Gamma}\tilde{Y} + 2\tilde{\Gamma}^2\tilde{C} + 2\lambda\tilde{\Gamma}\tilde{C} = 0\]
6. 步骤4:化简得到最终公式
两边除以2,提取公因子\(\tilde{\Gamma}\): \[\tilde{\Gamma}(\tilde{\Gamma}+\lambda I)\tilde{C} = \tilde{\Gamma}\tilde{Y}\] \(\tilde{\Gamma}\)可逆,两边左乘\(\tilde{\Gamma}^{-1}\),最终得到: \[\boxed{(\tilde{\Gamma}+\lambda I)\tilde{C}=\tilde{Y}}\]
七、工程实现关键补充
- 解的唯一性:\(\lambda>0\)时,\(\tilde{\Gamma}+\lambda I\)严格正定,有且仅有唯一解,代码求解稳定;
- 求解方式:Python用
numpy.linalg.solve,MATLAB用\运算符(Cholesky分解,高效稳定); - 论文简化版:标量核场景下,公式(3)简化为\(N×N\)标量方程组,计算量缩小\(D^2\)倍;
- 代码类比:公式(3)就是标准线性方程组\(Ax=b\),\(A=\tilde{\Gamma}+\lambda I\),\(x=\tilde{C}\),\(b=\tilde{Y}\)。
八、整体逻辑总结(复习核心)
- 公式(1):定义插值目标,平衡拟合精度与平滑度,用RKHS范数惩罚函数抖动;
- 公式(2):表示定理锁定最优解形式,将无限维函数问题降为求N个系数;
- Gram矩阵:由样本点\(x_i/x_j\)和核函数构建,是连接样本与系数的核心矩阵;
- 公式(3):对优化目标求导得到线性方程组,解出系数即得到最终插值函数,完成向量场插值。
整套公式的本质:用数学方法实现「既准又平滑」的向量场插值,为点匹配剔除外点提供核心算法支撑。