numpy 如何从深度图像中判断物体是否平坦?

wlzqhblo  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(156)

我有一个深度传感器距离的2x2矩阵。该矩阵被裁剪,因此只有我们感兴趣的点在帧中(裁剪图像中的所有点都包含该对象)。我的问题是,我们如何确定该对象是否是平面的?
深度图像是从Realsense d435中获取的。我读取深度图像,然后将其乘以depth_scale。使用人工智能对与深度图像对齐的rgb图像识别对象。我在对象上有4个点。因此,该矩形中的所有距离都包含对象与传感器的距离。
我的第一个想法是所有点的标准差。但是如果图像是从一个Angular 拍摄的,这个想法福尔斯不成立了。(因为标准差不会是0)
从一个Angular 看,一个平面物体的距离在y轴上均匀地变化。也许,我们可以用这个信息?
2x2矩阵是python中的一个numpy数组,也许有一些库已经做了这件事。

iezvtpos

iezvtpos1#

在将四个深度测量值重新投影到3D空间后,确定点集是否共面就成了一个问题。有几种方法可以解决这个问题。
一种方法是将这些点重新投影到3D上,然后用一个平面来拟合所有四个点。因为你要用一个平面来拟合三维空间中的四个点,所以你会得到一个超定的系统,而且所有的点都不太可能精确地位于估计的平面上。在这个阶段,你可以指定一些公差来确定“拟合度”。例如,你可以看看R^2系数。要拟合平面,你可以使用scipy.linalg.lstsq。下面是一个很好的描述。是的。
另一种解决问题的方法是计算由3D中的四个点生成的四面体的体积。如果它们共面(或接近共面),则这种四面体的体积应等于(或接近)0。假设重新投影到3D中的点a可以用(x_0, y_0, z_0), ..., (x_3, y_3, z_3)来描述,则四面体的体积等于:
volume = abs(numpy.linalg.det(tetrahedron)) / 6,其中
tetrahedron = np.array([[x_0, y_0, z_0, 1], [x_1, y_1, z_1, 1], [x_2, y_2, z_2, 1], [x_3, y_3, z_3, 1]])
要检查点是否在同一平面上,(等效地-如果四面体具有足够小的体积),现在只需检查
volume < TOL
对于一些必须通过实验确定限定的小公差值。

pgccezyw

pgccezyw2#

您可以通过选择四个三维点中的三个来定义曲面。计算剩余点到曲面的距离。
如何选择这三个点是......选择使三角形面积最大化的图案可能会很好。

相关问题