用前面的程序对一顺的图像的话,是这样的(83图):
如果把第二圈减掉一圈的距离,可能就可以用了
//根据前面估计,如果有10张图宽 就是1圈了。
//按重合1/3或2/3估计有15-30张 是1圈了
if(num>33 && abs(maxr-minl)>30)//这样的话应该一个方向转圈,这里检测(匹配)
{
bool 找到=false;float 差=0;
if(lr)//先考虑一个方向
{
int pp,ppmax=0;
for(unsigned int i=minl+15;i<num;i++)
{
Point2f a = getOffsetStitch(pp,minl,i);//取得匹配相对位移
cout << "内点数:"<<pp<< endl;
if(pp>50){
找到=true;
if(pp>ppmax){//更匹配的
ppmax=pp;
maxr=i;
差=a.x;
}
else if(找到==true)
break;
}
}
//重新调整位置
if(找到==true)
{
float l=position_da[maxr].x-position_da[minl].x;
l-=差;//还是l+=差 呢?
cout<<"1圈长:"<<l<<endl;
for(unsigned int i=maxr+1;i<num;i++)
{
int k=0;
while(position_da[i].x-position_da[minl].x>l){//大于一圈长的减掉
position_da[i].x-=l;
if(++k>4)break;//大于4可能出错了
}
}
}
}
}
把这段加到前面的找一圈头尾的后面:
加上,和减去差值,效果相差一点点
左边为什么会没有匹配到呢?
用时 201.696 秒, 3 分多一点。
对未匹配的前或后一张再匹配一次:
稍稍好点了,用时 237.508 秒,快4分钟了。
前面绘制大图有重复,这里把图像分圈绘制:
int k=0;
while(position_da[i].x-position_da[minl].x>l){//大于一圈长的减掉
圈[i]++;
position_da[i].x-=l;
if(++k>4)break;//大于4可能出错了
}
用时 216.038 秒,小一点点。