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

📄 sanbusousuo.java

📁 运动 估计 快速 算法 之一 :三步搜索
💻 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 + -