Finding an Images Contours Centroid
-
21-06-2021 - |
Question
I am trying to calculate an image centroid like so:
// Calculate centroid
double signedArea = 0.0;
sskp_point centroid;
for(int i=0;i<numPoints;i++)
{
double a = (points[i].x*points[(i+1)%numPoints].y)-(points[(i+1)%numPoints].x*points[i].y);
signedArea += a;
centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a;
centroid.y += (points[i].y*points[(i+1)%numPoints].y)*a;
printf("points[%d] = { %f, %f }\n",i,points[i].x,points[i].y);
}
signedArea /= 2.0;
centroid.x /= (6*signedArea);
centroid.y /= (6*signedArea);
printf("centroid = { %f, %f }\n",centroid.x,centroid.y);
I have adapted this from the algorithm here, however it is giving me the wrong results, can anyone tell me what is wrong with this adaptation?
La solution
You have written centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a;
instead it should be centroid.x += (points[i].x+points[(i+1)%numPoints].x)*a;
you have to replace *
with +
here.
Autres conseils
I looked a little into the thread you took this sample and i think that you should have centroid.x += (points[i].x + points[(i+1)%numPoints].x)*a; centroid.y += (points[i].y + points[(i+1)%numPoints].y)*a;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow