/* * 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); }