下采样fine to coarse时,不断的2:1下采样得到T、平均值下采样I
上采样coarse to fine时,不断重复“某层T和J双边滤波、上采样得到finer层J”这个过程。在coarsest level(最底层时),J=I,J与T双边滤波得到IT,IT上采样得到J;在(coarser level)在上一层J与IT双边得到IT,IT上采样。
上采用中没有用以往最近领域、双线插值等,而是用adaptive upsampling上采样,这也是本文最不好懂的地方,关键是下面这个公式(本人也有疑惑,如有愿意一起研究的,可联系QQ:76565122)。
原文如下:finer 层的“图像J”利用coarser level双边结果和finer level的均值图象I一起插值得到,插值中将finer level中T作为导向图。 问题来了,
在(16)中并没有。
作者给出代码的插值部分代码如下:
// 插值 upsampling ??
if(s<(m_Scale-1))
{
int hs=m_hs[s+1];
int ws=m_ws[s+1];
int hs1=hs-1;
int ws1=ws-1;
unsigned char***image_lower_resolution=m_images[s+1];
// loop finer level pixels
for(int y=0;y<h;y++)
{
for(int x=0;x<w;x++)
{
int ys=(y>>1); // got coarser pixel location
int xs=(x>>1);
// x,y 大图中位置(包括奇数和偶数),ys,xs 小图中位置,xs=x/2, ys=y/2
// hs ws 下图尺寸
if(ys<hs&&xs<ws)
{ // texture_s是2:1下采样结果 image_s:均值下采样
int dist_rgb=euro_dist_rgb_max(m_textures[s][y][x],m_textures[s+1][ys][xs]);
double weight_for_lower_resolution=m_table[dist_rgb];
double weight_for_larger_resolution=1-weight_for_lower_resolution;
for(int i=0;i<m_Channel;i++)
{
double sum_weight=weight_for_larger_resolution; // 权重
double sum_value = image_s[y][x][i] * weight_for_larger_resolution + weight_for_lower_resolution * m_weighted_image[s+1][ys][xs][i];
image_s[y][x][i]=int(sum_value/sum_weight+0.5);
}
}
}
}
}
注意:
对fine level 而言, 那么
是什么含义呢,第一个coarse level重构的?T和
是上一层下采样结果并为本层的输入,对于第一层(0层)而言,输入就是原始输入没有上一层给他下采样得到,因此
。
Hardware-Efficient Bilateral Filtering for Stereo Matching 一文的理解
原文:https://www.cnblogs.com/jianhonggan/p/12626470.html