private Point[] refine_center(Point[] last_center, Image<Gray, Byte> img)
{
Point[] center = last_center.Clone() as Point[];
for (int iter = 0; iter < 3; iter++)
{
for (int i = 0; i < 2; i++)
{
Rectangle ROI = new Rectangle(Math.Max(center[i].X - 50,0),Math.Max( center[i].Y - 50,0),Math.Min(center[i].X+50,img.Width),Math.Min(center[i].Y+50,img.Height));
ROI.Width -= ROI.X;
ROI.Height -= ROI.Y;
try
{
Emgu.CV.CvInvoke.cvSetImageROI(img, ROI);
if (img.GetMoments(false).GravityCenter.x > 0)
{
center[i].X = ROI.X + (int)img.GetMoments(false).GravityCenter.x;
center[i].Y = ROI.Y + (int)img.GetMoments(false).GravityCenter.y;
}
}
catch { }
Emgu.CV.CvInvoke.cvResetImageROI(img);
}
}
return center;
}