图像金字塔:不只是缩小
pyrDown 和 buildOpticalFlowPyramid 用分辨率换尺度覆盖;scale factor 和层数要与检测器/光流参数联动。

1. 层数加多,小目标反而 miss
ORB nlevels 十二、LK maxLevel 五,大位移 track 稳了,小锥桶在 coarse 层消失——每层 blur 加降采样,层数不是越多越好。ORB 的 nlevels 和 LK 的 maxLevel 我会一起设,固定其他变量只扫 level 曲线。金字塔是用分辨率买尺度不变性;算力紧时减层,鲁棒性紧时加层,两边都有硬上限。层数加多小目标反而 miss,是 blur 加 subsample 的代价,不是调参能完全消除。
2. 构建机制
layer = img.copy()
pyramid = [layer]
for _ in range(levels - 1):
layer = cv2.pyrDown(layer) # 5×5 Gaussian approx + subsample
pyramid.append(layer)pyrDown 严格除以二;连续 n 次等价 scale 一除以二的 n 次方。pyrUp 上采样(insert zeros 加 blur),与 pyrDown 不完全可逆。buildPyramid 返回 list。ORB 的 scaleFactor 一点二是非 dyadic 金字塔(每层缩小约百分之十七),内部自建——别手动 pyrDown 再喂 ORB 除非你知道在做什么。Laplacian pyramid 用于 blend,Gaussian pyramid 用于 SIFT/ORB/LK。
3. 三大用途
检测/匹配:ORB/SIFT 多尺度;matchTemplate 由粗到精在 peak ROI refine,避免全分辨率 sliding window。光流:buildOpticalFlowPyramid 供 calcOpticalFlowPyrLK,maxLevel 三 → 八倍位移覆盖。定位精度:coarse-to-fine 层间插值可恢复亚像素,但 blur 损细节;小目标检测限制最高层 downsample,或在原分辨率保留一层。matchTemplate 多尺度:coarse 层 peak 定位,fine 层 ROI refine,步长常用根号二或 dyadic 除以二。
4. 内存与性能
金字塔占原图约三分之四到四分之三叠加(一加四分之一加十六分之一加……约三分之四原图);4K 多 level 注意 peak RSS。预分配 pyramid buffer,避免每帧反复 alloc 造成 jitter。嵌入式 cap nlevels 看 latency budget——每层多一次 detect/match/compute,成本线性涨。边界效应:pyrDown 边缘像素受 padding 影响,ROI 检测时注意 margin。
5. 失败模式
| 情况 | 表现 |
|---|---|
| 层数过多 | 小目标 miss |
| scaleFactor 与 detector 不一致 | 尺度覆盖 gap |
| 边界效应 | pyrDown 边缘无效 |
| 层间误差累积 | 定位 drift |
6. 验收
各层特征 count;LK track 在大位移 clip 上的 survival;latency vs level 曲线。调参时固定其他变量,只扫 nlevels、scaleFactor、maxLevel——三者联动,单独调一个容易懵。
7. 案例:nlevels 十二小锥桶 miss
某检测 nlevels 十二,大目标稳、小锥桶 miss——coarse 层 blur 加 subsample 后小目标消失。减到 nlevels 六或在原分辨率保留一层,小目标 recall 回升。层数不是越多越好,要在尺度覆盖与小目标保留之间折中。
8. 与 ORB、LK 参数联动
ORB scaleFactor 与 nlevels 决定最大检测尺度;LK maxLevel 决定最大位移覆盖。两者一起设——单独把 LK maxLevel 加到五而 ORB nlevels 仍八,会出现「能 track 大位移但 detect 不到小目标」或反过来。固定其他变量只扫 level 曲线,比逐个调参可靠。
9. matchTemplate 多尺度加速
coarse 层 peak 定位,fine 层 ROI refine,步长常用根号二或 dyadic 除以二。避免全分辨率 sliding window。层间插值可恢复亚像素,但 blur 损细节——小目标检测限制最高层 downsample。
10. 内存与嵌入式
金字塔占原图约三分之四叠加;4K 多 level 注意 peak RSS。预分配 buffer 减 jitter;嵌入式 cap nlevels 看 latency budget。边界效应:pyrDown 边缘受 padding 影响,ROI 检测注意 margin。
11. 验收清单
各层特征 count;LK track 大位移 clip survival;latency vs level 曲线。调参固定其他变量只扫 nlevels、scaleFactor、maxLevel——三者联动,单独调一个容易懵。金字塔是用分辨率买尺度不变性,两边都有硬上限。ORB 内部非 dyadic 金字塔,别手动 pyrDown 再喂 ORB;LK 的 buildOpticalFlowPyramid 与 ORB nlevels 应一起规划尺度覆盖。4K 多 level 预分配 buffer 减 jitter;coarse-to-fine matchTemplate 在 peak ROI refine 是经典加速,步长根号二或除以二均可。Laplacian pyramid 用于 blend,Gaussian 用于检测与光流——混用概念调参会懵。层间误差累积会导致定位 drift,小目标限制最高层 downsample。pyrUp 与 pyrDown 不完全可逆;blend 用 Laplacian,检测用 Gaussian。scaleFactor 与 nlevels、maxLevel 三者联动扫 level 曲线,单独调一个容易懵。嵌入式 cap nlevels 看 latency budget,每层多一次 compute 成本线性涨。ORB 的 scaleFactor 一点二非 dyadic,与 pyrDown 严格除以二不同;混用概念调参会懵。验收时固定其他变量只扫 level,比逐个调参可靠。
相关
也可以看看
johan's blog