1. 程式人生 > >c語言數字影象處理(三):仿射變換

c語言數字影象處理(三):仿射變換

 1 void bilinera_interpolation(short** in_array, short height, short width, 
 2                             short** out_array, short out_height, short out_width)
 3 {
 4     double h_times = (double)out_height / (double)height,
 5            w_times = (double)out_width / (double)width;
 6     short  x1, y1, x2, y2, f11, f12, f21, f22;
7 double x, y; 8 9 for (int i = 0; i < out_height; i++){ 10 for (int j = 0; j < out_width; j++){ 11 x = j / w_times; 12 y = i / h_times; 13 x1 = (short)(x - 1); 14 x2 = (short)(x + 1); 15 y1 = (short)(y + 1); 16 y2 = (short
)(y - 1); 17 f11 = is_in_array(x1, y1, height, width) ? in_array[y1][x1] : 0; 18 f12 = is_in_array(x1, y2, height, width) ? in_array[y2][x1] : 0; 19 f21 = is_in_array(x2, y1, height, width) ? in_array[y1][x2] : 0; 20 f22 = is_in_array(x2, y2, height, width) ? in_array[y2][x2] : 0
; 21 out_array[i][j] = (short)(((f11 * (x2 - x) * (y2 - y)) + 22 (f21 * (x - x1) * (y2 - y)) + 23 (f12 * (x2 - x) * (y - y1)) + 24 (f22 * (x - x1) * (y - y1))) / ((x2 - x1) * (y2 - y1))); 25 } 26 } 27 }