Change Detection
변화 탐지는 서로 다른 시점에 촬영한 동일 장면의 이미지를 비교하여 위성 영상부터 공장까지 새로 나타나거나 사라지거나 이동한 대상을 파악합니다.
변화 탐지는 서로 다른 시점에 촬영한 동일 장면의 이미지에서 의미 있는 차이를 찾는 작업입니다. 두 개 이상의 관측 결과를 비교해 이진 변화 맵, 숲에서 경작지로 바뀌는 것과 같은 "변화 전-후" 클래스 또는 나타나거나 사라지거나 이동한 객체 목록으로 변화 위치를 출력합니다. 양시점 변화 탐지는 두 시점을 비교하고, 다중 시점 방식은 전체 시계열을 분석해 지속적인 변화와 계절 주기 및 일회성 잡음을 구분합니다. 이 작업은 원격 탐사와 위성 이미지 분석의 핵심이며, 고정형 보안 카메라의 배경 차분과 산업 검사에서 기준 이미지와 비교하는 방식에도 같은 원리가 적용됩니다.
변화 감지의 작동 방식#
대응하는 픽셀이 동일한 지상을 나타내야 두 이미지를 정확하게 비교할 수 있습니다. 이미지 정합으로 두 이미지를 정렬합니다. 픽셀 하나의 오프셋만으로도 모든 경계를 따라 허위 변화가 생기기 때문입니다. 방사 정규화는 태양 각도, 노출, 박무, 센서 응답으로 인한 차이를 제거합니다. 그런 다음 비교 단계에서 픽셀 또는 영역별 차이 측정값을 계산하고, 임계값으로 변화를 잡음과 구분하며, 후처리로 고립된 픽셀을 제거하고 나머지를 영역으로 병합합니다.
가장 단순한 비교 방식은 이미지 차분입니다. 이 예제에서는 위에서 촬영한 주차장 프레임 두 개를 2.7초 간격으로 비교하고 Otsu 방법으로 임계값을 선택합니다:
import cv2
import numpy as np
# Two frames of a parking lot filmed from above, 81 frames (2.7 seconds) apart
cap = cv2.VideoCapture("https://github.com/ultralytics/assets/releases/download/v0.0.0/solution_ci_parking_demo.mp4")
_, before = cap.read()
cap.set(cv2.CAP_PROP_POS_FRAMES, 81)
_, after = cap.read()
# Convert to grayscale and blur to suppress noise, then difference pixel by pixel
before = cv2.GaussianBlur(cv2.cvtColor(before, cv2.COLOR_BGR2GRAY), (5, 5), 0)
after = cv2.GaussianBlur(cv2.cvtColor(after, cv2.COLOR_BGR2GRAY), (5, 5), 0)
diff = cv2.absdiff(before, after)
# Otsu's method picks the change threshold, and an opening removes isolated noisy pixels
_, change_map = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
change_map = cv2.morphologyEx(change_map, cv2.MORPH_OPEN, np.ones((5, 5), np.uint8))
print(f"{100 * (change_map > 0).mean():.1f}% of pixels changed")
cv2.imwrite("change_map.png", change_map)5.2% of pixels changed을 출력합니다. 저장된 맵에는 주차 공간에 들어오는 파란색 자동차, 주차장을 가로질러 이동하는 흰색 밴의 두 위치, 프레임 왼쪽 가장자리로 나가는 자동차가 표시됩니다. 주차된 자동차와 노면 표시선, 포장도로는 검은색으로 유지됩니다.
픽셀, 객체 및 학습 기반 접근 방식#
두 이미지가 동일한 센서로 비슷한 조명 조건에서 촬영되었다면 픽셀 차분이 효과적입니다. 잡음이 곱셈 방식으로 발생하는 레이더 영상에서는 차분 대신 비율을 사용하며, 변화 벡터 분석은 각 다중분광 픽셀을 변화의 크기와 방향을 갖는 벡터로 취급합니다. 사후 분류 비교는 각 시점을 개별적으로 분류한 후 레이블을 비교합니다. 이 방식은 "변화 전-후" 클래스를 산출하고 서로 다른 센서를 허용하지만, 두 분류의 오류가 누적됩니다.
딥러닝 방식은 가중치를 공유하는 샴 합성곱 신경망에 두 이미지를 입력하고, 두 이미지의 특성 맵 차이를 디코딩해 변화 맵을 생성합니다. Daudt와 동료들이 2018년에 발표한 완전 합성곱 샴 네트워크가 이 설계를 널리 알렸으며, 이후 모델에는 어텐션 메커니즘과 트랜스포머가 추가되었습니다. 널리 사용되는 벤치마크인 LEVIR-CD는 Hao Chen과 Zhenwei Shi가 2020년에 공개했습니다. 픽셀당 0.5미터 해상도의 1,024×1,024픽셀 Google Earth 이미지 쌍 637개와 주석이 달린 건물 변화 31,333건으로 구성됩니다.
객체 수준 변화 탐지는 픽셀 대신 감지 결과를 비교하므로 그림자와 계절에 따른 색상 변화를 무시합니다. DOTA 항공 이미지로 사전 학습된 Ultralytics YOLO26 방향성 바운딩 박스 모델은 비행기, 선박, 저장 탱크, 차량의 회전된 박스를 반환하므로 두 시점의 객체 탐지 결과를 매칭하면 무엇이 나타나고 사라졌는지 알 수 있습니다.
변화 탐지와 관련 작업 비교#
- 이상 탐지는 주로 단일 이미지에서 학습된 정상 상태의 개념과 다른 관측 결과를 표시합니다. 변화 탐지에는 기준 관측이 필요하며, 새 건물처럼 변화 자체가 예상되는 경우가 많습니다.
- 객체 추적과 옵티컬 플로는 연속된 비디오 프레임 사이의 움직임을 추적합니다. 변화 탐지는 흔히 몇 달 또는 몇 년 간격을 둔 두 시점의 장면 상태를 비교합니다.
- 데이터 드리프트는 배포된 모델이 입력받는 데이터의 통계적 분포가 시간에 따라 변하는 현상으로, 모델의 정확도를 떨어뜨립니다.
실제 적용 사례#
- 산림 벌채 및 토지 피복 모니터링: 메릴랜드 대학교가 2013년부터 공개한 Landsat 이미지 기반 연간 수관 손실 지도는 해상도가 30미터이며, Global Forest Watch의 기반이 됩니다.
- 재난 피해 평가: 재난 전후의 위성 또는 드론 이미지를 비교해 침수 지역, 산불 피해 지역, 붕괴된 건물을 지도화합니다. xBD 데이터셋은 전후 이미지 쌍을 사용해 건물 피해를 4단계 척도로 분류합니다.
- 산업 검사: 고정 카메라가 각 조립품을 올바른 부품의 기준 이미지와 비교해 누락된 나사, 잘못 배치된 구성 요소, 이물질을 찾아냅니다.
- 보안 및 감시: 변화 탐지를 비디오에 적용한 배경 차분은 각 픽셀의 정적 장면을 모델링하고 이와 다른 부분을 움직이는 전경으로 취급합니다. 이는 고정 카메라에서 움직임 알림을 발생시키는 원리입니다.










