점집합을 일반적인 2차 곡선으로 피팅하는 경우에 방정식은
의 계수를 주어진 데이터를 이용하여서 구해야 한다. 실제 문제에서는 타원, 포물선 쌍곡 선등의 타입에 따라 몇 가지 제약 조건을 넣어 피팅을 한다. 원은 타원의 특별한 경우로 일반적으로
문제: 주어진 데이터를 fitting 하는 이차곡선(원)
의 계수
주어진 점집합이 원 위의 점이면 우변이 0이 되어야 하나, 실제 데이터를 얻는 과정에서 여러 노이즈에 노출되므로 일반적으로 0이 되지 않는다. 최소자승법은 주어진 점들이 원에서 벗어나는 정도의 제곱 합이 최소가 되도록 하는 계수
의 극값을 찾기 위해서
이 연립방정식을 풀면
계에서 계산을 하자. 이를 위해 입력점의
그러면 질량중심 좌표계에서는
우선 세 번째 식에서
을 얻을 수 있고, 첫번째와 두 번째 식에서는 각각
을 얻을 수 있다. 이를 풀면
여기서 주어진 데이터의 각 차수에 해당하는 moment는 아래처럼 계산된다:

추정된 원의 중심
로 주어지고, 반지름은
로 주어진다.
Ref: I. Kasa, A curve fitting procedure and its error analysis. IEEE Trans. Inst. Meas., 25:8-14, 1976
/* 구현 코드: 2024.04.01, typing error 수정 & 질량중심계 계산으로 수정;*/
double circleFit_LS(std::vector<CPoint> &Q, double &cx, double &cy, double &radius) {
if (Q.size() < 3) return -1;
double sx2 = 0.0, sy2 = 0.0, sxy = 0.0;
double sx3 = 0.0, sy3 = 0.0, sx2y = 0.0, sxy2 = 0.0;
double mx = 0, my = 0; /* center of mass;*/
for (int k = Q.size(); k-->0;)
mx += Q[k].x, my += Q[k].y;
mx /= Q.size(); my /= Q.size();
/* compute moments; */
for (int k = Q.size(); k-->0;) { /* offset (mx, my)*/
double x = Q[k].x - mx, xx = x * x;
double y = Q[k].y - my, yy = y * y;
sx2 += xx; sy2 += yy; sxy += x * y;
sx3 += x * xx; sy3 += y * yy;
sx2y += xx * y; sxy2 += yy * x;
}
double det = sx2 * sy2 - sxy * sxy;
if (fabs(det) < 1.e-10) return -1; /*collinear한 경우임;*/
/* center in cm frame; */
double a = sx3 + sxy2;
double b = sy3 + sx2y;
cx = (sy2 * a - sxy * b) / det / 2;
cy = (sx2 * b - sxy * a) / det / 2;
/* radius squared */
double radsq = cx * cx + cy * cy + (sx2 + sy2) / Q.size();
radius = sqrt(radsq);
cx += mx; cy += my; /* recover offset; */
return fitError(Q, cx, cy, radius);
}

Circle Fitting: Pratt
주어진 점집합을 원으로 피팅하기 위해 이차식
kipl.tistory.com
RANSAC: Circle Fit
RANSAC 알고리즘을 써서 주어진 2차원 점집합에서 원을 추정한다. 원을 만들기 위해서는 최소한 3점이 필요하고, 또 일직선에 있지 않아야 한다. 이렇게 만들어진 원은 세 점을 꼭짓점으로 하는 삼
kipl.tistory.com
'Image Recognition > Fundamental' 카테고리의 다른 글
PCA Line Fitting (0) | 2020.11.12 |
---|---|
Histogram Equalization (0) | 2020.11.12 |
Integer Sqrt (0) | 2020.11.11 |
Parabolic Interpolation in Peak Finding (3) | 2020.11.10 |
Histogram Matching (0) | 2012.11.03 |