颜色一致性项

photo-consistency, 这是立体重建过程中的一个术语,看到部分参考资料翻译为颜色一致性项。

那么,(1)什么是颜色一致性项

           (2)它是如何计算的?这是怎么来的?

           (3)它代表了什么意义?

(1)什么是颜色一致性项

       在立体重建中,颜色一致性 f(p, V) 是一种标量函数用于测量给定三维重建 p 与一组图像 V 的视觉兼容性。在3D处的简单颜色一致性函数被定义如下:将投影到中的每个可见图像中,并且将它们投影附近的图像纹理的相似度计算为颜色一致性。不是比较每个图像中的单个像素颜色,而是比较每个局部图像区域中的一组像素颜色的差异大小。

颜色一致性项_第1张图片

(2)它是如何计算的?

    计算的基础是得到了每一帧的逆深度图

(a) 找到第 i 帧的点 x 在第 j 帧的位置:

按照多视觉立体重建的原理,对于第 帧的每一个像素点x,其逆深度为那么可以通过以下公式将其投影到第帧,得到其在第帧的相应位置:

        公式3.1

(b)求和,即计算每一帧 相对于 其邻近帧 的颜色一致性项 的和,总大小就是视频序列的颜色一致性项的大小

       公式3.2

其中是第t帧的邻近帧数,是邻近帧集合的大小。


注意: 1. 这里的核心算法是 映射到另外一帧,找到位置

    2.取多大?

   3.颜色一致性项是局部区域,这个局部区域是多大?九宫格吗?

(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
					{
						// 九宫格,RGB差异求和
						for(int l = -1 ; l < 1; l++)
						{
							for(u = -1; u < 1; u++)
 								for(u = -1; u < 1; u++)
									for(int Channel = R; u <= B; Channel++)
										tempSum += abs(RGB[t][MapR+l][MapC+u][Channel] - RGB[tt][r+l][c+u][Channel]);							
						}
					}
				}
			}
		}
		Sum += TempSum / (ActualNei - 1);
	}
}	


你可能感兴趣的:(本科毕业设计)