OpenCV相机标定与3D重建(15)计算给定图像点对应的极线(epipolar lines)函数computeCorrespondEpilines()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算给定图像点对应的极线(epipolar lines)。

对于立体图像对中一个图像的点,计算这些点在另一个图像中对应的极线。

cv::computeCorrespondEpilines 是 OpenCV 库中的一个函数,用于计算给定图像点对应的极线(epipolar lines)。这个函数在立体视觉和多视图几何中非常重要,因为它帮助确定一个点在一个图像中的对应点在另一个图像中的可能位置。这有助于减少匹配问题的搜索空间。

函数原型

cpp 复制代码
void cv::computeCorrespondEpilines
(
	InputArray 	points,
	int 	whichImage,
	InputArray 	F,
	OutputArray 	lines 
)		

参数

  • 参数points:输入点。类型为 CV_32FC2 的 N×1 或 1×N 矩阵,或 vector 类型的向量。
  • 参数whichImage:包含这些点的图像索引(1 或 2)。
  • 参数F:基础矩阵,可以通过 findFundamentalMat 或 stereoRectify 函数估计得到。
  • 参数lines:输出的极线向量,对应于另一图像中的点。每条极线 ax+by+c=0 由三个数 (a, b, c) 编码。
    对于立体图像对中的一个图像中的每一个点,该函数计算其在另一个图像中对应的极线方程。

根据基础矩阵的定义(参见 findFundamentalMat),对于第一个图像中的点 l i ( 2 ) l^{(2)}_i li(2)(当 whichImage=1 时),第二个图像中的极 p i ( 1 ) p^{(1)}_i pi(1)计算为:

l i ( 2 ) = F p i ( 1 ) l^{(2)}_i = F p^{(1)}_i li(2)=Fpi(1)

反之,当 whichImage=2 时,从第二个图像中的点 l i ( 1 ) l^{(1)}_i li(1)计算第一个图像中的极线 p i ( 2 ) p^{(2)}_i pi(2)为:
l i ( 1 ) = F T p i ( 2 ) l^{(1)}_i = F^T p^{(2)}_i li(1)=FTpi(2)

极线系数定义到一个比例因子。它们被归一化以满足 a i 2 + b i 2 = 1 a_i^2+b_i^2=1 ai2+bi2=1

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main()
{
    // 假设有一些特征点从第一张图像中提取出来
    vector< Point2f > points1 = { Point2f( 100, 150 ), Point2f( 200, 250 ) };

    // 假设我们已经计算得到了基础矩阵 F
    Mat F = ( Mat_< double >( 3, 3 ) << 1, 0, 0, 0, 1, 0, 0, 0, 1 );  // 这里只是示例,实际的基础矩阵需要通过其他方法计算得到

    // 计算这些点在第二张图像中的对应极线
    vector< Vec3f > lines2;
    computeCorrespondEpilines( points1, 1, F, lines2 );

    // 打印结果
    for ( size_t i = 0; i < lines2.size(); ++i )
    {
        cout << "Line corresponding to point (" << points1[ i ].x << ", " << points1[ i ].y << ") is: " << lines2[ i ] << endl;
    }

    return 0;
}

运行结果

bash 复制代码
Line corresponding to point (100, 150) is: [0.5547, 0.83205, 0.005547]
Line corresponding to point (200, 250) is: [0.624695, 0.780869, 0.00312348]
相关推荐
会飞锦鲤12 小时前
基于 SVM + HOG 的铸造缺陷检测系统
python·opencv·机器学习·计算机视觉·缺陷检测·图像分类·svm
AGI_Eval1 天前
AI 3D生成技术:从“可用”走向“可靠”还有多远?
人工智能·3d
翌日阳2 天前
二十分之一的压缩比:Spatial Vivid 1.0 把 3DGS 全链路参考实现按 MIT 开源了
3d·开源
Dream-Y.ocean3 天前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
硕迪科技SOLIDWORKS3 天前
SOLIDWORKS Electrical 2027:从线束定义到2D–3D更改分析
3d·solidworks 202
DolitD3 天前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染
tealcwu3 天前
【Unity高级】Unity URP:构建同时支持 2D 与 3D 场景的项目完全指南
3d·unity·游戏引擎
Jmyd01233 天前
文物3D数字化的技术选型指南:从WW/T 0115标准到落地工程,一次讲透采集、建档、管理与展示
3d·系统架构·博物馆·数字展厅·博物馆数字化
Martina_03214 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
鹿野素材屋4 天前
U3D切换场景时候变黑怎么处理
数码相机·3d