Image Registration
이미지 정합은 특징점 매칭이나 픽셀 유사도 및 변환 모델을 사용하여 동일한 장면의 이미지들을 하나의 좌표계에 정렬합니다.
이미지 정합은 같은 장면을 담은 두 개 이상의 이미지를 정렬해 실제 공간의 각 지점이 모든 이미지에서 같은 픽셀 좌표에 오도록 하는 컴퓨터 비전 처리 과정입니다. 이미지는 서로 다른 시점, 시야각, 센서에서 촬영되었을 수 있습니다. 예를 들면 1월과 6월의 위성 촬영 이미지, 같은 환자의 MRI와 CT 스캔, 흔들리는 카메라로 촬영한 연속 프레임 등이 있습니다. 정합된 이미지는 픽셀 단위로 비교하거나, 하나의 영상으로 융합하거나, 모자이크로 이어 붙일 수 있습니다.
정합에서는 한 이미지를 고정 이미지, 즉 참조 이미지로 지정하고 다른 이동 이미지를 해당 좌표계로 변환합니다. 여기에는 세 가지 선택 사항이 있습니다. 이미지가 얼마나 잘 정렬되었는지 측정하는 방법, 허용할 기하학적 변환의 종류, 최적의 변환을 찾는 방법입니다. 변환을 추정한 뒤 이동 이미지를 재샘플링하며, 보간을 통해 새로운 위치의 픽셀 값을 계산합니다.
특징 기반 및 강도 기반 방법#
특징 기반 정합은 두 이미지에서 모서리와 블롭처럼 구별하기 쉬운 지점을 감지하고, ORB나 SIFT와 같은 기술자로 각 지점을 표현한 뒤 이미지 간 기술자를 매칭합니다. 매칭된 키포인트는 서로 대응하는 위치 쌍을 제공하고, RANSAC과 같은 강건한 추정기는 일치하지 않는 항목을 제외하면서 변환을 계산합니다. 특징 기반 방법은 빠르고 큰 변위를 처리하므로 파노라마 스티칭과 드론 매핑에 일반적으로 사용됩니다. 학습 기반 이미지 매칭은 사람이 설계한 기술자가 어려움을 겪는 장면까지 적용 범위를 넓힙니다. 다음 예시는 테스트 사진에 알려진 회전, 배율, 이동을 적용한 뒤 OpenCV를 사용해 변환을 복원합니다.
import cv2
import numpy as np
from skimage import data
# Fixed image, and a moving copy rotated 10 degrees, scaled 1.1x, and shifted (25, -15) pixels
fixed = data.camera()
warp = cv2.getRotationMatrix2D((256, 256), 10, 1.1)
warp[:, 2] += (25, -15)
moving = cv2.warpAffine(fixed, warp, (512, 512))
# Detect and match ORB features in both images
orb = cv2.ORB_create(1000)
kp_moving, des_moving = orb.detectAndCompute(moving, None)
kp_fixed, des_fixed = orb.detectAndCompute(fixed, None)
matches = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True).match(des_moving, des_fixed)
src = np.float32([kp_moving[m.queryIdx].pt for m in matches])
dst = np.float32([kp_fixed[m.trainIdx].pt for m in matches])
# Fit a similarity transform (rotation, scale, translation) with RANSAC, rejecting wrong matches
M, inliers = cv2.estimateAffinePartial2D(src, dst, method=cv2.RANSAC)
angle, scale = np.degrees(np.arctan2(M[1, 0], M[0, 0])), np.hypot(M[0, 0], M[1, 0])
print(f"Kept {inliers.sum()} of {len(matches)} matches: rotation {angle:.2f} degrees, scale {scale:.3f}")
# Resample the moving image into the fixed image's coordinates
registered = cv2.warpAffine(moving, M, (512, 512))
cv2.imwrite("registered.png", registered)출력은 Kept 497 of 567 matches: rotation 10.01 degrees, scale 0.910입니다. 추정된 변환은 적용된 워프의 역변환으로, 10도 회전의 복원과 1/1.1의 배율을 포함하며 registered.png은 두 이미지가 겹치는 영역에서 원본 사진과 정렬됩니다.
강도 기반 정합은 특징을 명시적으로 추출하지 않고 픽셀 값을 직접 비교해 유사도 측정값이 최대가 되도록 변환을 조정합니다. 이 개념은 Bruce Lucas와 Takeo Kanade의 1981년 논문 '스테레오 비전에 적용한 반복 이미지 정합 기법'에서 비롯되었으며, 현재 옵티컬 플로에도 사용되는 방법을 소개했습니다. 상관관계는 같은 센서에서 얻은 이미지에 적합하며, 1990년대 중반 의료 영상 정합에 도입된 상호 정보량은 MRI와 CT처럼 같은 조직이 서로 다른 밝기로 나타나는 서로 다른 모달리티를 처리합니다. 최적화기는 경사 하강법을 이미지 피라미드의 거친 단계에서 세밀한 단계까지 적용하는 경우가 많으며, SimpleITK 정합 프레임워크와 같은 툴킷은 측정 기준, 최적화기, 변환, 보간기를 개별 구성 요소로 제공합니다.
2019년 Guha Balakrishnan과 동료들이 발표한 VoxelMorph와 같은 딥러닝 방법은 합성곱 신경망을 학습시켜 한 번의 순전파에서 변형 필드를 예측합니다. 이를 통해 쌍마다 몇 분 이상 걸리던 최적화를 GPU에서 1초 이내에 끝나는 예측으로 대체합니다.
변환 모델 선택#
변환 모델은 이미지 간 실제 차이에 맞아야 합니다:
- 이동 및 강체 변환: 이동과, 강체 변환의 경우 회전을 적용하며 거리는 보존됩니다. 동일한 강체 물체를 스캔한 이미지에 흔히 사용됩니다.
- 유사 변환 및 어파인 변환: 유사 변환은 균일 배율을 추가하고, 어파인 변환은 비균일 배율과 전단을 추가합니다. 두 변환 모두 전체 이미지에 하나의 변환을 적용합니다. 서로 다른 배율로 촬영된 위성 이미지에 적합합니다.
- 사영 변환(호모그래피): 문서 스캔이나 파노라마처럼 평면 장면 또는 회전하는 카메라에서 발생하는 원근 변화를 모델링합니다.
- 변형 가능 변환: 스캔 사이에 형태가 변하는 연조직에 필요한 경우처럼 각 영역이 독립적으로 움직이도록 합니다.
유연성이 높은 모델은 분석에서 탐지해야 할 실제 변화까지 무엇이든 적합시킬 수 있으므로, 이미지 정합은 대개 가장 단순하고 타당한 모델에서 시작하고 정렬 오차가 남아 있는 경우에만 유연성을 높입니다. 깊이 정보와 움직이는 카메라가 있는 장면에서는 단일 2D 변환으로 제거할 수 없는 시차가 발생하므로, 이러한 장면의 정합에는 에피폴라 기하학과 3D 재구성이 필요합니다.
정합이 사용되는 분야#
원격 탐사 및 위성 이미지 분석에서 정합은 변화 감지의 첫 단계입니다. 같은 지역을 몇 달 간격으로 촬영한 이미지는 새로운 건축물이나 벌채된 숲을 모델이 표시하기 전에 정렬해야 합니다. 정렬이 약간만 어긋나도 모든 도로 가장자리가 변화한 것처럼 보일 수 있습니다. 의료 영상 분석에서는 서로 다른 방문 시점의 스캔을 정렬해 임상의가 종양의 성장 여부를 측정하고, PET와 CT를 정렬해 대사 활동과 해부학적 구조를 결합하며, 레이블이 지정된 아틀라스를 새 스캔에 정합해 해부학적 레이블을 전달합니다. 이는 뇌 구조의 이미지 세그멘테이션에 활용되는 대표적인 방법입니다.
동영상 애플리케이션은 카메라 움직임을 추정하기 위해 연속 프레임을 정합합니다. 안정화는 이러한 움직임을 제거하며, 추적기는 카메라 이동 영상에서 카메라 움직임과 객체 움직임을 혼동하지 않도록 이를 활용합니다. Ultralytics YOLO 객체 추적의 기본 TrackTrack 추적기는 절반 해상도에서 희소 옵티컬 플로로 모서리 특징을 추적해 각 프레임을 이전 프레임에 정합하고, RANSAC으로 유사 변환을 계산합니다. 이를 통해 드론이나 차량 카메라의 추적이 올바른 객체에 연결됩니다.










