1、练习4.1:数据拟合(离散数据插值)。从一个平滑变化的函数中生成一些随机样本,然后实现并评估一种或多种数据插值技术。1. 通过将少量具有随机振幅、频率或尺度的正弦函数或高斯函数相加,生成一个“随机”的一维或二维函数。2. 在几十个随机位置对这个函数进行采样。3. 使用离散数据插值技术(如三角剖分、样条插值、径向基函数等),对这些数据点进行函数拟合。4. 在某些位置集(例如规则网格或不同的随机点)上测量估计函数与原始函数之间的拟合误差。5. 手动调整拟合算法可能需要的任何参数,以最小化输出样本的拟合误差,或者使用如交叉验证等自动技术。6. 用一组新的随机输入样本和输出样本位置重复此练习。最优参数是否会改变?如果改变,改变了多少?7. (可选)通过在图像的不同部分使用不同的随机参数,生成一个分段平滑的测试函数。数据拟合问题的难度增加了多少?你能想出减轻这种难度的方法吗?
离散数据插值的实现与评估
该练习要求进行离散数据插值的实现与评估,步骤包括生成随机函数、随机采样、选择插值技术拟合数据、测量拟合误差、调整参数、重复实验观察参数变化,还可选择生成分段平滑测试函数并思考应对难度增加的方法。可按以下步骤完成:
生成随机函数 :将少量随机振幅、频率或尺度的正弦或高斯函数相加得到一维或二维函数。 随机采样 :在函数上选取几十个随机位置进行采样。 函数拟合 :运用三角剖分、样条插值、径向基函数等插值技术对采样数据进行拟合。 误差测量 :在规则网格或随机点上计算估计函数与原始函数的误差。 参数调整 :手动或用交叉验证等自动技术调整参数以减小误差。 重复实验 :更换随机样本和位置再次实验,观察最优参数变化。 可选任务 :生成分段平滑函数,评估拟合难度增加程度并思考解决办法,如使用变分方法或考虑局部特征的插值技术。
2、练习4.3:图像去块效应 —— 具有挑战性。开发一种技术来去除JPEG在高压缩设置下出现的块效应。你的技术可以简单到在块边界处寻找意外边缘,或者将量化步骤视为变换系数空间的凸区域到相应量化值的投影。1. 从JPEG头信息中获取的压缩因子知识,是否有助于更好地进行去块效应处理?2. 由于量化是在DCT变换后的YCbCr空间中进行的,因此在该空间中进行分析可能更合适。另一方面,图像先验在RGB空间中可能更有意义。决定你将如何处理这种两难情况,并讨论你的选择。3. 由于在DCT之前,YCbCr转换之后会进行色度子采样阶段,看看你是否可以使用较好的恢复技术来恢复一些丢失的高频色度信号。4. 如果你的相机具有RAW + JPEG模式,你能多接近无噪声的真实像素值?
本题要求开发去除JPEG高压缩设置下块效应的技术,并提出了四个相关问题:
判断JPEG头信息中的压缩因子知识是否有助于更好地去块效应。 要决定如何处理在DCT变换后的YCbCr空间分析和在RGB空间使用图像先验的两难情况,并讨论选择。 利用较好的恢复技术,尝试恢复YCbCr转换后色度子采样阶段丢失的高频色度信号。 若相机有RAW + JPEG模式,评估能多接近无噪声的真实像素值,但因相机通常使用高质量设置,此建议实用性可能不高。
3、实现并比较以下相关算法的性能:平方差之和、鲁棒差之和、绝对差之和、偏差 – 增益补偿平方差、归一化互相关、上述算法的窗口版本、上述度量的基于傅里叶变换的实现、相位相关、梯度互相关(Argyriou 和 Vlachos 2003)。在具有不同噪声量、曝光变化、遮挡和频率变化(例如,高频纹理,如沙子或布料,以及低频图像,如云或运动模糊视频)的不同运动序列上比较其中一些算法。有一些具有光照变化和真实对应关系(水平运动)的数据集可在 https://vision.middlebury.edu/stereo/data (2005 和 2006 数据集)找到。
以下是调整为 Markdown 格式的内容:
可按照以下步骤完成算法实现与性能比较:
分别实现以下算法:
– 平方差之和
– 鲁棒差之和
– 绝对差之和
– 偏差 – 增益补偿平方差
– 归一化互相关
– 上述算法的窗口版本
– 上述度量的基于傅里叶变换的实现
– 相位相关
– 梯度互相关(Argyriou 和 Vlachos 2003)
从 Middlebury Stereo 数据集 下载 2005 和 2006 数据集,该数据集包含光照变化和真实对应关系(水平运动)。
准备不同运动序列,涵盖以下变化因素:
– 不同噪声量
– 曝光变化
– 遮挡
– 频率变化(如高频纹理的沙子或布料图像,低频的云或运动模糊视频)
在准备好的不同运动序列上运行实现的算法,记录各算法的性能指标。
对记录的性能指标进行分析比较,得出各算法在不同场景下的性能表现。
4、若想获取更多比较和想法,可以查看哪份调查?
可查阅 Baker 和 Matthews(2004)的文献
“Lucas – Kanade 20 years on: A unifying framework: Part 1: The quantity approximated, the warp update rule, and the gradient descent approximation”
获取更多比较和想法。
5、编写一个程序来稳定输入的视频序列,实现以下操作:1. 通过鲁棒的异常值剔除计算连续帧之间的平移(以及可选的旋转)。2. 对运动参数进行时间高通滤波,以去除低频分量(平滑运动)。3. 补偿高频运动,稍微放大(用户指定的量)以避免丢失边缘像素。4. (可选)不进行放大,而是从之前或后续的帧中借用像素来填充。5. (可选)通过从相邻帧“窃取”高频信息来补偿因快速运动而模糊的图像。
要编写这样一个视频稳定程序,可按以下步骤进行:
计算连续帧间的平移和旋转 :
利用特征匹配(如SIFT、SURF等)检测相邻帧的特征点,通过RANSAC等算法进行鲁棒的异常值剔除,计算帧间的平移和旋转参数。
时间高通滤波 :
对计算得到的运动参数进行高通滤波,去除低频分量,保留高频抖动部分,通过设计合适的滤波器(如有限脉冲响应滤波器)实现。
补偿高频运动 :
根据用户指定的量稍微放大图像,避免因运动补偿导致边缘像素丢失。
可选步骤 – 借用像素 :
若不进行放大,可从前后帧借用像素填充缺失区域,通过插值等方法实现。
可选步骤 – 补偿模糊图像 :
对于因快速运动而模糊的图像,从相邻帧“窃取”高频信息,可通过图像金字塔等方法提取高频分量并融合。
6、计算两幅图像之间的光流(基于样条或逐像素)。
在 https://vision.middlebury.edu/flow 或 http://sintel.is.tue.mpg.de 上可用的运动序列上测试你的算法,并将你的结果(可视化)与这些网站上的结果进行比较。如果你认为你的算法与最佳算法具有竞争力,可以考虑提交进行正式评估。 通过使用帧插值(练习9.5)生成中间图像来可视化你的结果质量。 你能说一说你的方法的相对效率(速度)如何?
7、在https://vision.middlebury.edu/flow 或 http://sintel.is.tue.mpg.de 上的运动序列上测试你的算法,并将你的结果(直观地)与这些网站上的结果进行比较。如果你认为你的算法与最佳算法具有竞争力,可以考虑提交进行正式评估。
在提供的运动序列上测试算法:
Middlebury 数据集 Sintel 数据集
将结果与网站上的结果进行可视化比较。若认为算法有竞争力,可提交进行正式评估。
8、如何通过使用帧插值生成中间图像来可视化结果质量?
图像变形程序实现步骤
编写一个程序自动在图像对之间进行变形,实现以下步骤:
计算双向流
可考虑使用多帧(n > 2)技术更好地处理遮挡区域。
计算流向量及图像选择
对于每个中间(变形)图像,计算一组流向量以及最终合成中应使用哪些图像。
混合图像并查看效果
混合(交叉溶解)图像并通过序列查看器查看。
测试与应用
在朋友和同事的图像上进行测试。 对视频序列进行高质量慢动作效果处理。 与简单的交叉淡入淡出进行比较。
9、编写一个程序,实现图像对之间的自动变形。步骤如下:1. 计算两个方向的光流,考虑使用多帧(n > 2)技术来更好地处理遮挡区域。2. 对于每个中间(变形后的)图像,计算一组光流向量以及最终合成中应使用哪些图像。3. 对图像进行融合(交叉溶解),并使用序列查看器查看。在你朋友和同事的图像上进行测试,看看能得到什么样的变形效果。或者,选取一个视频序列,实现高质量的慢动作效果。将你的算法与简单的交叉淡入淡出进行比较。
图像对间自动变形任务说明
此任务需编写程序实现图像对间自动变形,具体步骤如下:
计算双向光流,可采用多帧(n > 2)技术处理遮挡区域; 为每个中间变形图像计算光流向量及最终合成所用图像; 融合图像并通过序列查看器查看。
可在朋友、同事图像或视频序列上测试,将结果与简单交叉淡入淡出比较。
10、实现一个算法,该算法应包含以下步骤:1. 计算准确的逐像素光流。2. 确定参考图像中哪些像素与其他帧有良好的匹配。3. 如果要补偿模糊,要么对所有匹配的像素求平均值,要么选择最清晰的图像。使用常规的单帧去噪技术。4. 为光流估计不够准确的区域设计一个备用策略。
该算法步骤可按以下方式实现:
运用合适的光流计算方法(如基于样条或逐像素的方法)计算准确的逐像素光流。 通过比较像素特征等方式确定参考图像中与其他帧有良好匹配的像素。 针对补偿模糊的情况,若选择平均匹配像素,可对匹配像素值求平均;若选择最清晰图像,可根据图像清晰度指标(如边缘清晰度等)挑选。同时进行单帧去噪。 对于光流估计不准确的区域,可采用相邻区域光流插值、使用低分辨率光流估计或保持原始像素值等备用策略。
11、简述将使用移动相机拍摄的场景视频序列分解为单独的图层的步骤
要将使用移动相机拍摄的场景视频序列分解为单独的图层,可按以下步骤操作:
找到一组主要运动,有分块计算或先找鲁棒估计再迭代拟合离群值两种方式。 确定与每个运动相关的像素。 混合不同帧的像素构建图层。 可选择添加每个像素的残余流或深度。 可选择使用迭代全局优化技术改进估计。 可选择编写交互式渲染器生成中间帧或从不同视角查看场景。 可选择从复杂场景构建展开的马赛克图并进行视频编辑。
12、拍摄一段透过窗户(或相框)的视频序列,若要去除反射以便更好地看清里面的情况,有哪些方法可以实现?
实现去除反射的方法,步骤可参考第9.4.2节和 Szeliski, Avidan, and Anandan (2000) 的文献,替代方法可参考以下研究:
Shizawa and Mase (1991) Bergen, Burt et al. (1992) Darrell and Simoncelli (1993) Darrell and Pentland (1995) Irani, Rousso and Peleg (1994) Black and Anandan (1996) Ju, Black and Jepson (1996)
13、请简述使用设置为手动对焦的数码单反相机(或允许编程控制对焦的相机)从对焦信息恢复物体深度的实验步骤,并说明使用正平行平面目标和倾斜目标哪种效果更好。
该实验步骤如下:
拍摄一些校准图像,例如棋盘格的图像,以便计算散焦量和对焦设置之间的映射关系。 尝试使用正平行平面目标和倾斜目标,使目标覆盖传感器的工作范围。 将一个真实物体放入场景中,并进行类似的对焦扫描。 对于每个像素,计算局部清晰度,并在对焦设置上拟合抛物线曲线,以找到最清晰的对焦设置。 将这些对焦设置映射到深度,并将结果与真实值进行比较。若使用已知的简单物体,如球体或圆柱体(球或汽水罐),很容易测量其真实形状。 (可选)看看能否仅从两三个对焦设置中恢复深度图。 (可选)使用液晶投影仪将人工纹理投射到场景中。使用一对相机比较基于对焦的形状恢复和基于立体视觉的形状恢复技术的准确性。 (可选)使用Agarwala、Dontcheva等人(2004年)的技术创建全对焦图像。
关于使用正平行平面目标和倾斜目标哪种效果更好,题目未提及。
14、实现Bouguet和Perona(1999年)提出的手持阴影条纹系统,其基本步骤有哪些?
Bouguet和Perona(1999年)手持阴影条纹系统的基本步骤
在感兴趣物体后方设置两个背景平面,利用基准标记等方法计算其相对于观察者的方向。 用棍子在场景投射移动阴影,通过摄像头录制视频或采集数据。 根据阴影在两个背景上的投影来估计每个光平面方程。 对每条曲线上其余点进行三角测量得到三维条纹,并用三维图形引擎显示。 (可选)不依赖已知的第二个(垂直)平面,运用Bouguet和Perona(1999年)的技术推断其或光源的位置,练习10.9的技术可能有帮助。
15、使用有符号距离场(Curless和Levoy,1996年;Hilton、Stoddart等人,1996年)或其较新的变体(Newcombe、Izadi等人,2011年;Hornung、Wurm等人,2013年;Nießner、Zollh¨ofer等人,2013年;Klingensmith、Dryanovski等人,2015年;Dai、Nießner等人,2017年;Zollh¨ofer、Stotko等人,2018年)合并已配准的数据集。使用移动立方体算法从有符号距离场中提取网格化的表面模型,并显示生成的模型。
该步骤主要是对已配准的数据集进行合并操作,可选用有符号距离场相关方法或其较新变体。之后利用移动立方体算法从有符号距离场中提取表面模型并展示结果。
16、请简述从一系列手持广角照片构建某个建筑结构(如房子)的3D室内或室外模型的步骤。
从一系列手持广角照片构建建筑结构3D模型的步骤
提取线条和消失点估计主导方向; 用运动恢复结构恢复相机位姿并匹配消失点; 用户绘制线条勾勒墙壁、开口和家具位置; 转换多边形网格为3D模型并可选择纹理映射。
17、结合相关技术,构建一个可以处理一系列照片或视频,并构建逼真的纹理映射3D模型的系统,需要用到哪些技术?
可以结合以下技术构建这样的系统:
利用基于模型的重建技术
– Urbanscan系统使用优化的在线运动恢复结构算法、平面扫描立体视觉的GPU实现以及深度图融合,从GPS装备车辆采集的视频中重建城市街道的纹理映射3D模型;
– Cornelis等人的系统结合平面扫描立体视觉、目标识别和分割技术;
– Mičušík等人利用全向图像和基于超像素的立体匹配技术;
– 还可以直接从主动距离扫描数据结合经过曝光和光照变化补偿的彩色图像进行重建。
采用摄影测量重建技术
– 已有许多基于计算机视觉技术开发的摄影测量重建系统可生成详细的纹理映射3D模型;
– 商业软件如Pix4D、Metashape、RealityCapture可从无人机航拍和地面摄影中重建大规模3D模型;
– Occipital的Canvas手机应用结合摄影测量和深度图融合技术。
运用图像基渲染技术
– 包括视图插值、视图相关纹理映射、光场和Lumigraph表示、视频基渲染等;
– 将计算机视觉的3D重建技术与计算机图形渲染技术相结合,创造交互式的逼真体验;
– 可辅助构建纹理映射3D模型。
18、在分析预训练网络的性能后,尝试在其原始训练数据集上重新训练该网络,但使用修改后的参数(层数、通道数、训练参数)或添加额外的示例。能否让网络的表现更符合期望?许多在线教程提供了如何在不同数据集上从头开始重新训练网络的说明,能否创建自己的数据集,例如通过网络搜索并弄清楚如何标注示例?训练网络,尝试优化其架构,并报告遇到的挑战和发现。
修改参数或添加示例重新训练网络有可能提升性能,但也面临 超参数调整困难 、 过拟合 等挑战。
创建自定义数据集可借助 网络搜索获取数据 ,使用 图像标注工具标注 ,训练时要 优化架构 ,可能遇到 训练时间长 、 硬件资源不足 等问题,还需 不断调整架构和参数 来提升性能。
19、下载 ImageNet 或 Imagenette 数据集。现在,通过在图像左上角添加一个小方块来扰动每张图像,其中每个标签对应的方块颜色是唯一的。使用任何图像分类模型,例如 ResNet、EfficientNet 或 ViT,在扰动后的图像上从头开始训练模型。模型是否会过度拟合方块的颜色而忽略图像的其余部分?在对训练和验证数据评估模型时,尝试在不同标签之间对抗性地交换颜色。
需按照题目要求进行实验操作来确定模型是否会过度拟合方块颜色以及交换颜色后的评估结果。
20、解释实例分割、语义分割和全景分割之间的区别。对于每种类型的分割,是否可以通过后处理得到其他类型的分割?
语义分割 :是对图像进行逐像素的类别标注; 实例分割 :是准确描绘出每个单独的物体; 全景分割 :则是对物体和背景都进行标注。
21、为以下每种数据类型提供自监督学习预训练任务的示例:静态图像、视频和视觉与语言。
静态图像自监督学习任务示例包括:
隐去图像块的相对位置 解决九宫格拼图 图像着色
视频自监督学习任务示例包括:
正确排列视频帧的时间顺序 将着色扩展到视频(给定第一帧颜色) 利用声音作为自监督的额外线索(如对齐视觉和音频信号)
22、你认为在什么情况下相位相关会比常规相关或SSD(平方差之和)表现更好?你能通过实验证明或从理论上进行解释吗?
若原始图像在窄频带受噪声污染(如低频噪声或峰值频率“嗡嗡声”),白化过程会有效降低这些区域的噪声影响,此时相位相关可能表现更好;
若原始信号在某些频率的信噪比极低(如两幅模糊或低纹理且含大量高频噪声的图像),白化过程会降低性能。
23、实现赫希米勒和沙尔施泰因(2009年)研究的一些额外技术,看看你的结果是否与他们的一致。
可按照以下步骤操作:
找到 Hirschmüller 和 Scharstein (2009) 的研究论文,了解他们所研究的额外技术; 依据论文中的描述实现这些技术; 将自己实现技术得到的结果与论文中的结果进行对比,判断是否一致。
24、实现一种用于仿射和投影图像对齐的从粗到细的直接方法,简述其实现步骤。
从粗到细的直接方法用于仿射和投影图像对齐
实现从粗到细的直接方法用于仿射和投影图像对齐的一般步骤如下:
图像预处理 :对输入的图像进行灰度化、平滑等预处理操作。 粗对齐 :选择一个初始的变换参数估计,可以通过特征匹配或简单的全局搜索来获得一个大致的对齐。 金字塔构建 :为了实现从粗到细的策略,构建图像金字塔,每一层图像的分辨率逐渐降低。 从粗到细迭代 :从金字塔的顶层(低分辨率)开始,使用直接方法(如最小化像素差异)来优化变换参数。将上一层优化得到的参数作为下一层的初始参数。 直接优化 :在每一层,使用优化算法(如梯度下降、牛顿法等)来最小化两幅图像之间的像素差异。 精对齐 :在金字塔的底层(原始分辨率)进行最终的优化,得到精确的对齐结果。 变换应用 :将最终的变换参数应用到待对齐的图像上,完成图像对齐。
在实际实现中,还需要考虑一些细节,如选择合适的像素差异度量、优化算法的收敛性、金字塔层数的选择等。此外,还可以结合一些加速技术,如多线程、GPU加速等,来提高算法的运行效率。
25、实现基于块的加速(参考Shum和Szeliski 2000年、Baker和Matthews 2004年的研究)
通常基于块的加速可能涉及图像分块、块特征提取、块匹配等技术,以提高算法的计算效率。
26、编写一个目标跟踪器,并在最新的视频目标跟踪数据集之一(Leal – Taixé, Milan等人,2015年;Kristan, Matas等人,2016年;Dave, Khurana等人,2020年;Kristan, Leonardis等人,2020年;Dendorfer, O˘sep等人,2021年)上进行测试。
以下是一般性步骤描述:
编写目标跟踪器可先选择合适的算法,如基于深度学习的 Siamese 网络等,使用 Python 和相关深度学习框架(如 PyTorch、TensorFlow)实现算法,包括模型定义、训练和推理过程。
测试时,从指定的数据集中选择一个,下载数据集并进行预处理,然后使用编写好的跟踪器对数据集中的视频进行目标跟踪,记录跟踪结果并使用评估指标(如准确率、召回率等)评估跟踪器性能。
27、使用迭代最近点(ICP)(Besl和McKay 1992年;Zhang 1994年;Gold、Rangarajan等人1998年)或八叉树有符号距离场(Szeliski和Lavallée 1996年)来配准两个或更多的3D数据集。将该技术应用于窄基线立体图像对,例如,通过围绕物体移动相机获取图像,使用运动恢复结构方法恢复相机位姿,并使用标准的立体匹配算法。
3D数据处理流程
可先使用 运动恢复结构 (SfM)算法处理窄基线立体图像对,恢复相机的位姿信息。
随后,使用标准的 立体匹配算法 得到视差图,进而生成3D点云数据。
对于3D数据集的配准,有两种常见方法:
ICP算法
– 交替进行以下步骤:
寻找两个待配准表面间的最近点匹配 求解3D绝对定向问题
八叉树有符号距离场方法
– 将其中一个点集转换为有符号距离函数
– 可选地使用八叉树样条进行紧凑表示,以:
加速最近点的确定 提高到表面距离计算的准确性