AI Hero Club

视觉与三维场景 · 第 1 章

已自行标记完成0 / 8

仅保存在当前浏览器;完成标记不代表通过项目验收。

本章提纲 3 个小节
全课目录 8 章
完整课程计划 ↗
视觉与三维场景 / 课程计划 ↗

CHAPTER 01 / 8建议学习 120 分钟

真实图像文件、像素坐标与可匹配观测

一张 PNG 怎样变成可供匹配的观测,而不借用生成场景时的三维真值?

本章要解决的 3 个问题
  • 从原始像素而非手写点表提取观测
  • 推导连通区域的统计量
  • 建立可检查的检测失败边界
课程项目 ZIP ↓

从图像像素提取可匹配观测

本课的终点是把多张二维图像变成可渲染、可验收的三维表示。读者需要会向量加减、矩阵乘法与基础 Python;奇异值分解作为明确说明作用的数值工具导入。我们的图像来自自己定义的三维发光珠场景,但重建程序必须重新打开实际 PNG,从像素自动找观测,不能读取生成时的三维坐标再假装检测。真值只在拟合结束后用于量化误差。这一信息边界是项目第一条合同。

先固定坐标约定。图像宽度为九十六、高度八十,数组形状是高度、宽度、颜色通道;索引顺序为行再列。像素横坐标 u 向右、纵坐标 v 向下,整数位置表示采样中心。世界位置用米,相机焦距用像素,二者不能直接相加。图像中的一次水平移动是像素量,三维物体移动多少米需要相机和深度才能解释。文件名、尺寸、通道、散列和坐标约定一同进入输入清单。

PNG 是可读取的观测载体,不保证像素已经具有线性辐射意义。这里合成器先得到线性强度,再量化为八位 RGB,读取时除以二百五十五;它没有额外施加伽马曲线,所以这套模型内部可以直接比较强度。真实相机的曝光、白平衡、伽马、压缩及镜头畸变需要另外建模,不能因为扩展名同为 PNG 就假定相同物理语义。我们也不把一个亮斑直接称为已识别的现实物体。

设图像位置为整数对,三个通道的观测向量为 I。已知本实验背景强度 b 等于零点零一五,先逐通道截去负值,得到信号 S。再用三个信号通道最大值作为检测权重 w。候选掩码由 w 大于零点零六五确定。这个阈值是当前受控图像的固定工程选择,不是普遍颜色识别定理;降低阈值会保留更多尾部,也可能把背景噪声连成区域。

S(u,v)=max⁡(I(u,v)−b,0),w(u,v)=max⁡cSc(u,v),M(u,v)=1{w(u,v)>τ}S(u,v)=\max(I(u,v)-b,0),\quad w(u,v)=\max_c S_c(u,v),\quad M(u,v)=\mathbf1\{w(u,v)>\tau\}
max 的第一个运算逐通道;tau 是固定检测阈值。

候选像素还不是物体列表。我们把共享上、下、左、右边的像素看作四邻接,用队列广度优先遍历:遇到尚未访问的候选像素便建立新区域,入队时标记,出队后检查四个邻居。每个像素至多入队一次,因此扫描和遍历都受像素总数的常数倍控制;最坏存储与图像面积成正比。对角接触是否算同一区域由邻接约定决定,不能在不同图像间悄悄切换。

对一个区域,先保存像素数、最小最大坐标及带权质心。质心是坐标乘权重的和除以总权重,分母正是因为所有区域像素都超过正阈值。它通常具有亚像素数值,但“有小数”不代表拥有同样数量的可信小数位。截断尾部、采样格、重叠亮斑都会造成偏差。项目保存包围框和面积,方便回到实际图像检查,而不是只留下两列数字。

uˉ=∑(u,v)∈Cw(u,v)u∑(u,v)∈Cw(u,v),vˉ=∑(u,v)∈Cw(u,v)v∑(u,v)∈Cw(u,v)\bar u=\frac{\sum_{(u,v)\in C}w(u,v)u}{\sum_{(u,v)\in C}w(u,v)},\quad \bar v=\frac{\sum_{(u,v)\in C}w(u,v)v}{\sum_{(u,v)\in C}w(u,v)}
C 是一个连通区域,横纵坐标分别加权。

算例一:从四个实际候选像素计算观测

设区域四个像素依次位于横纵坐标二与一、三与一、二与二、三与二,对应权重一、二、三、四。总权重十,横坐标加权和二十六,纵坐标加权和十七,因此质心为二点六与一点七。包围框横向二到三、纵向一到二,面积四。普通平均会给二点五与一点五,二者差异来自亮度分布,不是浮点错误。区域虽然只有四个整格点,观测可以落在格点之间。

如果删去最亮的右下像素,剩下总权重六,横坐标和十四、纵坐标和九,质心的横坐标十四除六等于三分之七,约二点三三三;九除六为一点五。横向偏移约负零点二六七,纵向负零点二。遮挡改变测量本身,不只是让噪声变大。后续三角化若把这个偏移当作真实视差,会产生有方向的深度偏差,平均更多同类遮挡图像也不能保证消除。

跨视角匹配还需要描述子。我们把区域内三个信号通道分别求和,得到三维颜色总量,再除以其欧氏长度,使描述子只保留颜色方向。若所有通道乘同一个正曝光因子,归一化结果相同;若白平衡分别改变通道,方向便会改变。颜色归一化减少一种变化,并没有发明对所有光照不变的物体身份。每张图中的观测 ID 只是本地遍历编号,不能据它直接跨图连接。

算例二:归一化描述子的成功与必败情况

