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?
同样的道理。平滑图像时,应用自适应阈值的方式会发生变化。
我认为如果您将标记更改为具有更多凹形黑色区域的标记,那就太好了。这只是一个建议,因为标记的中心部分大部分是白色方块,而你的其他白色纸片也大部分是白色方块。
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?
同样的道理。平滑图像时,应用自适应阈值的方式会发生变化。
我认为如果您将标记更改为具有更多凹形黑色区域的标记,那就太好了。这只是一个建议,因为标记的中心部分大部分是白色方块,而你的其他白色纸片也大部分是白色方块。