【Python图像处理】25 实战项目:卫星遥感图像处理
摘要:本文通过一个完整的实战项目,讲解卫星遥感图像处理的实现方法。项目涵盖遥感图像预处理、地物分类、变化检测和特征提取等核心功能。由于国内无法访问OpenAI官网,因此使用国内镜像站可以注册使用GPT-5.4最新模型。请广大读者遵守法律法规,切勿翻墙访问境外网站,使用国内合法镜像站即可满足学习需求。
25.1 项目概述
25.1.1 遥感图像处理背景
遥感图像处理是利用计算机技术对卫星或航空遥感获取的图像进行处理和分析的过程。遥感图像具有多波段、大尺度、多分辨率等特点,广泛应用于土地利用监测、农作物估产、环境监测、城市规划、灾害评估等领域。
遥感图像处理的主要任务包括:辐射校正(消除大气和传感器影响)、几何校正(纠正图像几何变形)、图像融合(提高空间和光谱分辨率)、图像分类(识别地物类型)、变化检测(发现地物变化)、目标检测(识别特定目标)。
遥感图像通常包含多个波段,如可见光波段(红、绿、蓝)、近红外波段、短波红外波段等。不同波段对地物的响应不同,通过波段组合和运算可以提取丰富的地物信息。常用的植被指数如NDVI(归一化植被指数)就是利用近红外和红光波段的差异来评估植被覆盖状况。
25.1.2 遥感图像类型与特点
以下表格展示了常见遥感图像类型及其特点。
| 图像类型 | 波段数 | 空间分辨率 | 主要应用 | 代表卫星 |
|---|---|---|---|---|
| 全色图像 | 1 | 高(0.3-15m) | 地形测绘 | WorldView |
| 多光谱图像 | 4-10 | 中(10-30m) | 地物分类 | Landsat, Sentinel |
| 高光谱图像 | 100+ | 低(30-100m) | 精细分类 | Hyperion |
| 热红外图像 | 1-2 | 低(60-100m) | 温度监测 | Landsat TIRS |
| SAR图像 | 1-4 | 中(3-30m) | 全天候监测 | Sentinel-1 |
25.2 遥感图像预处理
遥感图像预处理是遥感应用的基础,包括辐射校正、几何校正、图像融合等步骤。辐射校正消除大气和传感器的影响,将数字量化值转换为物理量;几何校正纠正图像的几何变形,使图像与地理坐标对应;图像融合提高图像的空间分辨率和光谱分辨率。
""" 卫星遥感图像处理系统 完整的遥感图像处理流程 兼容Python 3.13 """importcv2importnumpyasnpfromtypingimportTuple,Optional,List,Dict,Anyfromnumpy.typingimportNDArrayfromdataclassesimportdataclass@dataclassclassBandInfo:"""波段信息"""name:strwavelength:floatresolution:floatdata:Optional[NDArray]=NoneclassSpectralIndexCalculator:"""光谱指数计算器"""defndvi(self,red:NDArray,nir:NDArray)->NDArray:"""归一化植被指数"""red=red.astype(np.float64)nir=nir.astype(np.float64)return(nir-red)/(nir+red+1e-10)defndwi(self,green:NDArray,nir:NDArray)->NDArray:"""归一化水体指数"""green=green.astype(np.float64)nir=nir.astype(np.float64)return(green-nir)/(green+nir+1e-10)classLandClassifier:"""地物分类器"""defkmeans_classification(self,image:NDArray,n_clusters:int=5)->NDArray:"""K-means非监督分类"""h,w=image.shape[:2]iflen(image.shape)==3:data=image.reshape(-1,image.shape[2]).astype(np.float32)else:data=image.reshape(-1,1).astype(np.float32)criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,100,0.2)_,labels,_=cv2.kmeans(data,n_clusters,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS)returnlabels.reshape(h,w).astype(np.uint8)classChangeDetector:"""变化检测器"""defdifference_detection(self,image1:NDArray,image2:NDArray,threshold:float=30.0)->NDArray:"""差值法变化检测"""ifimage1.shape!=image2.shape:image2=cv2.resize(image2,(image1.shape[1],image1.shape[0]))diff=cv2.absdiff(image1,image2)iflen(diff.shape)==3:diff=np.mean(diff,axis=2)_,changes=cv2.threshold(diff.astype(np.uint8),int(threshold),255,cv2.THRESH_BINARY)returnchangesclassRemoteSensingSystem:"""遥感图像处理系统"""def__init__(self):self.indices=SpectralIndexCalculator()self.classifier=LandClassifier()self.change_detector=ChangeDetector()defextract_features(self,bands:Dict[str,NDArray])->Dict[str,NDArray]:"""提取光谱特征"""features={}if'red'inbandsand'nir'inbands:features['ndvi']=self.indices.ndvi(bands['red'],bands['nir'])if'green'inbandsand'nir'inbands:features['ndwi']=self.indices.ndwi(bands['green'],bands['nir'])returnfeaturesdefclassify(self,image:NDArray,n_classes:int=5)->NDArray:"""地物分类"""returnself.classifier.kmeans_classification(image,n_classes)defdetect_changes(self,image1:NDArray,image2:NDArray)->NDArray:"""变化检测"""returnself.change_detector.difference_detection(image1,image2)defdemonstrate_remote_sensing():"""演示遥感图像处理"""print("卫星遥感图像处理系统演示")print("="*50)h,w=400,400red=np.random.randint(50,150,(h,w),dtype=np.uint8)green=np.random.randint(60,160,(h,w),dtype=np.uint8)blue=np.random.randint(70,170,(h,w),dtype=np.uint8)nir=np.random.randint(80,200,(h,w),dtype=np.uint8)cv2.circle(red,(200,200),80,80,-1)cv2.circle(nir,(200,200),80,180,-1)rgb=np.stack([blue,green,red],axis=-1)system=RemoteSensingSystem()bands={'red':red,'green':green,'blue':blue,'nir':nir}features=system.extract_features(bands)print(f"光谱指数计算:")forname,featureinfeatures.items():print(f"{name}: 范围[{feature.min():.3f},{feature.max():.3f}]")classified=system.classify(rgb,5)print(f"\nK-means分类完成:{np.unique(classified)}")image1=rgb.copy()image2=rgb.copy()cv2.circle(image2,(300,300),50,(200,200,100),-1)changes=system.detect_changes(image1,image2)print(f"\n变化检测:{np.count_nonzero(changes)}个变化像素")return{'rgb':rgb,'features':features,'classified':classified,'changes':changes}if__name__=="__main__":results=demonstrate_remote_sensing()print("\n遥感图像处理系统演示完成")25.3 本章小结
本章通过卫星遥感图像处理系统这个实战项目,讲解了遥感图像的特殊处理方法。遥感图像处理需要考虑多波段、大尺度、多分辨率等特点。
遥感图像预处理包括辐射校正和几何校正,用于消除大气影响和几何变形。光谱指数计算是遥感图像分析的重要手段,如NDVI用于植被监测、NDWI用于水体提取。地物分类是遥感图像处理的核心任务,变化检测可以发现地物的时序变化。
下一章将介绍图像修复与inpainting技术。
GPT-5.4辅助编程提示词:
我需要开发一个遥感图像处理系统,请帮我编写完整的Python代码: 需求描述: 1. 实现预处理功能:辐射校正、几何校正、图像融合 2. 实现特征提取:光谱指数(NDVI、NDWI、NDBI) 3. 实现分类功能:监督分类、非监督分类 4. 实现变化检测 技术要求: - 使用OpenCV和NumPy实现 - 兼容Python 3.13