int diff_pic(unsigned char *logo_img_sample, int pyr_i, const MyImage &img_pic, int start_r, int start_c, int end_r, int end_c) { unsigned char *Ybuf_pic = img_pic.getYbuf(); int block_unit = 8; int block_len = pyr_i * BLOCK_SIZE; int error = 0; for(int i = start_r; i < end_r; i += block_unit) { for(int j = start_c; j < end_c; j += block_unit) { int min_mse = (1 << 31) - 1; for(int row = 0; row < block_len; row += block_unit) { for(int col = 0; col < block_len; col += block_unit) { int block_err = 0; for(int blc_i = 0; blc_i < block_unit; blc_i++) { for(int blc_j = 0; blc_j < block_unit; blc_j++) { int diff = logo_img_sample[(row + blc_i) * block_len + col + blc_j] - Ybuf_pic[(i + blc_i) * img_pic.getWidth() + j + blc_j]; block_err += diff * diff; } } if(block_err < min_mse) min_mse = block_err; } } error += min_mse; } } return error / (block_len / 8) / (block_len / 8); }