for (l = 1; l <= sxy; l++) { i = x_curr + xoff - l; j = y_curr + yoff - l; for (k = 0; k < 8*l; k++) { if (i>=ilow && i<=ihigh && j>=jlow && j<=jhigh) { ii = search_area + (i-ilow) + (j-jlow)*h_length; sad = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]); if (sad < Min_FRAME[0]) { MV_FRAME[0].x = i - x_curr; MV_FRAME[0].y = j - y_curr; Min_FRAME[0] = sad; } } if(k<2*l) i++; else if (k<4*l) j++; else if (k<6*l) i--; else j--; } }改为对数搜索算法
时间: 2024-04-07 20:32:25 浏览: 15
如果要将Diamond Search算法改为对数搜索算法,可以按照以下步骤进行:
1. 将搜索区域分成若干个小块,每个小块的大小为2的n次方,n为正整数。
2. 选择一个中心点作为起始点,将搜索区域分成四个子区域。
3. 对于每个子区域,分别计算其中心像素与参考帧块之间的SAD值,选择SAD值最小的子区域作为下一步搜索的区域。
4. 将搜索区域继续分成四个子区域,重复步骤3,直到达到预定的搜索精度或者搜索区域大小小于一个阈值。
对数搜索算法的优点是可以大幅减少搜索点的数量,从而提高搜索速度。不过,由于搜索区域的划分方式会影响搜索精度和速度,需要根据具体的应用场景进行调整。
相关问题
将这段代码改为对数搜索for (l = 1; l <= sxy; l++) { i = x_curr + xoff - l; j = y_curr + yoff - l; for (k = 0; k < 8*l; k++) { if (i>=ilow && i<=ihigh && j>=jlow && j<=jhigh) { ii = search_area + (i-ilow) + (j-jlow)*h_length; sad = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]); if (sad < Min_FRAME[0]) { MV_FRAME[0].x = i - x_curr; MV_FRAME[0].y = j - y_curr; Min_FRAME[0] = sad; } } if(k<2*l) i++; else if (k<4*l) j++; else if (k<6*l) i--; else j--; } }
下面是将这段代码改为对数搜索的修改版:
```c
for (l = 1; l <= sxy; l++) {
i = x_curr + xoff - l;
j = y_curr + yoff - l;
for (k = 0; k < 8*l; k++) {
if (i >= ilow && i <= ihigh && j >= jlow && j <= jhigh) {
ii = search_area + (i - ilow) + (j - jlow) * h_length;
sad = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]);
sad_log = log(sad + 1); // 对SAD进行对数变换
if (sad_log < Min_FRAME_log[0]) {
MV_FRAME[0].x = i - x_curr;
MV_FRAME[0].y = j - y_curr;
Min_FRAME_log[0] = sad_log; // 记录最小的对数SAD
}
}
if(k < 2 * l) i++;
else if (k < 4 * l) j++;
else if (k < 6 * l) i--;
else j--;
}
}
```
在修改后的代码中,新增了一个变量sad_log,用于记录经过对数变换后的SAD值。对数变换的目的是将SAD的取值范围从[0,∞)缩小到[0,log(MAX_SAD)],这样可以增强算法对于低SAD值的敏感度,避免在搜索过程中过多地关注到大SAD值的点,从而提高搜索效率。同时,对数变换的计算量相对较小,也不会影响算法的实时性能。最后,在记录最小的SAD值时,需要将对数SAD值转换回原始SAD值。
将这段全搜索代码改为对数搜索for (l = 1; l <= sxy; l++) { i = x_curr + xoff - l; j = y_curr + yoff - l; for (k = 0; k < 8l; k++) { if (i>=ilow && i<=ihigh && j>=jlow && j<=jhigh) { ii = search_area + (i-ilow) + (j-jlow)h_length; sad = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]); if (sad < Min_FRAME[0]) { MV_FRAME[0].x = i - x_curr; MV_FRAME[0].y = j - y_curr; Min_FRAME[0] = sad; } } if(k<2l) i++; else if (k<4l) j++; else if (k<6*l) i--; else j--; } }
下面是将这段全搜索代码改为对数搜索的修改版:
```c
for (l = 1; l <= sxy; l++) {
i = x_curr + xoff - l;
j = y_curr + yoff - l;
for (k = 0; k < 8 * l; k++) {
if (i >= ilow && i <= ihigh && j >= jlow && j <= jhigh) {
ii = search_area + (i - ilow) + (j - jlow) * h_length;
sad = SAD_Macroblock(ii, act_block, h_length, Min_FRAME[0]);
sad_log = log(sad + 1); // 对SAD进行对数变换
if (sad_log < Min_FRAME_log[0]) {
MV_FRAME[0].x = i - x_curr;
MV_FRAME[0].y = j - y_curr;
Min_FRAME_log[0] = sad_log; // 记录最小的对数SAD
}
}
i = x_curr + xoff - l + (k + 1) / 2 * ((k % 2 == 0) ? 1 : -1);
j = y_curr + yoff - l + (k + 1) / 2 * (((k + 1) % 4 <= 1) ? 1 : -1);
}
}
```
在修改后的代码中,同样新增了一个变量sad_log,用于记录经过对数变换后的SAD值。对数变换的目的与前面相同,将SAD的取值范围缩小,提高搜索效率。同时,在全搜索中,每个运动矢量只需要计算一次SAD值即可,因此对数变换的计算量不会对算法的实时性能造成影响。
另外,由于全搜索中的运动矢量是按照顺序依次遍历的,因此在对数搜索中需要手动计算每个运动矢量的坐标,即使用代码中新增的计算公式。在计算过程中,需要注意运动矢量的坐标必须落在搜索区域内,否则会出现越界错误。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)