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 年提出的全卷积孪生网络推广开来,后续模型又加入了注意力机制和Transformer。广泛使用的基准之一是 LEVIR-CD,由 Hao Chen 和 Zhenwei Shi 于 2020 年发布,包含 637 对 Google Earth 图像;每张图像大小为 1,024×1,024 像素,分辨率为每像素 0.5 米,共标注了 31,333 处建筑变化。
对象级变化检测比较检测结果而不是像素,因此不会受阴影和季节性颜色变化影响。在 DOTA 航拍图像上预训练的 Ultralytics YOLO26 旋转框模型可以为飞机、船舶、储罐和车辆返回旋转框,因此匹配两个日期的目标检测结果,就能找出新增和消失的对象。
变化检测与相关任务的比较#
- 异常检测 标记偏离已学习的正常模式的观测结果,通常只需一张图像。变化检测需要参考观测,而新建建筑之类的变化通常是预期中的。
- 目标跟踪 和 光流 会跟踪连续视频帧之间的运动。变化检测比较的是场景在两个时点的状态,这两个时点可能相隔数月甚至数年。
- 数据漂移 描述已部署模型接收的输入统计分布随时间发生偏移,这会逐渐降低模型准确率。
实际应用#
- 森林砍伐与土地覆盖监测: 马里兰大学自 2013 年起发布基于 Landsat 图像、分辨率为 30 米的年度树木覆盖损失地图;这些地图是 Global Forest Watch 的基础。
- 灾害损失评估: 比较事件发生前后的卫星或无人机图像,可绘制被淹土地、烧毁区域和倒塌建筑的分布;xBD 数据集则根据事件前后的图像对建筑损坏程度进行四级评分。
- 工业检测: 固定摄像头会将每件装配品与正确零件的参考图像进行比较,以发现缺失螺丝、错位部件或异物。
- 安防与监控: 背景减除是变化检测在视频中的形式,它会对每个像素的静态场景建模,并将偏离场景的部分视为移动前景;固定摄像头的运动警报便以此为触发机制。










