视觉/图像重磅干货,第一时间送达!
检查对象的对齐方式包括确保它正好位于需要的位置以及正确的位置和方向。对象的对齐和位置可能需要在各个领域中具有高水平的精度。例如,在制造过程中,即使是很小的不对中也会导致缺陷。同样,在机器人技术中,拾取物体等任务需要精确定位。 自动检查对象对齐的一种高级方法是使用计算机视觉。计算机视觉系统可以捕获图像或视频帧,并使用深度学习算法准确检测和分析物体的位置和方向。 在本文中,我们将探讨使用计算机视觉检测对齐的方法,包括其工作原理、传统技术和实际应用。 对象对齐可以分为两种主要类型:2D 对齐和 3D 对齐。2D 对齐侧重于将对象正确定位在平面上或二维平面内。这是为了确保对象相对于水平轴和垂直轴的正确方向,而不是从其预期位置倾斜或移动。2D 对齐的常见用途是图像拼接,其中将多个图像组合在一起以创建单个无缝全景图。 另一方面,3D 对齐处理在三维空间中定位对象。这更棘手,因为它还会检查对象是否沿 z 轴正确定向。点云配准等技术在这里发挥作用,并且经常使用迭代最近点 (ICP) 算法。它有助于对齐从不同角度捕获的 3D 模型或点云(3D 空间中数据点的集合)。3D 对齐通常用于机器人技术中,用于精确导航和处理对象。它还用于 3D 重建,以创建物体或场景的详细模型。 过去,传统的图像分析方法被广泛用于检测物体的对齐情况。这些技术在今天仍然很重要,并且是许多现代计算机视觉技术的构建块。让我们来看看三个关键的传统技术:边缘检测、特征匹配和参考标记。 边缘检测可以帮助您在图像中查找对象的边界或边缘。通过识别这些边缘,您可以确定对象相对于其他对象的位置或对齐方式。当对象具有清晰、锐利的边缘时,此方法效果很好。但是,当条件不完美时,这可能会很棘手。例如,当光线不足时,会出现杂色,或者对象的一部分被隐藏。一种用于边缘检测的流行算法是 Canny Edge Detection。在检测之前应用高斯模糊等技术或使用 Otsu 阈值等自适应方法有助于提高边缘检测的准确性。 特征匹配涉及比较不同图像之间的特定细节或关键点以检查对齐情况。它会在一张图像中寻找独特的特征,并尝试将它们与另一张图像中的相似特征相匹配。但是,当对象没有强烈、独特的特征,或者图像之间的比例、旋转或照明发生很大变化时,这可能具有挑战性。Scale-Invariant Feature Transform (SIFT) 和加速稳健特征 (SURF) 等常用方法通常用于特征匹配,尽管它们在恶劣条件下可能会有局限性。 参考标记是框架中的固定点或特征,用作测量对象对齐方式的锚点。当您需要准确且可重复的测量时,例如在 3D 计量中,这些标记特别有用。通过将这些标记放置在已知位置,您可以准确确定对象在 3D 空间中的位置、方向和缩放。使用计算机视觉检测对齐的方法
计算机视觉可以使检测和测量物体的对齐变得更加简单。借助先进的算法和机器学习,我们可以准确确定物体在 2D 和 3D 空间中的方向、角度和位置。让我们探讨一下用于检测对齐的三种关键方法:对象方向检测、角度测量和姿态估计。 对象方向检测侧重于识别边缘和角落等关键特征,以了解对象的方向。这里使用的常用技术是主成分分析 (PCA)。PCA 通过简化图像数据和突出显示最重要的特征来提供帮助。它找到数据变化的主要方向(称为特征向量),并使用它们来确定对象的定向方式。例如,PCA 可以分析像素强度在图像中的分布情况,以创建更准确地反映对象真实位置的新轴。 确定物体的方向后,可以使用角度测量。可以计算检测到的方向与参考线之间的角度。在即使是很小的不对中也会导致问题的情况下,它非常方便。 姿势估计是一种更高级的技术,用于确定对象在 3D (3D) 空间中的方向和位置。它通常首先使用深度学习技术,例如卷积神经网络 (CNN),从图像中提取关键特征。然后,这些特征用于计算对象相对于照相机或观察点的 3D 方向和位置。数学模型(如透视 n 点 (PnP) 算法)有助于将图像中的 2D 点连接到相应的 3D 坐标。 除了对象方向检测、角度测量和姿势估计等方法外,您还可以使用对象检测和逻辑检查等更简单的方法来确定对齐方式。例如,您可以在图像或空间内设置预定义区域,并检查检测到的对象是否正确放置在这些区域内。在下一节中,我们将仔细研究其工作原理。 在此示例中,我们将演练使用计算机视觉检测对象对齐的过程。我们将要介绍的代码旨在检测和检查对象是否落在指定的多边形区域内。我们将使用这种方法来查看汽车是否正确停放在其位置内,方法是将停车位定义为面,并确保检测到的车辆完全位于这些区域内。 要自己尝试此操作,您需要一个图像来运行推理。我们使用了从 Internet 下载的图像。您可以使用同一图像,也可以使用自己的图像。让我们开始吧! 首先,确保您已安装必要的 Python 库。我们将使用推理等库进行模型加载,使用 opencv 进行图像处理,并使用监督来处理检测和注释。import numpy as np
import supervision as sv
import cv2
import inference
model = inference.get_model("yolov8x-640")
加载输入图像并使用 YOLOv8 模型检测其中的对象:image = cv2.imread("path/to/image/file")
results = model.infer(image)[0]
detections = sv.Detections.from_inference(results)
在这里,图像是使用 OpenCV 的 imread 函数加载的。然后,模型处理图像,并将结果转换为监督可用于管理检测的格式。 在此步骤中,我们定义了几个多边形,每个多边形都由一个坐标列表表示。这些多边形至关重要,因为它们定义了将检查对象对齐的区域。您可以使用 PolygonZone 创建这些多边形,该工具允许您在图像上绘制多边形并检索坐标。在此博客文章中了解有关如何使用它的更多信息。polygons = [
np.array([[67, 416], [141, 416], [141, 273], [67, 278]]),
np.array([[140, 416], [208, 416], [208, 279], [135, 275]]),
...
# Add more polygons as needed
]
定义多边形后,我们现在可以创建区域和相应的注释器。我们创建一个 PolygonZone 对象列表,每个对象都与其中一个多边形相关联。triggering_anchors 参数设置为检查对象的所有四个角,确保它们位于定义的区域内。PolygonZone 类是定义这些区域的有用工具,它让我们可以轻松检查检测到的对象是否在这些区域内对齐。zones = [
sv.PolygonZone(
polygon=polygon,
triggering_anchors=(sv.Position.TOP_LEFT,
sv.Position.TOP_RIGHT,
sv.Position.BOTTOM_LEFT,
sv.Position.BOTTOM_RIGHT),
)
for polygon in polygons
]
接下来,我们创建注释器以直观地标记这些区域和检测到的对象。PolygonZoneAnnotator 和 BoxAnnotator 有助于将视觉元素添加到输出图像中。这些注释器将绘制多边形和边界框,并可以轻松查看对象的位置以及它们是否正确对齐。zone_annotators = [
sv.PolygonZoneAnnotator(
zone=zone,
color=colors.by_idx(index),
thickness=2,
text_thickness=1,
text_scale=1
)
for index, zone
in enumerate(zones)
]
box_annotators = [
sv.BoxAnnotator(
color=colors.by_idx(index),
thickness=2
)
for index
in range(len(polygons))
]
最后,我们可以筛选检测结果,使其仅包含定义区域内的检测结果,应用注释并显示结果图像。for zone, zone_annotator, box_annotator in zip(zones, zone_annotators, box_annotators):
mask = zone.trigger(detections=detections)
detections_filtered = detections[mask]
frame = box_annotator.annotate(scene=image, detections=detections_filtered)
frame = zone_annotator.annotate(scene=frame)
sv.plot_image(frame, (8, 8))
这是输出图像。如您所见,标记为“0”的停车位有未正确对齐的车辆,而标记为“1”的停车位有车辆对齐并正确停放其中。
使用计算机视觉检测对象对齐是一个强大的工具,但它也带来了一系列挑战。以下是一些关键挑战:- 复杂对象的精度较低:具有不寻常形状或复杂设计的对象有时会混淆检测算法并导致对齐错误。纹理、颜色或表面条件的变化也会使算法更难一致地正确识别和对齐对象。
- 处理异常情况:算法可能会遇到困难,处理罕见或不寻常的情况,通常称为“边缘情况”,并且可能需要更多的训练数据来有效处理这些情况。
- 环境因素:光照的变化会产生阴影或高光,从而掩盖重要细节,并使对齐更难准确检测。繁忙或杂乱的背景也会混淆检测算法,而反光或透明表面可能会扭曲对象的外观并使过程复杂化。
- 实时处理:当需要实时进行对齐检测时,例如在装配线上,系统必须处理图像并快速做出决策。实时处理可能需要更昂贵的硬件来支持所需的处理能力。
- 集成挑战:将计算机视觉系统与现有机器和工作流程集成可能很复杂,需要仔细规划以确保一切顺利进行。
觉得有用,麻烦给个赞和在看