ArUco 标记检测在不同情况下的行为,背景中有嘈杂的物体

ArUco Marker Detection behavior in different cases with noisy object in background

Python版本:3.7

OpenCV 版本:4.1.1 / 3.4.X

手机Phone:华硕 Zenfone Max Pro M1

初始设置

Screenshot of plotted image

使用的词典:cv2.aruco.DICT_ARUCO_ORIGINAL

Aruco 参数 [编辑 2019 年 12 月 9 日]

parameters = cv2.aruco_DetectorParameters.create()
parameters.cornerRefinementMaxIterations = 80
parameters.cornerRefinementMethod = 1
parameters.polygonalApproxAccuracyRate = 0.05
parameters.cornerRefinementWinSize = 20
parameters.cornerRefinementMinAccuracy = 0.05
parameters.perspectiveRemovePixelPerCell = 8
parameters.maxErroneousBitsInBorderRate = 0.04
parameters.errorCorrectionRate = 0.2
parameters.adaptiveThreshWinSizeStep= 3
parameters.adaptiveThreshWinSizeMax= 23

红色标记表示被拒绝的点,而绿色标记表示角点。

Screenshot of aruco detection on image。在这种情况下没有检测到角点,但有很多被拒绝的点。

案例 1:裁剪效果

裁剪图像:Y 轴 200 到 1574,X 轴 883 到 2633。我使用 OpenCV 对其进行了裁剪,因此没有损失。

在某些情况下它检测到了角点,在某些情况下它捕获了比以前更多的噪声

Screenshot of aruco detection on cropped image。在这种情况下,被拒绝的点比以前多了。

案例 2:平滑效果

我在此图像上使用了 11x11 内核的中值模糊。误检率低,标记检测完美

最初我认为这是由于应用中值模糊后图像中的噪声去除所致,但是结果并没有随着逐渐increasing/decreasing内核大小而改善。对于 e.x:对于一张图像,角点是使用 9x9 过滤器检测到的,但没有使用 5x5、7x7、11x11、15x15。在另一张图片上,它可能会使用 11x11。

Screenshot of aruco detection after noise removal,为方便起见进行了缩放。

我不能post这里的原始图像,因为它超过 2MB。

What I don't understand is, why do the rejected points change?

如果您检查 OpenCV 库中的 "detectMarkers" 函数,它会通过选择图像中的小 windows 来应用自适应阈值。这个小数windows定义如下:

// number of window sizes (scales) to apply adaptive thresholding
int nScales =  (params->adaptiveThreshWinSizeMax - params->adaptiveThreshWinSizeMin) /
                      params->adaptiveThreshWinSizeStep + 1;

即使您裁剪,除非您更改这些参数,否则图像处理会将您的图像分成相同数量的小图像 windows。这将改变(可能减少或增加)检测到的候选人总数(接受+拒绝)。

Why does it behave that way?

同样的道理。平滑图像时,应用自适应阈值的方式会发生变化。

我认为如果您将标记更改为具有更多凹形黑色区域的标记,那就太好了。这只是一个建议,因为标记的中心部分大部分是白色方块,而你的其他白色纸片也大部分是白色方块。