📄 sanbusousuo.java
字号:
int[][] transform(int[] pixel, int width, int height) {
int i, j;
int[][] tmp = new int[width][height];
try {
for (i = 0; i < width; i++) {
for (j = 0; j < height; j++) {
tmp[i][j] = pixel[i * width + j];
}
}
} catch (Exception e) {
e.printStackTrace();
// throw new Exception(e);
}
return tmp;
}
int SAD_block(int[][] ii, int[][] act_block, int h_length, int h_width) {
int i, j;
int sad = 0;
int[][] kk;
kk = act_block;
for (i = 0; i < h_length; i++) {
for (j = 0; j < h_width; j++) {
sad += Math.abs(ii[i][j]) - (kk[i][j]);
}
}
return sad;
}
int max1(int i, int j) {
return ((i - j > 0) ? i : j);
}
int min1(int i, int j) {
return ((i - j > 0) ? j : i);
}
int[][] loadArea(int[][] pixel, int x, int y, int height, int width) {
int i, j;
int[][] p = new int[height][width];
for (i = 0; i < width; i++) {
for (j = 0; j < height; j++) {
p[i][j] = pixel[x + i][y + j];
}
}
return p;
}
int EBMA(int[][] current, int[][] referenced, int R, int height,
int width) {
int[][] curr;
int[][] ref;
int x, y, a, b;
int n = 0;
for (x = 0; x <= (width - 16); x += 16) {
for (y = 0; y <= (height - 16); y += 16) {
int sad = 0,best_x=0,best_y=0, ret = 0x7FFFFFFF;
curr = loadArea(current, x, y, 16, 16);
for (a = max1(x - R, 0); a < min1(x + R, width - 16); a++) {
for (b = max1(y - R, 0); b < min1(y + R, height - 16); b++) {
ref = loadArea(referenced, a, b, 16, 16);
sad = SAD_block(curr, ref, 16, 16);
if(ret>sad){
ret = sad;
best_x=a;
best_y=b; //增加2个整形变量记录坐标,避免重复创建MV对象的开销
}
}
mv[n] = new MV(x, y, best_x, best_y);
}
n++;
}
}
return 1;
}
int sanbuSearch(int width,int height)
{
int x=0,y=0,i=0,j=0,tmp=0,ret = 0x7FFFFFFF;
for(x=8;x<=width-8;x++)
for(y=8;y<=height-8;y++)
{
curr = loadArea(current, x, y, 16, 16);
for(a=x-8;a<=x+8;a+=8)
for(b=y-8;b<=y+8;b+=8)
{
ref=loadArea(referenced,(a)
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -