x, y = np.meshgrid(np.arange(range_x), np.arange(range_y)) # np.savetxt('reshape_data.txt', x, delimiter=' ', fmt="%i") x_o = x - range_x / 2 y_o = y - range_y / 2 x_i = x - dx y_i = y - dy z_critical = 50 R_o = 550 R_i = 200 def crop_pointcloud(data_crop, x_o, y_o, x_i, y_i, R_o, R_i, z_critical): K_o = R_o ** 2 / range_z K_i = R_i ** 2 / range_z for z in range(range_z): r_o = np.sqrt(z * K_o) data_layer = data_crop[:, :, z] d_o = np.sqrt(x_o ** 2 + y_o ** 2) d_i = np.sqrt(x_i ** 2 + y_i ** 2) if z < z_critical: r_i = 0 else: r_i = np.sqrt(z * K_i) data_crop[:, :, z] = np.where((d_o > r_o) | (d_i <= r_i), 0, data_layer) return data_crop data_crop = crop_pointcloud(data_crop, x_o, y_o, x_i, y_i, R_o, R_i, z_critical) data_crop = data_crop[:, :, 10:] C++ Eigen::Tensor<uint8_t, 3, Eigen::RowMajor> data_crop实现
时间: 2024-04-05 14:33:11 浏览: 62
Eigen::Tensor<uint8_t, 3, Eigen::RowMajor> data_crop(range_x, range_y, range_z);
Eigen::Tensor<uint8_t, 2, Eigen::RowMajor> data_layer(range_x, range_y);
Eigen::Tensor<float, 2, Eigen::RowMajor> d_o(range_x, range_y);
Eigen::Tensor<float, 2, Eigen::RowMajor> d_i(range_x, range_y);
float K_o = R_o * R_o / range_z;
float K_i = R_i * R_i / range_z;
for (int z=0; z<range_z; z++) {
float r_o = sqrt(z * K_o);
data_layer = data_crop.chip(z, 2);
for (int i=0; i<range_x; i++) {
for (int j=0; j<range_y; j++) {
d_o(i, j) = sqrt((i - range_x / 2) * (i - range_x / 2) + (j - range_y / 2) * (j - range_y / 2));
d_i(i, j) = sqrt((i - dx) * (i - dx) + (j - dy) * (j - dy));
}
}
float r_i = (z < z_critical) ? 0 : sqrt(z * K_i);
data_layer = data_layer.where((d_o > r_o) || (d_i <= r_i), 0);
}
data_crop = data_crop.slice(Eigen::array<Eigen::Index, 3>({0, 0, 10}), Eigen::array<Eigen::Index, 3>({range_x, range_y, range_z - 10}));
阅读全文