一顺拼图

用前面的程序对一顺的图像的话,是这样的(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 秒,小一点点。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值