
점 네 개면 충분하다
동전 하나로는 기울어진 사진을 바로잡을 수 없다. 종이에 ArUco 마커 네 개를 붙이면 원근 변환(호모그래피)으로 사진을 펼 수 있고, 합성 사진에서 기울기 오차는 7.7%p에서 0.08%p로 줄었다. 그래도 남는 오차, 특히 사진만으로는 알아챌 수 없는 인쇄 배율 문제와, 그것을 잡으려고 설계한 마커 시트 v1을 소개한다.
지난 글에서는 동전 하나로 배율을 잡는 방법이 어디서 틀리는지 따져 봤다. 휴대폰이 종이와 평행하지 않고 5°만 기울어도, 크기가 똑같은 입자들이 사진 속 자리에 따라 9%p 가까이 다르게 잡혔다. 그런데 그 정도 기울기에서 동전은 0.4%밖에 찌그러지지 않아서, 동전을 보고 기울기를 알아챌 수도 없었다. 동전이 주는 정보는 사실상 숫자 하나, 배율뿐이기 때문이다.
언스페셜티의 칼럼 「분쇄도 가이드 개발기」(2023)는 종이에 마커를 네 개 붙여 이 문제를 풀었다. 이번 글은 그 방법을 처음부터 다시 짚는다. 점이 왜 넷이어야 하는지, 마커는 그 점을 어떻게 알려 주는지, 네 점으로 사진을 펴면 오차가 실제로 얼마나 줄어드는지를 본다. 그리고 원근 변환이 끝내 고치지 못하는 오차가 무엇인지도 본다. 마지막에는 직접 설계한 마커 시트를 내려받아 인쇄할 수 있게 해 두었다.
바닥의 판석이 먼저 보여 준 것
이탈리아 우르비노의 마르케 국립미술관에 「이상 도시」라는 그림이 있다. 1480년대에 그려진 것으로 추정되고, 한때 피에로 델라 프란체스카의 작품으로 여겨졌지만 지금은 작가를 모른다.

「이상 도시」(1480년대 추정, 마르케 국립미술관). 광장 바닥의 판석 무늬는 실제로는 정사각형과 대각선으로 이뤄져 있지만, 그림에서는 안쪽으로 갈수록 납작한 사다리꼴이 된다. 그림: 작가 미상 / Wikimedia Commons (퍼블릭 도메인)
광장 바닥은 평평한 면 하나다. 화가는 그 면을 캔버스라는 또 다른 평면에 옮겼다. 앞쪽의 판석은 크고 안쪽의 판석은 작다. 바닥에서 나란했던 선들은 그림에서 한 점으로 모인다. 그래도 곧은 선은 그림에서도 곧은 선이다. 휘어지지 않는다.
평면 하나를 다른 평면으로 옮기는 원근 변환이 바로 이렇게 움직인다. 컴퓨터 비전에서는 이 변환을 호모그래피(homography)라고 부른다. 커피 가루를 흩어 놓은 종이도 평면이고, 휴대폰 센서도 평면이다. 기울어진 카메라로 찍은 종이 사진은 「이상 도시」의 바닥과 같은 처지에 있다. 정사각형이 사다리꼴이 되고, 가까운 쪽 입자가 크게 찍힌다.
거꾸로 생각하면 길이 보인다. 변환이 어떻게 생겼는지 알아내면, 그 역변환으로 사진을 위에서 내려다본 모양으로 되돌릴 수 있다. 바닥 판석의 원래 모양을 알면 그림 속 사다리꼴을 다시 정사각형으로 펼 수 있는 것과 같다.
미지수 여덟 개, 점 네 개
호모그래피는 3×3 행렬 하나로 쓴다. 종이 위의 점 (x, y)에 이 행렬을 곱하면 사진 속 점 (u, v)가 나온다. 행렬에는 숫자가 아홉 개 있지만, 행렬 전체에 같은 수를 곱해도 결과가 같다. 그래서 숫자 하나는 1로 고정해 두고, 남은 여덟 개만 알면 된다.

