以某种方式检测到charuco钻石对我来说不适用于更大的图像。使用1920x1080的原始图像,它既不能可靠地识别ID(钻石ID元素每次都在切换位置)。在第一张图像中,您可以看到它识别(7,9,45,2)。
然后我尝试将图像下采样到960x540,并将校准参数f,c分成一半,然后就可以了! id被正确识别为(2,7,45,9)并且姿势估计是准确的。
如何让它适用于更大的图像?我尝试根据绝对像素单位(不相对于图像大小)更改检测参数。这是我当前参数的列表。我意识到增加窗口大小以进行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
任何提示?
答案 0 :(得分:1)
最后我需要修补opencv aruco模块。这是一个特定阈值升级太快(到第4个)到图像大小(closestCandidateDistance
中的refineDetectedMarkers
)的问题。解决方案是使minRepDistance
中的detectCharucoDiamond
仅与图像大小成线性比例。
opencv forum中的完整答案和补丁。