⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adaptive_filter.c

📁 JM 11.0 KTA 2.1 Source Code
💻 C
📖 第 1 页 / 共 5 页
字号:
/*!
************************************************************************
* \file adaptive_filter.c
*
* \brief
*    adaptive filter routines
*
* \author
*  Yuri Vatis               <vatis@tnt.uni-hannover.de>    \n
*
* This software may be used for research purposes only.
* Universitaet Hannover would also appreciate that all those using the 
* software or any extension of it in any way comply with the 
* following condition:
*    Including in any technical report, conference or journal paper
*    produced which uses the software or any extension of it in
*    any way, at least one of bibliographic references:
*    Yuri Vatis, Bernd Edler, Dieu Thanh Nguyen, J鰎n Ostermann,
*    "Motion-and Aliasing-compensated Prediction using a two-dimensional non-separable Adaptive Wiener Interpolation Filter",
*    Proc. ICIP 2005, IEEE International Conference on Image Processing, Genova, Italy, September 2005.
*    Yuri Vatis, Bernd Edler, Ingolf Wassermann, Dieu Thanh Nguyen, J鰎n Ostermann,
*    "Coding of Coefficients of two-dimensional non-separable Adaptive Wiener Interpolation Filter", 
*    Proc. VCIP 2005, SPIE Visual Communication & Image Processing, Beijing, China, July 2005.
************************************************************************
*/


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "defines.h"
#include "adaptive_filter.h"

#ifdef ADAPTIVE_FILTER
#include "global.h" 
#ifdef DIRECTIONAL_FILTER
#include <memory.h>
#include "../../lcommon/inc/adaptive_filter_1DAIF.h"
#include "../../lcommon/inc/adaptive_filter_orig.h"
#endif
#ifdef EIGHTH_PEL
#include "image.h"
#endif

