提取激光条纹中心

导师交给的项目,其中一步就是求光斑的重心,网上有很多关于重心的代码,大体是利用cvFindContour函数找出图像的轮廓,然后将图像阈值分割,二值化处理。这样处理后图像的灰度值只有0和1两个值,丢失了很多灰度信息,这样找出来的重心实际上是轮廓几何图形的形心,灰度值的影响并没有反应出来。

  下面介绍一下灰度重心法:

  对于亮度不均与的目标,灰度重心法可按目标光强分布求出光强权重质心坐标作为跟踪点,也叫密度质心算法。对于衣服M*N大小的图像f,像素的灰度值凡超过阈值T的均参与重心处理,于是重心坐标为:
 

 

Xi表示第i行的坐标,Xj表示第j行的坐标,f(i,j)表示第i行第j列的像素值。

CvPoint grayCenter(IplImage* TheImage)
{
	//灰度重心法求质心
	CvPoint Center;
	int i, j;
	CvScalar cs = cvSum(TheImage);
	Center.x = Center.y = 0;
	double x = 0;
	double y = 0;
	for(i = 0;i < TheImage->width;i++)
	{
		for(j = 0; j < TheImage->height;j++)
		{
			CvScalar s = cvGet2D(TheImage, j,i);
			x += i*s.val[0]/cs.val[0];
			y += j*s.val[0]/cs.val[0];
		}
	}
	Center.x = cvRound(x);
	Center.y = cvRound(y);
 
	return Center;
}


From:opencv图像灰度重心算法

猜你喜欢

转载自blog.csdn.net/tony2278/article/details/88744613
今日推荐