find4QuadCornerSubpix 与 cornerSubPix
find4QuadCornerSubpix vs cornerSubPix
我找不到任何关于 find4QuadCornerSubpix() 函数的信息。我试图了解 find4QuadCornerSubpix() 和 cornerSubPix() 之间的区别。
有人可以帮助我吗?
谢谢
TLDR;使用cornerSubPix,find4QuadCornerSubpix未完成
- cornerSubPix 使用求解器在掩模区域 (winSize) 内找到鞍点(一阶导数零和二阶导数改变符号)。请注意,findChessboardCorners 将使用 2x2 的小 window 执行一次 cornerSubPix 调用,因此您已经获得了亚像素级精确坐标。
- find4QuadCornerSubpix 尝试近似分隔棋盘字段(“四边形”)和 returns 这些线的交叉点的线。 find4Quad 函数也只使用每个提供的输入点周围的屏蔽区域(“region_size”)(例如来自 findChessboardCorners)。
我用人工生成的图像(添加低噪声、无失真、大多数四边形约 100pxl 边长)和这些 abs 测试了两个角的改进。以像素为单位测量的差异:
- 均方根 0.0537 最大 0.1963; cv::findChessboardCorners(无附加参考):
- 均方根 0.0368 最大 0.0969; (1) + 11x11 角子像素;与 ocv 教程中的参数相同
- 均方根 0.2230 最大 1.2619; (1) + 11x11 find4QuadCornerSubpix (imgs 二值化 w. 自适应 Thr.)
我测试了 3x3、11x11、50x50、100x100、150x150 和输入图像二值化 w。适应性 Thr.;结果都一样。
我选择了一些真实世界的例子,其中对于类似于 (2) 的东西,内在校准具有大约 0.08 的重投影 rms。对于 (3),他们有 0.25 像素的重投影。有效值
所以目前(opencv 版本 4.5.1)对我来说 find4QuadCornerSubpix 看起来未完成且无法使用。 0.5 的 rms 是我在没有任何子像素改进的情况下预期的最大误差。如果 any 输入坐标比 region_size/2
更接近图像边界,该函数也会失败
来源:
https://github.com/opencv/opencv/blob/fc1a15626226609babd128e043cf7c4e32f567ca/modules/imgproc/src/cornersubpix.cpp
https://github.com/opencv/opencv/blob/fc1a15626226609babd128e043cf7c4e32f567ca/modules/calib3d/src/quadsubpix.cpp
https://github.com/opencv/opencv/blob/b450dd7a87bc69997a8417d94bdfb87427a9fe62/modules/calib3d/src/calibinit.cpp
https://github.com/opencv/opencv/blob/b19f8603843ac63274379c9e36331db6d4917001/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp
我找不到任何关于 find4QuadCornerSubpix() 函数的信息。我试图了解 find4QuadCornerSubpix() 和 cornerSubPix() 之间的区别。
有人可以帮助我吗?
谢谢
TLDR;使用cornerSubPix,find4QuadCornerSubpix未完成
- cornerSubPix 使用求解器在掩模区域 (winSize) 内找到鞍点(一阶导数零和二阶导数改变符号)。请注意,findChessboardCorners 将使用 2x2 的小 window 执行一次 cornerSubPix 调用,因此您已经获得了亚像素级精确坐标。
- find4QuadCornerSubpix 尝试近似分隔棋盘字段(“四边形”)和 returns 这些线的交叉点的线。 find4Quad 函数也只使用每个提供的输入点周围的屏蔽区域(“region_size”)(例如来自 findChessboardCorners)。
我用人工生成的图像(添加低噪声、无失真、大多数四边形约 100pxl 边长)和这些 abs 测试了两个角的改进。以像素为单位测量的差异:
- 均方根 0.0537 最大 0.1963; cv::findChessboardCorners(无附加参考):
- 均方根 0.0368 最大 0.0969; (1) + 11x11 角子像素;与 ocv 教程中的参数相同
- 均方根 0.2230 最大 1.2619; (1) + 11x11 find4QuadCornerSubpix (imgs 二值化 w. 自适应 Thr.)
我测试了 3x3、11x11、50x50、100x100、150x150 和输入图像二值化 w。适应性 Thr.;结果都一样。
我选择了一些真实世界的例子,其中对于类似于 (2) 的东西,内在校准具有大约 0.08 的重投影 rms。对于 (3),他们有 0.25 像素的重投影。有效值
所以目前(opencv 版本 4.5.1)对我来说 find4QuadCornerSubpix 看起来未完成且无法使用。 0.5 的 rms 是我在没有任何子像素改进的情况下预期的最大误差。如果 any 输入坐标比 region_size/2
更接近图像边界,该函数也会失败来源: https://github.com/opencv/opencv/blob/fc1a15626226609babd128e043cf7c4e32f567ca/modules/imgproc/src/cornersubpix.cpp https://github.com/opencv/opencv/blob/fc1a15626226609babd128e043cf7c4e32f567ca/modules/calib3d/src/quadsubpix.cpp https://github.com/opencv/opencv/blob/b450dd7a87bc69997a8417d94bdfb87427a9fe62/modules/calib3d/src/calibinit.cpp https://github.com/opencv/opencv/blob/b19f8603843ac63274379c9e36331db6d4917001/samples/cpp/tutorial_code/calib3d/camera_calibration/camera_calibration.cpp