源码为C++,所以安装使用时需要提前安装Cpython。如果有错一直找不到原因的朋友可以试试安装Cpython。
这两个函数都是crf中从一元势升级二元势的函数。
一元势是一个像素自身的能量,二元势是两个相邻像素之间的能量。二元势即用于描述像素点和像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同的标签。
//sx,sy为坐标
//The compat argument can be any of the following:
// A number, then a PottsCompatibility is being used.
// A 1D array, then a DiagonalCompatibility is being used.
// A 2D array, then a MatrixCompatibility is being used.
//Possible values for the kernel argument are:
// CONST_KERNEL
// DIAG_KERNEL (the default)
// FULL_KERNEL
//Possible values for the normalization argument are:
// NO_NORMALIZATION
// NORMALIZE_BEFORE
// NORMALIZE_AFTER
NORMALIZE_SYMMETRIC (the default)
void DenseCRF2D::addPairwiseGaussian ( float sx, float sy, LabelCompatibility * function, KernelType kernel_type, NormalizationType normalization_type ) {
MatrixXf feature( 2, N_ );//建立一个2行N列的矩阵
for( int j=0; j<H_; j++ )
for( int i=0; i<W_; i++ ){
feature(0,j*W_+i) = i / sx;
feature(1,j*W_+i) = j / sy;
}//矩阵第一行是该像素横坐标在矩阵中的位置,第二行是纵坐标的
addPairwiseEnergy( feature, function, kernel_type, normalization_type );//把特征矩阵加入像素间能量对象中
}
//该函数仅用于RBG三通道的图片,其他图片如灰度图可以使用上个函数
void DenseCRF2D::addPairwiseBilateral ( float sx, float sy, float sr, float sg, float sb, const unsigned char* im, LabelCompatibility * function, KernelType kernel_type, NormalizationType normalization_type ) {
MatrixXf feature( 5, N_ );
for( int j=0; j<H_; j++ )
for( int i=0; i<W_; i++ ){
feature(0,j*W_+i) = i / sx;
feature(1,j*W_+i) = j / sy;
feature(2,j*W_+i) = im[(i+j*W_)*3+0] / sr;
feature(3,j*W_+i) = im[(i+j*W_)*3+1] / sg;
feature(4,j*W_+i) = im[(i+j*W_)*3+2] / sb;
}//新加入rgb的定义
addPairwiseEnergy( feature, function, kernel_type, normalization_type );
}