根据四个角点计算其他点的值.使之平均

原理大致就是靠近那个点.就对那个点权重大一点..

 

 

原理不多说,直接看一个简单示例:

比如知A,B,C,D 四个角点的坐标.要求出图上点(第二行第三列点..)的 x 坐标.

point.x = x1 * ((6-2)/6) * ((3-1)/3)     // 6 是x 方向有六段.3是y方向有三..这里求出受左上角点的权重影响

            + X2 * (2/6) * ((3-1)/3)           // 这里求出受右上角点的权重影响

           + X3 *  ((6-2)/6) * (1/3)         // 这里求出受左下角点的权重影响

          + X4 * (2/6) * (1/3);

 

 

// =================================================================================================
// 功能:局部平均, 可以看作对X1_, X2, Y1_, Y2 四点围成的区域作平均
//
// 返回值:true --- 执行成功, false --- 执行失败.
bool CProjectionOpt::realParticalAverage(int X1_, int X2_, int Y1_, int Y2_)
{
	// 对局部里面的网格平均
	{
		int minX = (X1_ < X2_) ? (X1_) : (X2_);
		int maxX = (X1_ < X2_) ? (X2_) : (X1_);	
		int minY = (Y1_ < Y2_) ? (Y1_) : (Y2_);
		int maxY = (Y1_ < Y2_) ? (Y2_) : (Y1_);


       // 四个角点保持不变.. 其他的点根据这四个点来计算位置
		for (int i = minX; i <= maxX; ++i)	 // 列
		{
			for (int j = minY; j <= maxY; ++j)	 // 行
			{
				CvPoint ptTopLeft = m_GridPoints[minY][minX];
				CvPoint ptTopRight = m_GridPoints[minY][maxX];
				CvPoint ptBottomLeft = m_GridPoints[maxY][minX];
				CvPoint ptBottomRight = m_GridPoints[maxY][maxX];

				m_GridPoints[j][i].x = 
					(ptTopLeft.x) * ((maxX - i)/(double(maxX - minX))) * ((maxY - j)/(double(maxY - minY)))	 // 受左上角点影响的权重
					+  (ptBottomLeft.x) * ((maxX - i)/(double(maxX - minX))) * ((j - minY)/(double(maxY - minY))) // 受左下角点影响的权重
					+  (ptTopRight.x) * ((i - minX)/(double(maxX - minX))) * ((maxY - j)/(double(maxY - minY)))	   // 受右上角点影响的权重
					+  (ptBottomRight.x) * ((i - minX)/(double(maxX - minX))) * ((j - minY)/(double(maxY - minY)));	 // 受右下角点影响的权重


				m_GridPoints[j][i].y = 	
					(ptTopLeft.y) * ((maxX - i)/(double(maxX - minX))) * ((maxY - j)/(double(maxY - minY)))	 
					+  (ptBottomLeft.y) * ((maxX - i)/(double(maxX - minX))) * ((j - minY)/(double(maxY - minY)))
					+  (ptTopRight.y) * ((i - minX)/(double(maxX - minX))) * ((maxY - j)/(double(maxY - minY)))
					+  (ptBottomRight.y) * ((i - minX)/(double(maxX - minX))) * ((j - minY)/(double(maxY - minY)));

			}
		}  
		
	}		
	return true;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值