6

我无法找到有关 find4QuadCornerSubpix() 函数的任何信息。我试图了解 find4QuadCornerSubpix() 和cornerSubPix() 之间的区别。

有人可以帮助我吗?

谢谢

4

1 回答 1

3

TLDR;使用cornerSubPix,find4QuadCornerSubpix 未完成

  • cornerSubPix 使用求解器在遮罩区域 (winSize) 内找到鞍点(一阶导数为零,二阶为变化符号)。请注意,findChessboardCorners 将使用一个 2x2 的小窗口进行一次cornerSubPix 调用,因此您已经获得了一些亚像素精确的坐标。
  • find4QuadCornerSubpix 尝试逼近分隔棋盘字段(“四边形”)的线并返回这些线的交叉点。find4Quad 函数也只使用每个提供的输入点周围的掩蔽区域(“region_size”)(例如,来自 findChessboardCorners)。

我用这些 abs 测试了人工生成的图像(添加了低噪声,没有失真,大多数四边形大约 100pxl 边缘长度)的两个角细化。以像素为单位测量的差异:

  1. 有效值 0.0537 最大 0.1963;cv::findChessboardCorners(无附加参考):
  2. 有效值 0.0368 最大 0.0969;(1) + 11x11 角子像素;与 ocv 教程中相同的参数
  3. 有效值 0.2230 最大 1.2619;(1) + 11x11 find4QuadCornerSubpix (imgs 二值化 w. 自适应 Thr.)

我测试了 3x3、11x11、50x50、100x100、150x150 并输入了二值化 w 的图像。自适应阈值;都具有相同的结果。

我选择了一些真实世界的例子,其中固有校准的重投影 rms 约为 0.08,类似于 (2)。对于 (3),他们有 0.25 像素的再现。有效值

所以目前(opencv 版本 4.5.1)对我来说 find4QuadCornerSubpix 看起来未完成且无法使用。0.5 的 rms 是我在没有任何子像素细化的情况下所期望的最大误差。如果任何输入坐标比 region_size/2 更接近图像边界,该函数也会失败

来源: https ://github.com/opencv/opencv/blob/fc1a15626226609babd128e043cf7c4e32f567ca/modules/imgproc/src/cornersubpix.cpp https://github.com/opencv/opencv/blob/fc1a15626226609babd128e043cf7c4e32f567ca/modules/modules .cpp https://github.com/opencv/opencv/blob/b450dd7a87bc69997a8417d94bdfb87427a9fe62/modules/calib3d/src/calibinit.cpp https://github.com/opencv/opencv/blob/b19f8603843ac63274379c9e36331db6d4917000dcpp/tutorial_codecalibsamples1/tutorial_code/ /camera_calibration/camera_calibration.cpp

于 2021-04-06T15:47:52.317 回答