光流算法中为了找到匹配的块,可以使用螺旋搜索的图案,那么如何生成这个图案呢,一下opencv中一段代码:
// use spiral search pattern // // 9 10 11 12 // 8 1 2 13 // 7 * 3 14 // 6 5 4 15 //... 20 19 18 17 // for( i = 0; i < min_count; i++ ) { // four cycles along sides int x = -i-1, y = x; // upper side for( j = -i; j <= i + 1; j++, ss_count++ ) { ss[ss_count].x = ++x; ss[ss_count].y = y; } // right side for( j = -i; j <= i + 1; j++, ss_count++ ) { ss[ss_count].x = x; ss[ss_count].y = ++y; } // bottom side for( j = -i; j <= i + 1; j++, ss_count++ ) { ss[ss_count].x = --x; ss[ss_count].y = y; } // left side for( j = -i; j <= i + 1; j++, ss_count++ ) { ss[ss_count].x = x; ss[ss_count].y = --y; } }
经本人修改后,顺次连接这些点可以打印出一下图案:
即从这个漩涡的中心开始顺时针遍历周围的像素,从而找到最佳匹配块的首次出现位置。