DASC的project和code参考:https://seungryong.github.io/DASC/
DASC含义
在一张影像中,像素i的DASC是在4040的空间中多次计算。每次计算,采样两个55的方格(记为patch s和patch t),然后计算这两个patch的相似度C(s,t)作为像素i的特征之一;
采样方式
在4040的区域内,采样两个55的方格比较,有很多的选择。这里采用有监督的训练方式(SVM)来得到最佳的选择
计算DASC描述符
公式说明:
在一张影像中,像素i的DASC是在4040的空间中多次计算。每次计算,采样两个55的方格(记为patch s和patch t),然后计算这两个patch的相似度C(s,t)作为像素i的特征之一;
其中C(s,t)的计算方式为:
s’和t’是指patch s和patch t中的对应位置,∑是指依次遍历patch s和patch t中对应位置(共5*5=25个位置);Ws,s’指的patch s中,s’位置的像素值与s的相似度,即|Vs’-Vs|;(fs’-Gs)(ft‘-Gt)类似于计算向量间的余弦相似性;
整体可以理解为:patch s和patch t中所有像素构成向量,计算含权重的余弦相似性;权重为该像素与中心像素的相似度。
exp(-(1-||))表示两个向量越相关(无论正相关还是负相关),相似度越高;越不相关,相似度越小
为了快速计算,可以把公式简化为:
其中:
即上述几个参数都可以用GF的方式来获取(Guided Image Filtering),参考https://www.cnblogs.com/riddick/p/8367591.html
the weighted average of fj’ with a guidance image of fi’.
GF:当参考图像为I,输入图像为p,输出的图像记为q
通过最小化能量函数得到的结果为:
总结:可以江DASC描述符化简为为引导滤波的形式来计算
按照上述公式计算得到q
guidedfilter_runfilter(I, I, I_adaptive_mean, preco, runf, param, param_sub)
然后再按照公式10和公式8计算得到由于patch s和patch t构成的特征。
分别计算各个G
guidedfilter_runfilter(I, I, I_adaptive_mean, preco, runf, param, param_sub);
guidedfilter_runfilter(I, II, II_adaptive_mean, preco, runf, param, param_sub);
guidedfilter_runfilter(I, J, J_adaptive_mean, preco, runf, param, param_sub);
guidedfilter_runfilter(I, JJ, JJ_adaptive_mean, preco, runf, param, param_sub);
guidedfilter_runfilter(I, IJ, IJ_adaptive_mean, preco, runf, param, param_sub);
计算C作为特征
if (i1 > 0 && i1 < param->row && j1 > 0 && j1 < param->col)
{
ind = i1 + param->row*j1;
num_corrSurf = IJ_adaptive_mean[ind] - I_adaptive_mean[ind] * J_adaptive_mean[ind];
dem_left = II_adaptive_mean[ind] - I_adaptive_mean[ind] * I_adaptive_mean[ind];
dem_right = JJ_adaptive_mean[ind] - J_adaptive_mean[ind] * J_adaptive_mean[ind];
dem_corrSurf = sqrt(dem_left*dem_right);
if( dem_corrSurf > 1e-10)
fout[i + param->row*(j + param->col*s)] = exp(-(1-num_corrSurf/dem_corrSurf)/0.5);
else
fout[i + param->row*(j + param->col*s)] = 1;
}