2026.05.18征图日记16(改回逐项素积分&优化LiDAR与拍照的时序问题)

上午把测量缺陷的方式从取中间1/4深度,改为了拿到深度图,检测到缺陷后,确定缺陷位置在深度图的哪个位置,只拿到这个部分的深度,之后再进行逐项素积分,对于深度图无数据的地方,用靠近这个位置的其他深度进行填平

之后就在看标定法了,发现标定法只是得到了相机的内参+矫正畸变,对于测量物体的真实长度or面积,还是需要一层像素到物理世界的换算,所以还是需要有一个已知长度的物体,拍照之后在App里面进行标定(Leader说这个很low)

并且在工业上的标定,相机镜头是固定不变的,无论是拍摄照片的解析力,还是精度,都无法和专业的工业相机比较

之后又发现有一个同框标定的方案,不用撤标定板,直接把被测物体放在标定板上面。另外如果都用上标定板了,那为什么不直接用工业的成熟方案呢,还要用手机这种精度低的方式,再说,我现在都不知道这个app的缺陷面积检测是用在什么具体场景,对精度的要求怎么样,固定还是不固定。问mentor也是你先做吧,leader一天也忙得很。

还了解到,激光雷达结合X射线或超声波技术,激光雷达可构建物体内部点云模型,辅助判断孔洞位置与大小。在航空航天领域,该技术已用于检测复合材料层间缺陷。

下午在mentor手机上测了一下发现了几个问题:
1、拍照与深度采集不在同一时刻或相近时刻,导致用户点击拍照后裁切之后拿到的深度数据不与RGB图像匹配
2、深度图像素相对于RGB图片的像素太低,RGB图像中16xx16的像素对应同一个深度
3、保证裁切后的图像拿到的深度数据匹配

还和另一个同事(骏哥)聊了一会标定的东西,和骏哥聊天就舒服多了,不仅仅是因为我做的东西他也在做(他是做机械臂的,机械臂上也有摄像头和激光雷达),并且我们的思维方式很相似。

最后我知道了,标定法只是确定内相机内参,但是还是需要LiDAR的深度数据。

每日温度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
// 递减栈,栈顶元素最小
vector<pair<int, int>> stk; // 下标,数字
vector<int> ans(n, 0);
for (int i = 0; i < n; ++i) {
// 栈不为空,并且当前遍历到的元素大于栈顶元素,就可以更新结果了
// 但不能直接更新,需要先将栈顶元素pop,维持递减栈
// 最后将当前元素入栈
while (!stk.empty() && stk.back().second < temperatures[i]) {
pair<int, int> back = stk.back();
stk.pop_back();
ans[back.first] = i - back.first;
}
stk.push_back({i, temperatures[i]});
}
return ans;
}
};

最长公共子序列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int n = text1.size(), m = text2.size();
// dp[i][j] 表示text1的前i个元素和text2的前j个元素的最长公共子序列
// 注意下标映射
vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));
for (int i = 1; i < n + 1; ++i)
for (int j = 1; j < m + 1; ++j) {
if (text1[i - 1] == text2[j - 1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
return dp[n][m];
}
};

今日工作内容

  1. 将 LiDAR 面积计算从中心深度平均法改为逐像素积分,每个缺陷像素独立查询深度值并累加 Z²/(fx×fy);
  2. 新增 depthLookupWithFallback 邻近填充;
  3. 实现 DepthCaptureModule 预热机制(prewarmDepthSession),CaptureScreen 挂载时启动深度 session,拍照后直接取缓存帧,延迟从 ~700ms 降至 ~100ms;
  4. 修复预热→采集的线程竞态问题(串行队列同步)
  5. 重写 CaptureScreen:用 VisionCamera 替代系统相机,快门瞬间同步拍照+LiDAR深度采集;
  6. 复用 openCropper 后裁切;添加 LiDAR 状态指示器;修复竞态问题(相册/快门互斥、卸载后回调守卫、取消裁切清理残留数据)

下阶段计划
1、优化App缺陷测量精度
2、优化App交互逻辑