종이 위 위치를 아는 점 하나를 사진에서 찾으면 식이 두 개 생긴다. 사진 속 가로 좌표 u에 대해 하나, 세로 좌표 v에 대해 하나다. 미지수가 여덟 개이니 점이 네 개면 식이 여덟 개가 되어 행렬이 정해진다. 언스페셜티 칼럼이 "점이 적어도 네 개 필요하다"고 한 근거가 이것이다. 다만 네 점 가운데 셋이 한 직선 위에 있으면 안 된다. 그러면 식이 서로 겹쳐서 실제로는 미지수를 다 풀 수 없다.
동전 하나는 이 여덟 개 가운데 하나밖에 알려 주지 못한다. 동전 테두리를 잘 재서 타원의 모양까지 쓴다 해도 몇 개를 더 얻을 뿐이고, 지난 글에서 본 것처럼 그 정보는 작은 기울기에서 거의 보이지 않는다.
점이 네 개보다 많으면 어떻게 할까. 식이 미지수보다 많아지면 모든 식을 정확히 만족하는 답은 없다. 대신 전체 오차가 가장 작은 답을 고른다(최소제곱). 점마다 조금씩 섞인 측정 오차가 서로 상쇄되면서 답이 안정된다. 이때 좌표를 그대로 넣으면 픽셀 값(수천)과 1이 한 식에 섞여 계산이 불안정해지므로, 좌표를 먼저 원점 근처로 옮기고 크기를 맞춘 뒤 푸는 것이 표준이다(Hartley 1997). OpenCV의 findHomography 같은 함수가 이 과정을 해 준다.
점을 알려 주는 무늬
식은 간단하다. 어려운 것은 사진 속에서 점을 찾는 일이다. 사진 한 장에서 종이의 어느 점이 어느 픽셀에 찍혔는지를 사람 손을 거치지 않고, 그것도 픽셀보다 정밀하게 찾아야 한다. 이 일을 하려고 만든 것이 기준 마커(fiducial marker)다.
기준 마커는 증강현실 분야에서 먼저 자리를 잡았다. 카메라 화면에 가상 물체를 얹으려면 카메라가 어디서 어느 방향을 보고 있는지 매 순간 알아야 하기 때문이다. 1999년에 나온 ARToolKit은 굵은 검은 테두리 안에 그림을 넣은 마커를 썼다(Kato & Billinghurst 1999). 그 뒤로 테두리 안을 흑백 칸으로 채워 숫자를 새기는 방식이 퍼졌다. 로봇 분야에서 많이 쓰는 AprilTag(Olson 2011)와 이 글에서 쓰는 ArUco(Garrido-Jurado 외 2014)가 그런 예다.

컴퓨터 비전에서 쓰는 기준 마커 몇 가지. 그림: Cmglee / Wikimedia Commons (CC BY-SA 4.0)
ArUco 마커 한 장은 두 가지를 알려 준다.

