Image Registration
Регистрация изображений совмещает изображения одной и той же сцены в общей системе координат с помощью сопоставления признаков или сходства пикселей и модели преобразования.
Регистрация изображений — это процесс компьютерного зрения, который выравнивает два или более изображения одной сцены так, чтобы каждой физической точке соответствовали одинаковые пиксельные координаты на всех изображениях. Изображения могут быть получены в разное время, с разных точек обзора или датчиков: при спутниковой съёмке в январе и июне, на МРТ и КТ одного пациента или в последовательных кадрах с дрожащей камеры. После регистрации изображения можно сравнивать попиксельно, объединять в единое представление или сшивать в мозаику.
При регистрации одно изображение выбирают в качестве фиксированного, или эталонного, а другое, подвижное, преобразуют в его систему координат. Для этого нужно принять три решения: как измерять степень выравнивания изображений, какие геометрические преобразования разрешены и как искать наилучшее преобразование. После его оценки подвижное изображение пересэмплируют, вычисляя интерполяцией значения пикселей в новых позициях.
Методы на основе признаков и интенсивности#
Регистрация на основе признаков находит в обоих изображениях характерные точки, например углы и блобы, описывает каждую дескриптором, например 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 совпадает с исходной фотографией в области их наложения.
Регистрация на основе интенсивности не использует явные признаки, а напрямую сравнивает значения пикселей и корректирует преобразование так, чтобы максимизировать меру сходства. Идея восходит к Брюсу Лукасу и Такэо Канаде: в статье 1981 года «Итеративный метод регистрации изображений с применением к стереозрению» они представили метод, который теперь используется и для оптического потока. Корреляция подходит для изображений, снятых одним датчиком, а взаимная информация, предложенная для регистрации медицинских изображений в середине 1990-х, позволяет работать с разными модальностями, например сопоставлять МРТ и КТ, на которых одна ткань выглядит по-разному. Оптимизатор, часто использующий градиентный спуск на пирамиде изображений от грубого масштаба к точному, ищет наилучшие параметры. Инструментарии, например среда регистрации SimpleITK, предоставляют метрику, оптимизатор, преобразование и интерполятор как отдельные компоненты.
Методы глубокого обучения, например VoxelMorph, опубликованный Гухой Балакришнаном и его коллегами в 2019 году, обучают свёрточную нейронную сеть предсказывать поле деформации за один прямой проход. Вместо оптимизации для каждой пары изображений, занимающей несколько минут или больше, сеть выдаёт результат менее чем за секунду на GPU.
Выбор модели преобразования#
Преобразование должно соответствовать фактическим различиям между изображениями:
- Перенос и жёсткое преобразование: Сдвиг, а в случае жёсткого преобразования — ещё и поворот, при сохранении расстояний. Обычно используется для сканирований одного и того же жёсткого объекта.
- Подобное и аффинное преобразование: Подобное преобразование добавляет равномерное масштабирование, а аффинное — неравномерное масштабирование и сдвиг. Одно преобразование применяется ко всему изображению. Подходит для спутниковых снимков, сделанных в немного разных масштабах.
- Проективное преобразование (гомография): Моделирует перспективные изменения в плоских сценах или при повороте камеры, например при сканировании документов и создании панорам.
- Деформируемое преобразование: Позволяет каждой области перемещаться независимо. Оно нужно для мягких тканей, меняющих форму между сканированиями.
Более гибкие модели могут подстроиться почти под что угодно, включая реальные изменения, которые нужно обнаружить. Поэтому регистрацию обычно начинают с самой простой правдоподобной модели и добавляют гибкость только там, где сохраняется ошибка выравнивания. В сценах с глубиной и движущейся камерой возникает параллакс, который нельзя устранить одним двумерным преобразованием; для выравнивания таких сцен используют эпиполярную геометрию и трехмерную реконструкцию.
Где применяется регистрация изображений#
В дистанционном зондировании и анализе спутниковых изображений регистрация — первый этап обнаружения изменений: изображения одной области, сделанные с разницей в несколько месяцев, необходимо выровнять, прежде чем модель сможет обнаружить новую постройку или вырубленный лес. Иначе даже небольшой сдвиг будет выглядеть как изменение вдоль каждого края дороги. В анализе медицинских изображений совмещение снимков, сделанных при разных посещениях врача, позволяет оценить рост опухоли; совмещение ПЭТ с КТ объединяет метаболическую активность и анатомическое строение; регистрация размеченного атласа на новом снимке переносит на него анатомические метки — классический способ сегментации изображений структур мозга.
В видеоприложениях последовательные кадры регистрируют для оценки движения камеры. Стабилизация устраняет это движение, а трекеры используют его оценку, чтобы не путать движение камеры с движением объекта. Трекер TrackTrack, используемый по умолчанию в отслеживании объектов Ultralytics YOLO, регистрирует каждый кадр относительно предыдущего: он отслеживает угловые точки с помощью разреженного оптического потока при половинном разрешении и подбирает подобное преобразование с помощью RANSAC. Благодаря этому треки остаются привязаны к нужным объектам при съёмке с камеры дрона или автомобиля.










