AI 大模型之 计算机视觉 遥感影像 地物分类 / 变化检测 应用实践

AI人工智能阿木 发布于 2025-07-12 15 次阅读


遥感影像计算机视觉应用实践:地物分类与变化检测

随着遥感技术的飞速发展,遥感影像在地理信息系统(GIS)、环境监测、城市规划等领域发挥着越来越重要的作用。计算机视觉技术在遥感影像处理中的应用,使得地物分类和变化检测等任务变得更加高效和准确。本文将围绕这一主题,通过代码实践,探讨遥感影像的地物分类与变化检测技术。

1. 地物分类

1.1 数据准备

在进行地物分类之前,我们需要准备遥感影像数据。这里以Landsat 8影像为例,数据可以从USGS网站下载。

python

import os


import rasterio

设置影像路径


image_path = 'path_to_landsat8_image.tif'

打开影像


with rasterio.open(image_path) as src:


获取影像数据


img = src.read()


获取影像元数据


meta = src.meta


1.2 预处理

遥感影像预处理包括辐射校正、几何校正、大气校正等步骤。这里以辐射校正为例。

python

from rasterio.plot import show


import numpy as np

计算辐射校正系数


gain = src.meta['gain']


offset = src.meta['offset']

辐射校正


img_corrected = np.add(np.multiply(img, gain), offset)

显示校正后的影像


show(img_corrected)


1.3 特征提取

特征提取是地物分类的关键步骤。常用的特征包括纹理、颜色、形状等。

python

from skimage.feature import greycomatrix, greycoprops

计算纹理特征


glcm = greycomatrix(img_corrected[0, :, :], distances=[1], angles=[0], symmetric=True, normed=True)


textural_features = greycoprops(glcm, 'contrast', mode='min')


1.4 分类器选择与训练

分类器有很多种,如支持向量机(SVM)、随机森林(Random Forest)等。这里以SVM为例。

python

from sklearn.svm import SVC


from sklearn.model_selection import train_test_split

划分训练集和测试集


X_train, X_test, y_train, y_test = train_test_split(textural_features, labels, test_size=0.3, random_state=42)

训练SVM分类器


clf = SVC(kernel='linear')


clf.fit(X_train, y_train)

评估分类器性能


score = clf.score(X_test, y_test)


print(f'Accuracy: {score}')


2. 变化检测

2.1 数据准备

变化检测需要准备两期遥感影像。这里以Landsat 8影像为例。

python

设置两期影像路径


image_path1 = 'path_to_landsat8_image1.tif'


image_path2 = 'path_to_landsat8_image2.tif'

打开两期影像


with rasterio.open(image_path1) as src1, rasterio.open(image_path2) as src2:


img1 = src1.read()


img2 = src2.read()


2.2 归一化植被指数(NDVI)计算

NDVI是变化检测中常用的指标。

python

def calculate_ndvi(image):


red = image[3, :, :]


nir = image[4, :, :]


ndvi = (nir - red) / (nir + red)


return ndvi

计算两期影像的NDVI


ndvi1 = calculate_ndvi(img1)


ndvi2 = calculate_ndvi(img2)


2.3 变化检测算法

变化检测算法有很多种,如基于阈值、基于分类后比较等。这里以基于阈值为例。

python

from skimage.measure import label, regionprops

设置阈值


threshold = 0.1

计算变化


change_mask = np.where(np.abs(ndvi1 - ndvi2) > threshold, 1, 0)

标记变化区域


labels = label(change_mask)


props = regionprops(labels)

统计变化区域信息


for prop in props:


print(f'Area: {prop.area}, Centroid: {prop.centroid}')


总结

本文通过代码实践,介绍了遥感影像的地物分类与变化检测技术。在实际应用中,可以根据具体需求选择合适的算法和参数,以达到更好的效果。随着遥感影像数据的不断丰富和计算机视觉技术的不断发展,遥感影像在各个领域的应用将更加广泛。