*OpenCV의 DICT_4X4_50 사전 0번 마커. 사전 안의 비트 거리는 OpenCV에 들어 있는 사전을 꺼내 직접 셌다*
첫째는 점의 위치다. 마커의 검은 테두리는 흰 종이 위에서 또렷한 사각형을 만든다. 검출 알고리즘은 사진에서 사각형 윤곽을 찾고, 네 변을 직선으로 맞춘 뒤 그 교점을 꼭짓점으로 삼는다. 직선은 수십~수백 픽셀에 걸친 경계에서 맞추기 때문에 교점을 픽셀 하나보다 잘게 찾을 수 있다. 이를 서브픽셀 정밀도라고 한다.
둘째는 그 점이 누구인지다. 테두리 안쪽 4×4칸은 16비트 숫자다. 이 숫자로 몇 번 마커인지, 그리고 마커가 어느 쪽으로 돌아가 있는지를 안다. 종이 네 모서리에 서로 다른 번호의 마커를 붙여 두면, 사진 속 사각형 하나하나가 종이의 어느 모서리인지 저절로 정해진다. 점의 짝을 사람이 맞춰 줄 필요가 없다.
16비트로는 무늬를 65,536가지 만들 수 있지만, DICT_4X4_50 사전에는 50개만 들어 있다. 서로 헷갈리지 않는 것만 골랐기 때문이다. 직접 세어 보니 이 사전의 마커들은 다른 마커와도, 자기 자신을 90°씩 돌린 모양과도 최소 4비트가 달랐다. 그래서 칸 하나를 잘못 읽어도 가장 가까운 마커로 고쳐 읽을 수 있고, 엉뚱한 번호로 읽히거나 위아래가 뒤집혀 읽힐 가능성이 낮다. ArUco 원 논문은 이런 사전을 원하는 크기로 만들어 내는 방법을 다룬다(Garrido-Jurado 외 2014).
꼭짓점은 얼마나 정확히 찾나
마커의 꼭짓점을 얼마나 정확히 찾는지 알려면 정답을 아는 사진이 필요하다. 실제 사진에서는 꼭짓점의 참값을 알 수 없으니, 지난 글의 핀홀 카메라 모델로 사진을 직접 만들었다. 이 글 끝에 소개할 마커 시트를 4032×3024픽셀 휴대폰 메인 카메라로 15 cm 위에서 찍었다고 보고, 사진에 약간의 흐림(1픽셀)과 잡음을 넣었다. 그다음 OpenCV의 ArUco 검출기로 꼭짓점을 찾아 참값과 비교했다.
서브픽셀 보정을 끈 상태에서 꼭짓점 오차는 평균 제곱근(RMS)으로 0.7~0.9픽셀이었다. 보정을 켜면 0.25픽셀로 줄었다(모델 추정). 이 거리에서 마커 한 변(12 mm)은 사진에서 약 240픽셀이다.
꼭짓점이 0.25픽셀 틀리면 측정은 얼마나 틀릴까. 같은 모델에서 꼭짓점 위치에 잡음을 일부러 넣고 원근 변환을 200번씩 다시 추정해 봤다. 기울기 5°, 꼭짓점 오차가 0.3픽셀일 때 측정 창 안의 배율 오차는 200번 가운데 95%가 0.03% 안에 들었다. 마커마다 꼭짓점 네 개씩 16점을 다 쓴 경우다. 바깥쪽 꼭짓점 네 개만 쓰면 0.05%였다. 꼭짓점 오차가 2픽셀로 커져도 16점일 때 0.17%, 4점일 때 0.31%에 그친다.
마커를 얼마나 멀리 떨어뜨려 붙이느냐도 영향을 준다. 마커 중심 사이 간격이 72 mm에서 144 mm로 넓어지면 같은 조건의 오차가 0.057%에서 0.037%로 줄었다. 점들이 넓게 퍼져 있을수록 기울기를 더 확실하게 잡기 때문이다.
마커가 일단 제대로 찍히면 꼭짓점을 찾는 정밀도는 더 이상 걸림돌이 아니라는 뜻이다. 실제 사진은 JPEG 압축, 휴대폰의 선명도 보정, 종이 표면의 번들거림 때문에 합성 사진보다 나쁠 것이다. 그래도 꼭짓점 오차가 몇 배로 커지는 정도로는 결론이 바뀌지 않는다.
펴 보면
이제 사진 전체를 펴 보자. 같은 합성 사진의 측정 창 안에 지름 4.000 mm 원판 96개를 늘어놓았다. 커피 입자 대신 크기를 정확히 아는 시험용 입자다. 카메라는 5° 기울이고 시트는 10° 돌려 두었다.

왼쪽 사진에서 원판들을 지난 글의 방식대로 쟀다. 사진 한가운데의 배율 하나를 모든 원판에 적용하는 방법이다. 오른쪽은 마커 네 개의 꼭짓점 16개로 원근 변환을 추정해 편 사진에서 잰 것이다.

