在仿照别人的论文进行复现,这一项是没有改变的,也就是保留了原有的传统的几何相关项。
那么,对于几何相关项,有如下问题:
(1)什么是几何相关项?
(2)如何计算
(3)代表了什么意义
(1)什么是几何相关项?
几何相关项专门设计用于基于视频的立体重建,以确保恢复的深度图的时间一致性和处理遮挡。我们借鉴zhang等人在2009年提出的几何相关项的计算方法。与典型的多视角立体方法不同,该方法不仅强加颜色一致性约束,以统计方式将几何相关性与多个帧明确关联。它们有助于可靠地减少图像噪声和多帧数据遮挡的影响,从而使我们的优化不受过度平滑或混合伪影的影响。它会检查相邻帧中每一像素点与所对应的共轭像素的距离。
(所谓共轭像素,其实也就是我们之前所说的一个像素点在相邻帧中所对应的像素点。)
我们可以直观地思考一下,在视频的邻近帧中,像素点与其共轭像素点的空间距离肯定是非常小的(考虑到现实中其实每一帧的时间是非常短的),这可以作为一个权值来衡量立体重建的效果。
(2)如何计算
公式3.9
其中是第t帧中具有逆深度像素点的共轭像素在帧中的位置,与公式3.8提到的相同。让计算机自动建立多幅图像之间的匹配关系其实是立体重建最困难的一个问题。可以看出,这项是为了评估立体重建后的深度图中,每个像素点和邻近帧所对应的像素点的距离关系,在此,我们可以简单的使用街区距离来衡量,当然也可以使用欧式距离。
(3)代表了什么意义
在视频序列中,因为如果在相邻帧中出现了较大的像素位移,而照相机显然是在非常缓慢移动的过程中,这个位移较大的点往往是误差导致的。所以我们用几何相关项来评估这个误差的大小。
(4)代码流程:
#define ROW 500 // Hight
#define COL 600 // Wide
bool MapFun(int& row, int& col, int ToMap, int MapOutCome) //Map a dot to another dot in other frame
// Maped location stored in parameters row and col, and Return Ture if it map successfully
int RGB[FRAME][ROW][COL][3];
#define R 0
#define G 1
#define B 2
int N = 5;
int main()
{
int ActualNei = 0;
double Sum = 0 ;
for(int t = 0; t < FRAME; t++)
{
double TempSum = 0;
for(int tt = max(0,t - N); tt <= t + N; tt++, ActualNei++)
{
if(tt == t) continue; // Do not compare with itself
for(int r = 0 ; r < Row; r++)
{
for(int c = 0 ; c < COL; c++)
{
int MapR = r, MapC = c;
if(MapFun(MapR,MapC,tt,t)) // pass-by-reference
{
//block distance
TempSum += (MapR - r) + (MapC - c);
}
}
}
}
Sum += TempSum / (ActualNei - 1);
}
}