double STANDARD_2D_FILTER[15][SQR_FILTER] = {
  {   0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  1.0/64.0  ,   -5.0/64.0  ,   52.0/64.0  ,   20.0/64.0  ,   -5.0/64.0  ,   1.0/64.0  ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0
  }, // a_pos
  {   0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  1.0/32.0  ,   -5.0/32.0  ,   20.0/32.0  ,   20.0/32.0  ,   -5.0/32.0  ,   1.0/32.0  ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0
  }, // b_pos
  {   0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  1.0/64.0  ,   -5.0/64.0  ,   20.0/64.0  ,   52.0/64.0  ,   -5.0/64.0  ,   1.0/64.0  ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    0.0       ,    0.0       ,   0.0
  }, // c_pos
  {   0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   52.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   20.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0
  }, // d_pos
  {   0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  1.0/64.0  ,   -5.0/64.0  ,   40.0/64.0  ,   20.0/64.0  ,   -5.0/64.0  ,   1.0/64.0  ,
  0.0       ,    0.0       ,   20.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0
  }, // e_pos
  {   1.0/2048.0,   -5.0/2048.0,   20.0/2048.0,   20.0/2048.0,   -5.0/2048.0,   1.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -100.0/2048.0, -100.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  52.0/2048.0, -260.0/2048.0, 1040.0/2048.0, 1040.0/2048.0, -260.0/2048.0,  52.0/2048.0,
  20.0/2048.0, -100.0/2048.0,  400.0/2048.0,  400.0/2048.0, -100.0/2048.0,  20.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -100.0/2048.0, -100.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  1.0/2048.0,   -5.0/2048.0,   20.0/2048.0,   20.0/2048.0,   -5.0/2048.0,   1.0/2048.0
  }, // f_pos
  {   0.0       ,    0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,   0.0       ,
  1.0/64.0  ,   -5.0/64.0  ,   20.0/64.0  ,   40.0/64.0  ,   -5.0/64.0  ,   1.0/64.0  ,
  0.0       ,    0.0       ,    0.0       ,   20.0/64.0  ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,   0.0
  }, // g_pos
  {   0.0       ,    0.0       ,    1.0/32.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/32.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   20.0/32.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   20.0/32.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/32.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    1.0/32.0  ,    0.0       ,    0.0       ,   0.0
  }, // h_pos
  {   1.0/2048.0,   -5.0/2048.0,   52.0/2048.0,   20.0/2048.0,   -5.0/2048.0,   1.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -260.0/2048.0, -100.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  20.0/2048.0, -100.0/2048.0, 1040.0/2048.0,  400.0/2048.0, -100.0/2048.0,  20.0/2048.0,
  20.0/2048.0, -100.0/2048.0, 1040.0/2048.0,  400.0/2048.0, -100.0/2048.0,  20.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -260.0/2048.0, -100.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  1.0/2048.0,   -5.0/2048.0,   52.0/2048.0,   20.0/2048.0,   -5.0/2048.0,   1.0/2048.0
  }, // i_pos
  {   1.0/1024.0,   -5.0/1024.0,   20.0/1024.0,   20.0/1024.0,   -5.0/1024.0,   1.0/1024.0,
  -5.0/1024.0,   25.0/1024.0, -100.0/1024.0, -100.0/1024.0,   25.0/1024.0,  -5.0/1024.0,
  20.0/1024.0, -100.0/1024.0,  400.0/1024.0,  400.0/1024.0, -100.0/1024.0,  20.0/1024.0,
  20.0/1024.0, -100.0/1024.0,  400.0/1024.0,  400.0/1024.0, -100.0/1024.0,  20.0/1024.0,
  -5.0/1024.0,   25.0/1024.0, -100.0/1024.0, -100.0/1024.0,   25.0/1024.0,  -5.0/1024.0,
  1.0/1024.0,   -5.0/1024.0,   20.0/1024.0,   20.0/1024.0,   -5.0/1024.0,   1.0/1024.0
  }, // j_pos
  {   1.0/2048.0,   -5.0/2048.0,   20.0/2048.0,   52.0/2048.0,   -5.0/2048.0,   1.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -100.0/2048.0, -260.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  20.0/2048.0, -100.0/2048.0,  400.0/2048.0, 1040.0/2048.0, -100.0/2048.0,  20.0/2048.0,
  20.0/2048.0, -100.0/2048.0,  400.0/2048.0, 1040.0/2048.0, -100.0/2048.0,  20.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -100.0/2048.0, -260.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  1.0/2048.0,   -5.0/2048.0,   20.0/2048.0,   52.0/2048.0,   -5.0/2048.0,   1.0/2048.0
  }, // i_pos
  {   0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   20.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   52.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0
  }, // l_pos
  {   0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,   20.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  1.0/64.0  ,   -5.0/64.0  ,   40.0/64.0  ,   20.0/64.0  ,   -5.0/64.0  ,   1.0/64.0  ,
  0.0       ,    0.0       ,   -5.0/64.0  ,    0.0       ,    0.0       ,   0.0       ,
  0.0       ,    0.0       ,    1.0/64.0  ,    0.0       ,    0.0       ,   0.0
  }, // m_pos
  {   1.0/2048.0,   -5.0/2048.0,   20.0/2048.0,   20.0/2048.0,   -5.0/2048.0,   1.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -100.0/2048.0, -100.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  20.0/2048.0, -100.0/2048.0,  400.0/2048.0,  400.0/2048.0, -100.0/2048.0,  20.0/2048.0,
  52.0/2048.0, -260.0/2048.0, 1040.0/2048.0, 1040.0/2048.0, -260.0/2048.0,  52.0/2048.0,
  -5.0/2048.0,   25.0/2048.0, -100.0/2048.0, -100.0/2048.0,   25.0/2048.0,  -5.0/2048.0,
  1.0/2048.0,   -5.0/2048.0,   20.0/2048.0,   20.0/2048.0,   -5.0/2048.0,   1.0/2048.0
  }, // n_pos
  {   0.0         ,    0.0         ,  0.0     ,    1.0/64.0  ,    0.0       ,   0.0       ,
  0.0         ,    0.0         ,  0.0     ,   -5.0/64.0  ,    0.0       ,   0.0       ,
  0.0         ,    0.0         ,  0.0     ,   20.0/64.0  ,    0.0       ,   0.0       ,
  1.0/64.0    ,   -5.0/64.0    , 20.0/64.0,   40.0/64.0  ,   -5.0/64.0  ,   1.0/64.0  ,
  0.0         ,    0.0         ,  0.0     ,   -5.0/64.0  ,    0.0       ,   0.0       ,
  0.0         ,    0.0         ,  0.0     ,    1.0/64.0  ,    0.0       ,   0.0
  } // o_pos
};
// separable aif (BEGIN)
static double STANDARD_2D_FILTER_SEP[15][SQR_FILTER] = {
  {1.0 / 64.0, -5.0 / 64.0, 52.0 / 64.0, 20.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // a_pos
  {1.0 / 32.0, -5.0 / 32.0, 20.0 / 32.0, 20.0 / 32.0, -5.0 / 32.0, 1.0 / 32.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // b_pos
  {1.0 / 64.0, -5.0 / 64.0, 20.0 / 64.0, 52.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // c_pos
  {1.0 / 64.0, -5.0 / 64.0, 52.0 / 64.0, 20.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // d_pos
  {1.0 / 64.0, -5.0 / 64.0, 52.0 / 64.0, 20.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // e_pos
  {1.0 / 64.0, -5.0 / 64.0, 52.0 / 64.0, 20.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // f_pos
  {1.0 / 64.0, -5.0 / 64.0, 52.0 / 64.0, 20.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // g_pos
  {1.0 / 32.0, -5.0 / 32.0, 20.0 / 32.0, 20.0 / 32.0, -5.0 / 32.0, 1.0 / 32.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // h_pos
  {1.0 / 32.0, -5.0 / 32.0, 20.0 / 32.0, 20.0 / 32.0, -5.0 / 32.0, 1.0 / 32.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // i_pos
  {1.0 / 32.0, -5.0 / 32.0, 20.0 / 32.0, 20.0 / 32.0, -5.0 / 32.0, 1.0 / 32.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // j_pos
  {1.0 / 32.0, -5.0 / 32.0, 20.0 / 32.0, 20.0 / 32.0, -5.0 / 32.0, 1.0 / 32.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // k_pos
  {1.0 / 64.0, -5.0 / 64.0, 20.0 / 64.0, 52.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // l_pos
  {1.0 / 64.0, -5.0 / 64.0, 20.0 / 64.0, 52.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // m_pos
  {1.0 / 64.0, -5.0 / 64.0, 20.0 / 64.0, 52.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // n_pos
  {1.0 / 64.0, -5.0 / 64.0, 20.0 / 64.0, 52.0 / 64.0, -5.0 / 64.0, 1.0 / 64.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0},       // o_pos
};
// separable aif (END)
int TwoDSymmetricPattern[15][SQR_FILTER]  =   // get one filter from another one, if symmetry properties are used (used e.g. in ExtendFilterCoefficients)
{
  { 0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,
  12, 13, 14, 15, 16, 17,        // a_pos  - not used actually
  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0  },
  { 0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,
  12, 13, 14, 14, 13, 12,        // b_pos
  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0  },
  { 0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,
  17, 16, 15, 14, 13, 12,        // c_pos
  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0  },
  { 0,  0, 12,  0,  0,  0,
  0,  0, 13,  0,  0,  0,
  0,  0, 14,  0,  0,  0,        // d_pos
  0,  0, 15,  0,  0,  0,
  0,  0, 16,  0,  0,  0,
  0,  0, 17,  0,  0,  0  },
  { 0,  1,  2,  3,  4,  5,
  1,  7,  8,  9, 10, 11,
  2,  8, 14, 15, 16, 17,        // e_pos
  3,  9, 15, 21, 22, 23,
  4, 10, 16, 22, 28, 29,
  5, 11, 17, 23, 29, 35  },
  { 0,  1,  2,  2,  1,  0,
  6,  7,  8,  8,  7,  6,
  12, 13, 14, 14, 13, 12,        // f_pos
  18, 19, 20, 20, 19, 18,
  24, 25, 26, 26, 25, 24,
  30, 31, 32, 32, 31, 30  },
  { 5,  4,  3,  2,  1,  0,
  11, 10,  9,  8,  7,  1,
  17, 16, 15, 14,  8,  2,        // g_pos
  23, 22, 21, 15,  9,  3,
  29, 28, 22, 16, 10,  4,
  35, 29, 23, 17, 11,  5  },
  { 0,  0, 12,  0,  0,  0,
  0,  0, 13,  0,  0,  0,
  0,  0, 14,  0,  0,  0,        // h_pos
  0,  0, 14,  0,  0,  0,
  0,  0, 13,  0,  0,  0,
  0,  0, 12,  0,  0,  0  },
  { 0,  6, 12, 18, 24, 30,
  1,  7, 13, 19, 25, 31,
  2,  8, 14, 20, 26, 32,        // i_pos
  2,  8, 14, 20, 26, 32,
  1,  7, 13, 19, 25, 31,
  0,  6, 12, 18, 24, 30  },
  { 0,  1,  2,  2,  1,  0,
  1,  7,  8,  8,  7,  1,
  2,  8, 14, 14,  8,  2,         // j_pos
  2,  8, 14, 14,  8,  2,
  1,  7,  8,  8,  7,  1,
  0,  1,  2,  2,  1,  0  },
  {30, 24, 18, 12,  6,  0,
  31, 25, 19, 13,  7,  1,
  32, 26, 20, 14,  8,  2,         // k_pos
  32, 26, 20, 14,  8,  2,
  31, 25, 19, 13,  7,  1,
  30, 24, 18, 12,  6,  0  },
  { 0,  0, 17,  0,  0,  0,
  0,  0, 16,  0,  0,  0,
  0,  0, 15,  0,  0,  0,         // l_pos
  0,  0, 14,  0,  0,  0,
  0,  0, 13,  0,  0,  0,
  0,  0, 12,  0,  0,  0  },
  { 5, 11, 17, 23, 29, 35,
  4, 10, 16, 22, 28, 29,
  3,  9, 15, 21, 22, 23,        // m_pos
  2,  8, 14, 15, 16, 17,
  1,  7,  8,  9, 10, 11,
  0,  1,  2,  3,  4,  5  },
  {30, 31, 32, 32, 31, 30,
  24, 25, 26, 26, 25, 24,
  18, 19, 20, 20, 19, 18,         // n_pos
  12, 13, 14, 14, 13, 12,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -