update: 扩大ip搜索范围,修改点云可视化逻辑,添加上位机与下位机曝光值同步

This commit is contained in:
2026-02-06 14:47:42 +08:00
parent 03c7cb58da
commit 04a5ec269f
12 changed files with 204 additions and 59 deletions

View File

@@ -106,9 +106,8 @@ bool PointCloudProcessor::initializeOpenCL()
"int y = idx / width; "
"int x = idx % width; "
"float z = depth[idx] * z_scale; "
// 完全平面的圆柱投影X和Y直接使用像素坐标缩放到合适的范围
"xyz[idx*3] = (x - cx) * 2.0f; " // X坐标缩放系数2.0
"xyz[idx*3+1] = -(y - cy) * 2.0f; " // Y坐标取反修正上下颠倒
"xyz[idx*3] = (x - cx) * z * inv_fx; "
"xyz[idx*3+1] = (y - cy) * z * inv_fy; "
"xyz[idx*3+2] = z; "
"}";
@@ -283,31 +282,30 @@ void PointCloudProcessor::processPointCloudData(const QByteArray &cloudData, uin
// 从int16_t数组读取点云数据
const int16_t* cloudShort = reinterpret_cast<const int16_t*>(cloudData.constData());
float inv_fx = 1.0f / m_fx;
float inv_fy = 1.0f / m_fy;
if (isZOnly) {
// Z-only格式转换为正交投影(柱形)
// Z-only格式标准针孔模型反投影
for (size_t i = 0; i < m_totalPoints; i++) {
int row = i / m_imageWidth;
int col = i % m_imageWidth;
// 读取深度值(单位:毫米)
float z = static_cast<float>(cloudShort[i]) * m_zScale;
// 正交投影X、Y使用像素坐标Y轴翻转以修正镜像
cloud->points[i].x = static_cast<float>(col);
cloud->points[i].y = static_cast<float>(m_imageHeight - 1 - row);
cloud->points[i].x = (col - m_cx) * z * inv_fx;
cloud->points[i].y = (row - m_cy) * z * inv_fy;
cloud->points[i].z = z;
}
} else {
// XYZ格式完整的三维坐标
// 转换为正交投影柱形使用像素坐标作为X、Y
// XYZ格式使用Z值进行针孔模型反投影
for (size_t i = 0; i < m_totalPoints; i++) {
int row = i / m_imageWidth;
int col = i % m_imageWidth;
// 正交投影X、Y使用像素坐标Y轴翻转以修正镜像Z使用深度值
cloud->points[i].x = static_cast<float>(col);
cloud->points[i].y = static_cast<float>(m_imageHeight - 1 - row);
cloud->points[i].z = static_cast<float>(cloudShort[i * 3 + 2]) * m_zScale;
float z = static_cast<float>(cloudShort[i * 3 + 2]) * m_zScale;
cloud->points[i].x = (col - m_cx) * z * inv_fx;
cloud->points[i].y = (row - m_cy) * z * inv_fy;
cloud->points[i].z = z;
}
}