OpenCV:charuco(钻石)无法处理更大的图像。要调哪个参数?

时间:2017-08-04 13:54:25

标签: opencv markers aruco

以某种方式检测到charuco钻石对我来说不适用于更大的图像。使用1920x1080的原始图像,它既不能可靠地识别ID(钻石ID元素每次都在切换位置)。在第一张图像中,您可以看到它识别(7,9,45,2)。

1920x1080 image. wrong ids order and pose estimation

然后我尝试将图像下采样到960x540,并将校准参数f,c分成一半,然后就可以了! id被正确识别为(2,7,45,9)并且姿势估计是准确的。

960x540 image. correctly estimated

如何让它适用于更大的图像?我尝试根据绝对像素单位(不相对于图像大小)更改检测参数。这是我当前参数的列表。我意识到增加窗口大小以进行threasholding有助于识别正方形,但不能用于id或姿势估计。

nmarkers: 1024 adaptiveThreshWinSizeMin: 13 adaptiveThreshWinSizeMax: 113 adaptiveThreshWinSizeStep: 10 adaptiveThreshWinSize: 42 adaptiveThreshConstant: 7 minMarkerPerimeterRate: 0.1 maxMarkerPerimeterRate: 4.0 polygonalApproxAccuracyRate: 0.05 minCornerDistance: 10.0 minDistanceToBorder: 10 minMarkerDistance: 10.0 minMarkerDistanceRate: 0.05 doCornerRefinement: false cornerRefinementWinSize: 5 cornerRefinementMaxIterations: 30 cornerRefinementMinAccuracy: 0.1 markerBorderBits: 1 perspectiveRemovePixelPerCell: 8 perspectiveRemoveIgnoredMarginPerCell: 0.13 maxErroneousBitsInBorderRate: 0.04 minOtsuStdDev: 5.0 errorCorrectionRate: 0.6 任何提示?

谢谢你!

1 个答案:

答案 0 :(得分:1)

最后我需要修补opencv aruco模块。这是一个特定阈值升级太快(到第4个)到图像大小(closestCandidateDistance中的refineDetectedMarkers)的问题。解决方案是使minRepDistance中的detectCharucoDiamond仅与图像大小成线性比例。

opencv forum中的完整答案和补丁。