기준 좌표계에 대해서 원점을 이동하고 좌표축을 회전시킨 새로운 좌표계에서 점의 좌표는 바뀐다. 원래의 좌표와 바뀐 좌표값 사이의 관계를 주는 변환이 Isometric transformation (isometry)이다. 평면에서 이 변환은 평행이동을 나타내는 파라미터 2개, 그리고 1개의 회전각 파라미터에 의해서 결정이 된다. 회전각이 θ고, 평행이동이 (tx,ty)인 isometry에 의해서 두 점 (x,y)가 (u,v)로 연결이 되는 경우에, 아래의 식으로 표현이 된다:
u=cos(θ)x−sin(θ)y+tx
v=sin(θ)x+cos(θ)y+ty;
따라서 isometry로 연결이 되는 두 점의 조합 {(x1,y1)→(u1,v1),(x2,y2)→(u2,v2)} 만 있으면 이들 파라미터를 정확히 결정할 수 있다. 그러나 변환에 필요한 점 정보를 얻는 과정은 필연적으로 노이즈의 영향을 받게 되므로 주어진 모든 점을 정확히 연결하는 변환을 일반적으로 구할 수 없다. 이 경우에는 isometry 파라미터는 일반적으로 최소자승법에 의해서 결정될 수 있다.
최소자승법을 사용하기 위해서는 회전각 θ보다는 a=cosθ, b=sinθ로 정의된 새로운 파라미터로 식을 표현하는 것이 더 편리하다. 그러나 이 경우에 파라미터 a,b는 서로 독립적이 아니고 a2+b2=1의 제한 조건을 만족시켜야 한다.
평행이동 파라미터는 질량중심의 isometry 관계로 해결이 되므로, 이 전체 계산을 각각의 질량중심을 원점으로 하는 좌표로 옮겨서 적용하면 더 이상 평행이동을 고려할 필요 없이 회전만 계산하면 된다.
최소자승법의 원리에 따라 입력점의 isometry 결과와 대응점 사이의 거리의 제곱 합 L을 주어진 제약조건 내에서 최소화시키는 파라미터 a,b,λ를 찾으면 된다:
L=∑i[(axi−byi−ui)2+(bxi+ayi−vi)2]+λ(a2+b2−1);
여기서 λ는 제한 조건 a2+b2=1를 넣기 위한 Lagrange multiplier이다. 극값을 찾기 위해서 L를 각각 a,b,λ에 대해서 미분해서 다음 조건을 얻는다:
∑i(axi−byi−ui)xi+(bxi+ayi−vi)yi+λa=0
∑i(axi−byi−ui)(−yi)+(bxi+ayi−vi)xi+λb=0
a2+b2=1
이 식들을 a,b,λ에 대해서 풀면 다음의 관계식을 얻는다:
a=∑(xiui+yivi)/∑(x2i+y2i+λ)
b=∑(xivi−yiui)/∑(x2i+y2i+λ) 또한, Lagrange 멀티플라이어 λ는
A=∑(xiui+yivi)
B=∑(xivi−yiui);
로 놓으면, a2+b2=1 에서
∑(x2i+y2i+λ)=√A2+B2;
임을 쓰면 된다. 따라서 회전각은
cosθ=a=A√A2+B2
sinθ=b=B√A2+B2;
로 주어진다.
질량중심을 빼기 전 좌표 (x,y)의 질량중심과 (u,v)의 질량중심은 서로 isometry에 의해서 연결이 되므로, 이 관계에서 평행이동 파라미터 (tx,ty)는 결정이 된다: (xc,yc)→(uc,vc)
2차원 이미지의 기하학적인 변형 중에서 평행이동, 회전 및 전체적인 크기의 변화를 주는 변환이 similarity transformation이다. 이 변환은 두 직선이 이루는 각을 보존하고 길이 비를 유지한다. 따라서 similarity 변환 후 물체의 모양은 변환 전과 같은 형태를 가진다. 이 변환보다도 더 일반적인 2차원의 기하학적인 변환은 affine transformation이다. Affine 변환은 한쪽 방향으로의 밀림(sheer)도 허용한다. 평행한 두 직선은 affine 변환 후에도 여전히 평행하다.
Hierarchy of 2d transformation
Similarity transformation은 전체적인 크기를 바꾸는 scale parameter(s) 1개와 회전각(θ) 1개, 그리고 x,y축으로의 평행이동을 나타내는 parameter (tx, ty) 2 개를 합해서 총 4개가 있어야 한다. 이 parameter에 의해서 원본 이미지의 픽셀 (x,y)가 변환된 이미지의 픽셀 (u,v)에 대응한다고 하면, 이들 간의 관계는 다음식으로 주어진다.
u=scos(θ)x−ssin(θ)y+tx
v=ssin(θ)y+scos(θ)y+ty
따라서 원본 영상의 2점에 대응하는 정보만 주어지면 파라미터 (s,θ,tx,ty)를 유일하게 결정할 수 있다.
(x1,y1)→(u1,v1)
(x2,y2)→(u2,v2)
그러나 많은 경우에는 기준점을 잡는데 에러 등을 고려하여서 일반적으로 원본 영상의 N(≥2) 개의 점에 대응하는 정보를 주게 되는데, 이 경우에 변환 관계식은 overdetermined 되어서 해를 구할 수 없는 경우도 있다. 이 경우에는 최소자승법을 써서 변환점과 변환식에 의해서 의해서 주어지는 값의 차이를 최소화시키는 파라미터를 구해서 쓰면 된다.
boolSimilarTransParams(double x1, double y1, double x2, double y2,
double u1, double v1, double u2, double v2,
double ST[4]){
double x21 = x2 - x1, y21 = y2 - y1;
double u21 = u2 - u1, v21 = v2 - v1;
double det = x21 * x21 + y21 * y21;
if (det == 0.) returnfalse;
double a = (x21 * u21 + y21 * v21) / det ;
double b = (x21 * v21 - y21 * u21) / det ;
double tx = u1 - a * x1 + b * y1;
double ty = v1 - b * x1 - a * y1;
ST[0] = a; ST[1] = b; ST[2] = tx; ST[3] = ty;
returntrue;
};
얼굴인식용 training data set을 만들기 위해서 얼굴을 정렬시키는 데 사용한 예: - 양 눈의 위치 변환: (70,93), (114, 84) --> (30,45), (100,45)로 변환( linear interpolation사용) - 실제로 사용되는 변환은 정해진 dst영역으로 매핑하는 src영역을 찾아야 하므로, 역변환이 필요하다. - 필요한 역변환은 src와 dst의 역할만 바꾸면 쉽게 구할 수 있다.
RANSAC 알고리즘을 써서 주어진 2차원 점집합에서 원을 추정한다. 원을 만들기 위해서는 최소한 3점이 필요하고, 또 일직선에 있지 않아야 한다. 이렇게 만들어진 원은 세 점을 꼭짓점으로 하는 삼각형의 외접원(circumcircle)이다. 주어진 외접원에서 크게 벗어나지 않는 inliers를 찾는다(추가로 이 inliers에 대해 최소자승법으로 원의 중심과 반지름을 다시 구해서 보다 정밀하게 추정하는 과정을 넣을 수도 있다). 무작위로 선택된 세 점에 대해 위의 과정을 반복 시행해서 구한 원 중에서 가장 많은 inliers를 포함하는 원을 결과로 사용한다.