합성 사진 시험. 원판 경계는 OpenCV의 Otsu 임계값으로 갈랐다. 이 연재의 계산이다
기울기 5°에서 배율 하나로 잰 원판 지름은 3.843~4.151 mm에 퍼졌다. 가장 작게 잰 원판과 가장 크게 잰 원판이 7.7%p 벌어진다. 마커로 편 뒤에는 3.989~3.993 mm, 범위가 0.08%p로 줄었다. 10°에서는 차이가 더 크다. 배율 하나로는 15.4%p였고, 편 뒤에는 0.10%p였다.
10° 사진에서는 왼쪽 아래 마커의 모서리가 화면 아래 끝 밖으로 나가 검출되지 않았다. 남은 마커 세 개에서 꼭짓점 12개를 얻었고, 그것으로도 충분했다. 꼭짓점 네 개만 있으면 되니, 마커 하나가 가루에 덮이거나 화면 밖으로 나가도 측정을 이어 갈 수 있다. 마커 네 개에는 하나쯤 잃어도 되는 여유가 들어 있는 셈이다.
한 가지 짚어 둘 것이 있다. 편 뒤에 잰 지름의 평균은 3.991 mm로 참값보다 0.2% 작다. 원판 96개가 모두 똑같이 작게 나왔으니 배율 문제가 아니다. 흐릿한 경계에서 입자와 배경을 어디서 가르느냐에서 생기는 차이다. 원근 변환은 이것까지 고쳐 주지 않는다.
아래 시뮬레이션에서 직접 조건을 바꿔 볼 수 있다. 왼쪽은 카메라에 찍힌 사진이고 원판 색은 가운데 배율 하나로 잰 오차다. 오른쪽은 빨간 십자로 표시한 마커 꼭짓점으로 편 사진이다. 기울기와 꼭짓점 검출 오차를 바꿔 보고, 아래쪽의 인쇄 배율, 렌즈 왜곡, 마커 들뜸도 바꿔 보자. 오른쪽 그림을 누르면 검출 오차를 새로 뽑는다.
원근 변환이 고치지 못하는 것
기울기 오차가 사라졌다고 측정이 끝난 것은 아니다. 호모그래피는 "평평한 종이를 바늘구멍 카메라로 찍었다"는 가정 위에서만 정확하다. 이 가정이 깨지는 곳마다 오차가 남는다. 높이 15 cm, 기울기 5°를 기준으로 하나씩 계산했다(모두 모델 추정).

렌즈 왜곡. 호모그래피는 곧은 선을 곧은 선으로 보낸다. 렌즈의 방사 왜곡은 곧은 선을 휘게 하니, 평면 변환 하나로는 지울 수 없다. 휴대폰이 소프트웨어로 보정하고 난 뒤에도 사진 모서리에 1%의 술통형 왜곡이 남아 있다고 하면, 펴낸 측정 창 안에서 위치에 따라 −0.15%에서 +0.52%까지 차이가 난다. 왜곡은 사진 가운데에서 멀어질수록 빠르게 커지므로, 카메라를 조금 높여 시트를 화면 가운데에 작게 담으면 줄어든다. 같은 조건에서 높이를 20 cm로 올리면 범위가 0.67%p에서 0.38%p로 준다. 대신 픽셀 하나가 덮는 크기가 커진다.
종이가 평평하지 않을 때. 호모그래피는 종이 위 모든 점이 한 평면에 있다고 가정한다. 종이 끝이 말려서 마커 하나가 1 mm 떠 있으면, 그 마커의 꼭짓점들이 실제보다 카메라에 가까운 위치에서 찍힌다. 변환은 이 어긋난 점들을 평면 위의 점으로 믿고 맞추니, 측정 창 전체가 비틀린다. 계산해 보니 위치에 따라 −0.48%에서 +0.19%까지 차이가 났다. 측정 창 가운데가 1 mm 볼록하게 떠 있으면 그 부분 입자들이 최대 0.69% 크게 잡힌다. 지난 글의 동전 두께와 같은 원리다. 높이 차이를 카메라 거리로 나눈 값, 1 mm ÷ 150 mm = 0.67%만큼 커진다.
인쇄 배율. 가장 큰 오차가 여기서 나온다. 호모그래피는 마커가 종이 위 설계한 자리에 정확히 인쇄됐다고 믿는다. 그런데 프린터 설정에서 '페이지에 맞춤'이 켜져 있으면 프린터가 전체를 조금 줄여서 인쇄한다. 예를 들어 A4(210×297 mm)로 만든 문서를 미국식 Letter 용지(215.9×279.4 mm)에 맞춰 넣으려면 세로가 297 mm에서 279.4 mm로 줄어야 하므로 전체가 94.1%로 작아진다. 반대로 Letter 문서를 A4에 맞추면 97.3%가 된다.
이렇게 줄어든 시트로 찍으면 측정 창 안의 모든 입자가 6.3%(또는 2.8%) 크게 잡힌다. 문제는 사진만으로는 이것을 전혀 알 수 없다는 점이다. 94.1%로 인쇄된 시트도 평평하고 반듯한 직사각형이다. 마커끼리의 비율도 그대로다. 원근 변환이 보기에는 아무 이상이 없는, 조금 작은 종이일 뿐이다. 기울기와 달리 사진 속 정보로 스스로 알아챌 방법이 없다. 사진 밖에서 크기를 아는 물건을 가져와 대 보는 수밖에 없다.
프린터가 가로와 세로를 다르게 늘이거나 줄일 가능성도 있다. 종이를 밀어 넣는 방향과 잉크 헤드가 움직이는 방향은 기구가 다르기 때문이다. 이 차이가 실제로 얼마나 되는지는 이번에 확인하지 못했다. 그래서 아래 마커 시트에는 가로와 세로를 따로 확인하는 자를 넣었다.
마커 시트 v1
이렇게 따져 본 결과를 마커 시트 한 장으로 정리했다. 칼럼의 100 mm 정사각형 배치를 그대로 가져오지 않고, 위의 계산을 근거로 다시 설계했다.

