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

时间:2019-09-26 19:56:50

标签: opencv image-processing computer-vision aruco

Python版本:3.7

OpenCV版本:4.1.1 / 3.4.X

手机:华硕Zenfone Max Pro M1

初始设置

Screenshot of plotted image

使用的词典:cv2.aruco.DICT_ARUCO_ORIGINAL

Aruco参数 [19年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内核的Median Blur。误检率低,标记物被完美检测。

最初,我认为这是由于应用“中值模糊”后图像中的噪点消除了,但通过逐渐增大/减小内核大小并没有改善结果。对于e.x:对于一张图像,使用9x9滤镜检测到角,但未使用5x5、7x7、11x11、15x15检测到。在另一张图片上,它可能会使用11x11。

  • 为什么会这样呢?

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

由于原始图片超过2MB,因此我无法在此处发布图片。

1 个答案:

答案 0 :(得分:0)

  

我不明白的是,为什么拒绝分数会发生变化?

如果您在OpenCV库中检查“ detectMarkers”功能,它将通过选择图像中的小窗口来应用自适应阈值。小窗口的数量定义如下:

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

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

  

为什么会这样?

再次,这是相同的原因。平滑图像时,自适应阈值的应用方式会发生变化。

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