예제 #1
0
/*
 * Maximum Up-Sampling
 *
 * source:   matrix to be upsampled
 * stride:   sampling window size
 * retnMask: mask generated by maxDownSample()
 */
mat maxUpSample(mat source, int stride, const mat& retnMask){
 
    dbg_assert(source.is_square());
    dbg_assert(retnMask.is_square());
    dbg_assert((retnMask.n_rows / source.n_rows) == stride);
    dbg_assert((retnMask.n_rows % stride) == 0);

    int source_size = source.n_rows;
    int result_size = retnMask.n_rows;
    mat result      = zeros<mat>(result_size, result_size);

    for(int row=0; row < source_size; row++){
        for(int col=0; col < source_size; col++){
            int row_start = row * stride;
            int col_start = col * stride;
            result.submat(
                     row_start, 
                     col_start,
                     row_start + stride - 1,
                     col_start + stride - 1
                   ) = retnMask.submat(
                                  row_start, 
                                  col_start, 
                                  row_start + stride - 1,
                                  col_start + stride - 1
                                ) * source(row, col);
        }
    }
    
    return(result);
       
}