설계에서 정한 것은 이렇다.
- 마커 크기 12 mm, 4×4 사전. 칸이 6×6이라 칸 하나가 2 mm다. 15 cm 높이에서 칸 하나가 약 40픽셀로 찍혀 넉넉하게 읽힌다. 칸이 더 잘게 나뉜 사전(5×5, 6×6)은 번호를 더 많이 담지만, 같은 크기로 인쇄하면 칸이 작아져 읽기 어렵다. 이 시트에는 번호가 네 개만 있으면 된다
- 마커 중심 간격 144×104 mm. 휴대폰 사진은 가로세로 4:3이고, 15 cm 높이에서 약 200×150 mm를 담는다. 마커를 사진 비율에 맞춰 직사각형으로 벌려 두면, 화면을 크게 쓰면서도 마커 바깥에 여백이 남는다. 간격이 넓을수록 꼭짓점 오차의 영향도 줄어든다
- 측정 창 120×80 mm, 마커와 6 mm 떨어짐. 마커 둘레에 흰 여백이 있어야 테두리가 또렷하게 잡힌다. 가루가 마커에 닿으면 검출이 실패할 수 있다
- 카드 윤곽 85.60×53.98 mm. 신용카드, 교통카드, 신분증은 국제 표준(ISO/IEC 7810 ID-1)으로 크기가 정해져 있다. 어느 집에나 있고 크기가 정확한 물건이다. 인쇄한 시트의 윤곽 위에 카드를 올려 네 변이 선과 맞는지 보면 인쇄 배율을 바로 확인할 수 있다. 94.1%로 인쇄됐다면 카드가 가로로 5.1 mm 삐져나온다. 1 mm 어긋남은 가로로 1.2%, 세로로 1.9%에 해당한다
- 가로 자와 세로 자 각 100 mm. 쇠자와 대 보면 카드보다 정밀하게 볼 수 있다. 두 방향을 따로 확인하는 것은 위에서 말한 가로세로 배율 차이 때문이다
- 흑백, 무광 종이. 광택지는 조명을 반사해서 마커 칸을 하얗게 날려 버릴 수 있다
인쇄 페이지는 브라우저에서 바로 인쇄할 수 있게 만들었다. 크롬에서 PDF로 저장해 다시 재 보니 A4 한 장에 마커 중심 간격이 143.99×104.01 mm로 설계값과 맞았다. 다만 실제 프린터로 뽑아서 휴대폰으로 찍어 본 검증은 아직 하지 않았다. 집에 있는 프린터마다 결과가 다를 수 있으니, 인쇄한 뒤에는 꼭 카드부터 대 보기를 권한다.
정리
- 기울어진 카메라로 찍은 종이는 평면에서 평면으로 가는 원근 변환(호모그래피)을 겪는다. 이 변환은 미지수가 8개라서 위치를 아는 점 네 개면 정해진다
- ArUco 마커는 꼭짓점의 위치와 그 점이 어느 모서리인지를 함께 알려 준다. 합성 사진에서 서브픽셀 보정을 켜면 꼭짓점 오차가 약 0.25픽셀이었다
- 꼭짓점 16점으로 사진을 펴면 기울기 5°에서 원판 크기 범위가 7.7%p에서 0.08%p로, 10°에서 15.4%p에서 0.10%p로 줄었다. 마커 하나가 빠져도 결과는 거의 같았다
- 원근 변환은 렌즈 왜곡, 종이의 들뜸, 인쇄 배율은 고치지 못한다. 앞의 둘은 1% 안쪽이지만, '페이지에 맞춤' 인쇄는 모든 입자를 3~6% 키우고 사진만 봐서는 알아챌 수 없다
- 그래서 마커 시트 v1에는 카드 윤곽과 두 방향의 자를 넣었다. 인쇄한 뒤 카드부터 대 보면 된다
동전에서 마커로 바꾸면서 문제의 성격이 바뀌었다. 지난 글의 오차는 카메라를 어떻게 드느냐에 달려 있었다. 이제 남은 오차는 대부분 종이 쪽에 있다. 무엇을 인쇄했고, 얼마나 평평하게 붙였는지가 측정을 좌우한다.
참고문헌
- 언스페셜티 (2023). 「분쇄도 가이드 개발기」. 링크 — 원문 확인
- Hartley R, Zisserman A (2004). Multiple View Geometry in Computer Vision, 2nd ed. Cambridge University Press. doi:10.1017/CBO9780511811685 — 호모그래피와 DLT의 표준 교과서
- Hartley RI (1997). In defense of the eight-point algorithm. IEEE Transactions on Pattern Analysis and Machine Intelligence 19(6), 580–593. doi:10.1109/34.601246 — 좌표 정규화, 서지 확인
- Kato H, Billinghurst M (1999). Marker tracking and HMD calibration for a video-based augmented reality conferencing system. IWAR '99, 85–94. doi:10.1109/IWAR.1999.803809 — ARToolKit, 서지 확인
- Olson E (2011). AprilTag: A robust and flexible visual fiducial system. ICRA 2011, 3400–3407. doi:10.1109/ICRA.2011.5979561 — 서지 확인
- Garrido-Jurado S, Muñoz-Salinas R, Madrid-Cuevas FJ, Marín-Jiménez MJ (2014). Automatic generation and detection of highly reliable fiducial markers under occlusion. Pattern Recognition 47(6), 2280–2292. doi:10.1016/j.patcog.2014.01.005 — ArUco 원 논문, 서지 확인
- OpenCV. Detection of ArUco Markers. 링크 — 검출기와 사전(DICT_4X4_50). 이 글의 시험은 OpenCV 5.0으로 했다
- ISO/IEC 7810:2019. Identification cards — Physical characteristics — ID-1 카드 85.60×53.98 mm
- Brown DC (1966). Decentering distortion of lenses. Photogrammetric Engineering 32(3), 444–462 — 방사 왜곡 모델, 서지 확인
이미지 출처
- 「이상 도시」: 작가 미상(1480년대 추정), 마르케 국립미술관, Wikimedia Commons, 퍼블릭 도메인
- 기준 마커 비교: Cmglee, Wikimedia Commons, CC BY-SA 4.0 (SVG를 PNG로 변환)
- 그 밖의 그림, 합성 사진, 시뮬레이션, 마커 시트: 직접 제작