北京网站seo收费标准,在线设计平台的优缺点,河南卓越建设工程有限公司网站,seo优化培训深度相机同时拍摄xyz点云文件和jpg图像文件。xyz文件里面包含三维坐标[x,y,z]和jpg图像文件包含二维坐标[x#xff0c;y],但是不能直接进行变换#xff0c;需要一定的步骤来推演。
下面函数是通过box二维框[xmin, ymin, xmax, ymax, _, _ ]去截取xyz文件中对应box里面的点云…深度相机同时拍摄xyz点云文件和jpg图像文件。xyz文件里面包含三维坐标[x,y,z]和jpg图像文件包含二维坐标[xy],但是不能直接进行变换需要一定的步骤来推演。
下面函数是通过box二维框[xmin, ymin, xmax, ymax, _, _ ]去截取xyz文件中对应box里面的点云返回点云的numpy数组 def get_point_from_xyz_and_box(self, Image_XYZ_Name, box, p0.1, Sampling_interval4):#改进的读取点云的函数可以节省很多时间# 使用内存映射读取文件with open(Image_XYZ_Name, rb) as fd:# 计算映射大小和偏移dtype np.dtype(np.uint16)offset dtype.itemsize * self.width * self.height * 3 #根据文件格式调整fd.seek(0, 2) # 移动到文件末尾file_size fd.tell()assert file_size offset, 文件大小不匹配# 创建内存映射mm np.memmap(fd, dtypedtype, moder, shape(self.height, self.width, 3), orderC)# 转换为3D点云只读取box范围内的xmin, ymin, xmax, ymax, _, _ boxy_indices np.arange(ymin, ymax, Sampling_interval, dtypeint)x_indices np.arange(xmin, xmax, Sampling_interval, dtypeint)# 构建网格索引y_grid, x_grid np.meshgrid(y_indices, x_indices, indexingij)depth_points mm[y_grid, x_grid].reshape(-1, 3) * p# print(mm,mm) # print(y_grid, x_grid) # 过滤无效点假设深度值为0表示无效点valid_points depth_points[depth_points[:, 2] ! 0]return valid_points下面函数是知道点云中的一个点[x,y,z]来计算出这个点对应的二维坐标[y,x] def calculate_box_from_points_and_xyz(self, point, p0.1):with open(self.XYZ_Name, rb) as fd:# 计算映射大小和偏移dtype np.dtype(np.uint16)offset dtype.itemsize * self.width * self.height * 3 # 根据文件格式调整fd.seek(0, 2) # 移动到文件末尾file_size fd.tell()assert file_size offset, 文件大小不匹配# 创建内存映射a np.memmap(fd, dtypedtype, moder, shape(self.height, self.width, 3), orderC)# 将所有点的坐标转换为KD树需要的格式并除以ppoints np.reshape(a, (-1, 3)) kd_tree KDTree(points)# 查找最接近的点point_idx kd_tree.query(point / p)[1]# 将一维索引转换回二维索引matching_indice np.unravel_index(point_idx, (self.height, self.width))return matching_indice