Change Detection
Обнаружение изменений сравнивает изображения одной и той же сцены, снятые в разное время, чтобы определить, что появилось, исчезло или переместилось, — от спутниковых снимков до заводов.
Обнаружение изменений — задача поиска значимых различий между изображениями одной и той же сцены, снятой в разное время. Оно сравнивает два или более наблюдения и определяет, где что-то изменилось: формирует бинарную карту изменений, классы переходов, например «из леса в пашню», или список появившихся, исчезнувших либо переместившихся объектов. Бивременное обнаружение изменений сравнивает две даты, а многовременные методы анализируют весь временной ряд, чтобы отличить устойчивые изменения от сезонных циклов и разового шума. Эта задача играет ключевую роль в дистанционном зондировании и анализе спутниковых снимков; те же идеи применяются для вычитания фона на стационарных камерах безопасности и сравнения с эталоном при промышленном контроле.
Как работает обнаружение изменений#
Два изображения можно корректно сравнить, только если соответствующие пиксели отображают один и тот же участок земли. Регистрация изображений совмещает их, поскольку даже сдвиг на один пиксель создаёт ложные изменения вдоль каждой границы. Радиометрическая нормализация устраняет различия в угле освещения, экспозиции, дымке и отклике датчика. Затем этап сравнения вычисляет меру различия для каждого пикселя или области, пороговое значение отделяет изменения от шума, а постобработка удаляет изолированные пиксели и объединяет остальные в области.
Самый простой способ сравнения — попиксельное вычитание изображений. В этом примере сравниваются два кадра парковки, снятых сверху с интервалом 2,7 секунды, а порог выбирает метод Оцу:
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. На сохранённой карте отмечены синия машина, въезжающая на парковочное место, оба положения белого фургона, проезжающего через парковку, и машина, уезжающая за левый край кадра. Припаркованные машины, разметка и дорожное покрытие остаются чёрными.
Пиксельные, объектные и обучаемые подходы#
Попиксельное вычитание работает, если оба изображения получены одним датчиком при сходном освещении. Для радиолокационных изображений, шум которых имеет мультипликативный характер, вместо разностей используют отношения. Анализ векторов изменений представляет каждый мультиспектральный пиксель вектором, изменение которого имеет и величину, и направление. При сравнении после классификации каждая дата классифицируется отдельно, а метки сравниваются между собой. Это даёт классы переходов и допускает использование разных датчиков, но суммирует ошибки обеих классификаций.
Методы глубокого обучения подают оба изображения в сиамскую свёрточную нейронную сеть с общими весами и преобразуют разность их карт признаков в карту изменений. Эту архитектуру популяризировали предложенные Даудтом и коллегами в 2018 году полносвёрточные сиамские сети, а более поздние модели добавляют механизмы внимания и трансформеры. Широко используемый набор для тестирования — LEVIR-CD, выпущенный Хао Чэнем и Чжэньвэем Ши в 2020 году. В него входят 637 пар изображений Google Earth размером 1 024×1 024 пикселя с разрешением 0,5 метра на пиксель и 31 333 размеченных изменения зданий.
Обнаружение изменений на уровне объектов сопоставляет обнаруженные объекты, а не пиксели, что позволяет игнорировать тени и сезонные изменения цвета. Предварительно обученная на аэрофотоснимках DOTA модель ориентированных ограничивающих рамок Ultralytics YOLO26 возвращает повёрнутые рамки для самолётов, кораблей, резервуаров и транспортных средств. Сопоставив результаты обнаружения объектов за две даты, можно определить, что появилось и что исчезло.
Обнаружение изменений и смежные задачи#
- Обнаружение аномалий отмечает наблюдения, отклоняющиеся от усвоенного представления о норме, часто по одному изображению. Для обнаружения изменений требуется эталонное наблюдение, а сами изменения — например, новое здание — обычно ожидаемы.
- Отслеживание объектов и оптический поток отслеживают движение между последовательными кадрами видео. Обнаружение изменений сравнивает состояние сцены в два момента времени, часто разделённые месяцами или годами.
- Дрейф данных — изменение во времени статистического распределения входных данных, получаемых развёрнутой моделью, из-за которого падает её точность.
Примеры применения в реальных условиях#
- Мониторинг обезлесения и землепользования: Ежегодные карты потери древесного покрова, созданные по снимкам Landsat с разрешением 30 метров и публикуемые Мэрилендским университетом с 2013 года, лежат в основе Global Forest Watch.
- Оценка ущерба от стихийных бедствий: Сравнение спутниковых снимков или снимков с дронов до и после события позволяет картировать затопленные земли, выгоревшие участки и обрушившиеся здания. В наборе данных xBD ущерб зданиям оценивается по четырёхуровневой шкале на парах изображений до и после события.
- Промышленный контроль: Стационарная камера сравнивает каждое изделие с эталонным изображением исправной детали, чтобы обнаружить отсутствующие винты, неправильно установленные компоненты или посторонние предметы.
- Безопасность и видеонаблюдение: Вычитание фона — видеоформа обнаружения изменений — моделирует статичную сцену для каждого пикселя и считает отклонения от неё движущимся передним планом. Именно на этом принципе основаны оповещения о движении со стационарных камер.










