我观察到Aruco标签的图像分辨率非常高(与标签大小相比),实际上检测的可靠性低于平均分辨率。我本以为太低的分辨率是一个问题,没有降级。
不是相机的问题,我用生成的图像(在ChAruco板上)测试了这个。
- Python语言:3.10.5
- Aruco词典:双氧碘甲烷_6X6_100
- OpenCV库:开源软件-4.6.0.66
我观察到:
- 标记宽度低于22 px-分辨率太低,所以检测率很低。好的。
- 对于宽度在22到26像素之间的标记,我们有100%的检测率。
- 超过26个像素时,检测变得零星,然后福尔斯50%以下。为什么??
下面是实际检测到的标记。请注意,检测到的周界标记更为一致。在检测到此gif后,图像被重新缩放为相同大小;您应该看到分辨率增加(并且由于标记注解的大小是固定的,因此它们看起来缩小了)
扩展到300 x300 px:
原始图像,供任何想要测试检测的人使用(ChAruco板DICT_6X6_100为60 x60 px,因此每位平均为60/8=7.5px):
为了完整起见,我尝试了前16本Aruco词典,得到了类似的结果:
正如预期的那样,4X 4标签在较低的分辨率下更容易检测到,但在较高的分辨率下有相同的退化。
此代码测试ChAruco板上预定义Aruco字典的检测与标记大小:
import cv2
import cv2.aruco as aruco
import numpy as np
import matplotlib.pyplot as plt
for dictNum in range(16):
print(dictNum)
d = aruco.getPredefinedDictionary(dictNum)
arucoParams = aruco.DetectorParameters_create()
x = []
y = []
for markerLength in range(10, 60):
# params
markersX = 10 # Number of markers in X direction
markersY = 10 # Number of markers in Y direction
markerSeparation = round(markerLength/4) #25% of marker size
margins = markerSeparation
borderBits = 1;
sc = (markerLength + markerSeparation)
of = - markerSeparation + 2 * margins
imageSize = [markersY*sc+of, markersX*sc+of]
board = aruco.CharucoBoard_create(markersY, markersX, 1, markerLength/(markerLength+markerSeparation), d)
imboard = board.draw(imageSize)
fn = "chessboard" + str(dictNum) + "_" + str(markerLength) + ".tiff"
## cv2.imwrite(fn, imboard)
(corners, ids, rejected) = aruco.detectMarkers(imboard, d, parameters=arucoParams)
x.append(markerLength)
y.append(len(corners))
if len(corners) > 0:
length_of_axis = 0.02
imboard = aruco.drawDetectedMarkers(imboard.copy(), corners, ids)
fn = "ANNOchessboard" + str(dictNum) + "_" + str(markerLength) + ".tiff"
## cv2.imwrite(fn, imboard)
plt.plot(x, y, label="Dict#"+str(dictNum))
plt.xlabel("Marker Size (px)")
plt.ylabel("#Aruco Tags Detected")
plt.show()
1条答案
按热度按时间zf9nrax11#
多亏了christoph-rackwitz安静区确实太小了。
我将图扩展到3D以查看标记之间间距的影响。x1c 0d1x
我使用的标记大小为0.8(因此标记之间的间距为0.2,或标记大小的25%)。对于100%的检测,28%就足够了。我是如此接近!在ChAruco术语中:
对于大小为1的正方形,标记大小必须 * 低于 * 0.78,才能在理想图像上获得良好的检测率。我计划使用较大的间距来打印图片,以获得一定的边距。