Python版本:3.7
OpenCV版本:4.1.1 / 3.4.X
手机:华硕Zenfone Max Pro M1
使用的词典: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。在这种情况下,没有检测到拐角,但是有很多拒绝点。
裁剪的图像:Y轴为200至1574,X轴为883至2633。我使用OpenCV裁剪了它,所以没有损失。
在某些情况下,它检测到拐点,在某些情况下,它捕获了比以前更多的噪声。
Screenshot of aruco detection on cropped image。在这种情况下,拒绝点比以前更多。
我在此图像上使用了11x11内核的Median Blur。误检率低,标记物被完美检测。
最初,我认为这是由于应用“中值模糊”后图像中的噪点消除了,但通过逐渐增大/减小内核大小并没有改善结果。对于e.x:对于一张图像,使用9x9滤镜检测到角,但未使用5x5、7x7、11x11、15x15检测到。在另一张图片上,它可能会使用11x11。
Screenshot of aruco detection after noise removal,为方便起见,进行了缩放。
由于原始图片超过2MB,因此我无法在此处发布图片。
答案 0 :(得分:0)
我不明白的是,为什么拒绝分数会发生变化?
如果您在OpenCV库中检查“ detectMarkers”功能,它将通过选择图像中的小窗口来应用自适应阈值。小窗口的数量定义如下:
// number of window sizes (scales) to apply adaptive thresholding
int nScales = (params->adaptiveThreshWinSizeMax - params->adaptiveThreshWinSizeMin) /
params->adaptiveThreshWinSizeStep + 1;
即使您进行裁剪,除非更改这些参数,否则图像处理将把图像分解为相同数量的小窗口。这将改变(可能减少或增加)检测到的总(接受+拒绝)候选人的数量。
为什么会这样?
再次,这是相同的原因。平滑图像时,自适应阈值的应用方式会发生变化。
我认为,如果将标记更改为具有更多凹形黑色区域的标记,那就太好了。这只是一个建议,因为标记的中心部分主要是白色正方形,而您的其他白色纸片也大多是白色正方形。