一个区域总颜色为六、二、二,向量长度为根号四十四;另一个视图为三、一、一,长度为根号十一,归一化后完全相同,因此适合建立候选对应。若第二张图另有一个颜色也为三、一、一的区域,两个候选距离都为零,颜色信息无法区分身份。此时必须拒绝歧义或补充局部纹理与几何约束,不能以排序恰好先遇到谁作为“正确识别”的证据。

实际项目先按固定相机生成五张未知场景图像与五张单独标定图像,再运行同一个像素检测器。三张未知场景图用于训练,两张保留作新视角评价。标定图展示已知的非共面彩色标靶,可以用其已知几何估相机;它与未知场景不是同一组坐标。读者应打开图片确认亮斑存在,再比对检测包围框、观测数和散列。生成器知道真值与重建器能偷看真值是两件不同的事。

这套颜色标记是为了隔离几何机制的人工设计,不等价于自然图像特征。它仍包含真实的栅格化、量化、阈值和跨视角观测误差,并允许在文件层删除真值后运行。透明亮斑相互重叠时,四邻接会把两个珠子合成一区域;若它们颜色混合,新描述子也可能不属于任何一个珠子。这里不应强行补成预定数量,而应让缺失观测暴露给后续流程。

误差管理要区分没有观测、观测存在但位置偏移、以及观测匹配错三类。第一类减少可重建范围,第二类传播成连续位置不确定性,第三类可能产生完全不同的三维点。后续章节分别设置正深度、极线和重投影检查,但任何检查都有适用条件。当前小图检测成功只说明在受控图像模型中提取到了亮斑,并不支持“能理解任意照片”的结论。

量化误差可用一个通道的小例子定界。把线性强度乘二百五十五再四舍五入,未裁剪时重读误差绝对值最多半个量化格,即约零点零零一九六。靠近阈值的像素可能因这一步从候选变成背景,使连通性产生离散跳变。因而不能用单个像素强度的连续误差界直接当质心的连续误差界;区域一旦断裂或合并,观测数量都会改变。测试应既看数值偏移,也看分量数是否改变。

对称光斑在连续无限平面上的质心正好是投影中心,因为偏移积分中的奇函数项抵消。但有限像素网格和固定阈值截断未必保持完美对称,尤其中心不落在整数格时。项目观察到的百分之几像素标定残差正是在这条链上产生,不应先把检测质心替换为生成器精确投影来“修好”结果。保留这种小但真实的偏差,才能检验相机估计和后续拟合是否共同工作。

独立运行直接检查质心的分母、横纵顺序与算例。
weights=[1,2,3,4]
uv=[(2,1),(3,1),(2,2),(3,2)]
s=sum(weights)
centroid=tuple(sum(w*p[d] for w,p in zip(weights,uv))/s for d in range(2))
assert centroid==(2.6,1.7)
print(centroid)

TRY IT YOURSELF

练习一:邻接约定

一个二乘二掩码仅左上与右下为真。四邻接和八邻接各有几个分量?若把它们合成一物体,会多做什么假设?

提示 1
画出二乘二像素格,分别只沿边与允许对角走一步。
提示 2
先数连通分量,再列“分量就是物体”额外需要的阈值、内部连通与不接触假设。
对照参考解答
四邻接不能沿边从左上到右下,所以有两个分量;八邻接允许对角连接,只有一个。把分量等同物体还假定一个物体的候选像素连通、不同物体不接触,并且阈值没有打断内部区域。这些假设并非由掩码数组本身保证。实现应把邻接写成固定规则,再用最小图检验,不能为了得到期待数量而逐图改变。

TRY IT YOURSELF

练习二:曝光与颜色

颜色向量为二、一、零,同曝光因子三与分通道因子三、一、一分别给什么归一化方向?哪种变化被描述子消除?

提示 1
描述子归一化除的是整个向量的长度,先分别写两种增益后的向量。
提示 2
检查正标量能否从分子分母同时提出;分通道增益不共享一个因子,方向可能改变。
对照参考解答
原向量单位方向是二除根号五、一除根号五、零。统一曝光后为六、三、零,长度三倍根号五,方向不变。分通道变化给六、一、零,方向为六除根号三十七、一除根号三十七、零,与原来不同。描述子只消除正标量增益,不消除一般白平衡,更不能区分两个同色区域。

TRY IT YOURSELF

练习三:信息边界

检测程序若读取三维真值并投影成像素,再拿这个点表去三角化,为什么不能验收“图像到三维”?应怎样构造反证测试?

提示 1
真值投影路径绕过了哪些真实图像处理阶段?
提示 2
把真值文件从重建输入移走,再改一张PNG检查观测是否响应;真值只能在末端评价读取。
对照参考解答
那条链只验证投影与反投影互相兼容,没有验证文件解码、检测、描述子或匹配,量化与遮挡误差也被跳过。应把真值单独放入评价文件,重建函数只接收图片、标定靶和公开配置;临时删除真值文件,确认仍能得到相同观测与重建。另可修改一张场景 PNG 的像素,检查观测是否随之变化。评价阶段再读取真值作误差参照,不能反向修改结果。

CHECK YOUR UNDERSTANDING

检验理解

先作答,再决定是否展开解析。选择题用于发现理解缺口;独立实现与迁移任务仍需另行检验。

1. 数组 I[v,u] 中第一个索引代表什么?

查看解析数组先行后列;几何向量一般写横纵,必须显式转换。
2. 亚像素质心为什么不等于无限精度?

查看解析加权统计产生小数,观测模型误差仍然存在。
3. 两个候选颜色距离都为零时应怎样解释?

查看解析描述子缺少辨别信息,需要拒绝或引入独立约束。
4. 删除未知场景真值后仍能重建主要验证什么?

查看解析这是信息边界测试,不能替代其他机制与质量检查。

自行标记用于记录学习进度,不代表通过项目验收。