域名续费做网站网站建设华威公司怎么样
域名续费做网站,网站建设华威公司怎么样,用pyton可以做网站吗,专业的企业宣传片制作操作系统#xff1a;ubuntu22.04 OpenCV版本#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言#xff1a;C11
算法描述
找到两个平面之间的透视变换。 cv::findHomography 是 OpenCV 库中用于计算两幅图像之间单应性矩阵#xff08;Homography Matrix#xff09;的… 操作系统ubuntu22.04 OpenCV版本OpenCV4.9 IDE:Visual Studio Code 编程语言C11
算法描述
找到两个平面之间的透视变换。 cv::findHomography 是 OpenCV 库中用于计算两幅图像之间单应性矩阵Homography Matrix的函数。单应性矩阵描述了两个平面之间的投影变换关系它在计算机视觉中用于图像校正、拼接和增强现实等任务。
函数原型 Mat cv::findHomography
(InputArray srcPoints,InputArray dstPoints,int method 0,double ransacReprojThreshold 3,OutputArray mask noArray(),const int maxIters 2000,const double confidence 0.995
) 参数
参数srcPoints原平面中点的坐标可以是类型为 CV_32FC2 的矩阵或 vector。参数dstPoints目标平面中点的坐标可以是类型为 CV_32FC2 的矩阵或 vector。参数method用于计算单应性矩阵的方法。可能的方法包括 0常规方法使用所有点即最小二乘法。RANSAC基于RANSAC的稳健方法。LMEDS最小中值Least-Median稳健方法。RHO基于PROSAC的稳健方法。 ransacReprojThreshold仅用于 RANSAC 和 RHO 方法。这是允许的最大重投影误差用于将一对点视为内点。也就是说如果 ∥ dstPoints i − convertPointsHomogeneous ( H ⋅ srcPoints i ) ∥ 2 ransacReprojThreshold \| \texttt{dstPoints} _i - \texttt{convertPointsHomogeneous} ( \texttt{H} \cdot \texttt{srcPoints} _i) \|_2 \texttt{ransacReprojThreshold} ∥dstPointsi−convertPointsHomogeneous(H⋅srcPointsi)∥2ransacReprojThreshold 则认为点 i 是离群点。如果 srcPoints 和 dstPoints 以像素为单位测量则通常将此参数设置在1到10之间是有意义的。参数mask由稳健方法如 RANSAC 或 LMEDS设置的可选输出掩码。注意输入掩码值被忽略。参数maxItersRANSAC的最大迭代次数。参数confidence置信水平介于0和1之间。
该函数找到并返回源平面和目标平面之间的透视变换矩阵 H H H s i [ x i ′ y i ′ 1 ] ∼ H [ x i y i 1 ] s_i \begin{bmatrix} x_i \\ y_i \\ 1 \end{bmatrix} \sim H \begin{bmatrix} x_i \\ y_i \\ 1 \end{bmatrix} si xi′yi′1 ∼H xiyi1 从而最小化反投影误差 ∑ i ( x i ′ − ( h 11 x i h 12 y i h 13 ) h 31 x i h 32 y i h 33 ) 2 ( y i ′ − ( h 21 x i h 22 y i h 23 ) h 31 x i h 32 y i h 33 ) 2 \sum_i \left( \frac{x_i - (h_{11}x_i h_{12}y_i h_{13})}{h_{31}x_i h_{32}y_i h_{33}} \right)^2 \left( \frac{y_i - (h_{21}x_i h_{22}y_i h_{23})}{h_{31}x_i h_{32}y_i h_{33}} \right)^2 i∑(h31xih32yih33xi′−(h11xih12yih13))2(h31xih32yih33yi′−(h21xih22yih23))2 如果 method 参数设置为默认值 0则函数使用所有点对通过简单的最小二乘方案计算初始单应性估计。
然而如果并非所有的点对srcPoints_i, dstPoints_i都符合刚性的透视变换即存在一些离群点这个初始估计将会较差。在这种情况下你可以使用三种稳健方法之一。RANSAC、LMEDS 和 RHO 方法尝试许多不同的随机子集每次四个点对共线点对被丢弃使用这个子集和简单的最小二乘算法估计单应性矩阵然后计算所估计单应性的质量/优度对于RANSAC来说是内点的数量对于LMEDS来说是最小中值重投影误差。最佳子集随后用于生成单应性矩阵的初始估计和内点/离群点的掩码。
无论是否使用稳健方法计算出的单应性矩阵都会进一步优化在稳健方法的情况下仅使用内点以Levenberg-Marquardt方法减少重投影误差。
RANSAC 和 RHO 方法可以处理几乎任何比例的离群点但需要一个阈值来区分内点和离群点。LMEDS 方法不需要任何阈值但只有当内点超过50%时才能正确工作。最后如果没有离群点且噪声较小使用默认方法method0。
该函数用于找到初始的内部和外部矩阵。单应性矩阵确定至一个尺度。因此它被标准化以使 h 33 1 h_{33}1 h331。需要注意的是每当无法估计 H 矩阵时将返回一个空矩阵。
代码示例 #include iostream
#include opencv2/opencv.hppusing namespace cv;
using namespace std;int main( int argc, char** argv )
{// 创建虚拟的匹配点数据假设我们有4对匹配点vector Point2f srcPoints { Point2f( 56.0f, 65.0f ), Point2f( 368.0f, 52.0f ), Point2f( 28.0f, 387.0f ), Point2f( 389.0f, 390.0f ) };vector Point2f dstPoints { Point2f( 0.0f, 0.0f ), Point2f( 300.0f, 0.0f ), Point2f( 0.0f, 300.0f ), Point2f( 300.0f, 300.0f ) };// 定义输出的单应性矩阵和掩码Mat homographyMatrix, mask;// 使用 RANSAC 方法计算单应性矩阵homographyMatrix findHomography( srcPoints, dstPoints,RANSAC, // 使用RANSAC方法3.0, // 点到投影模型的最大重投影误差mask, // 输出掩码2000, // 最大迭代次数0.995 ); // 置信水平// 打印结果cout Homography Matrix:\n homographyMatrix endl;// 打印哪些点被认为是内点cout Inliers mask:\n;for ( size_t i 0; i mask.total(); i ){if ( mask.at uchar ( i ) ){cout Point i 1 is an inlier. endl;}else{cout Point i 1 is an outlier. endl;}}return 0;
}运行结果
Homography Matrix:
[1.055873761296419, 0.09181510967794945, -65.09691276166618;0.04690100493754324, 1.125624118501043, -75.79202397907012;0.0001832514481695185, 0.0005133370013304123, 0.9999999999999999]
Inliers mask:
Point 1 is an inlier.
Point 2 is an inlier.
Point 3 is an inlier.
Point 4 is an inlier.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88880.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!