当前位置: 首页 > news >正文

【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
http://www.cnnetsun.cn/news/1940304.html

相关文章:

  • 终极指南:5步彻底解决DirectDraw老游戏兼容性问题
  • 从机器学习实战看贝叶斯与频率学派的融合与分野
  • AI Agent Harness Engineering 在政府与公共机构的应用前景
  • CausalNex可视化完全指南:让复杂因果关系一目了然
  • AI大模型数据安全治理体系方案:涵盖技术防护、管理机制、人员意识三大维度的一套覆盖数据全生命周期的安全治理体系
  • 从“00011110”到电磁波:深入解析2ASK、2FSK与BPSK的调制实战
  • 别再只会ping了!用iPerf3给你的云服务器做个‘网络体检’(附Ubuntu/CentOS安装命令)
  • 从PSD到星座图:手把手教你用IQview读懂Wi-Fi射频信号的‘体检报告’
  • 模拟CMOS集成电路(3):共源放大器的偏置、增益与摆幅实战解析
  • WeChatExporter:Mac用户微信聊天记录导出终极解决方案
  • MDMDMDMDMMD
  • 别再手动写RTL了!用Xilinx FIR Compiler IP核快速搭建数字滤波器(Vivado 2023.2实战)
  • 农历计算的技术挑战与lunar-javascript的解决方案:构建高效的传统历法系统
  • ScriptCat异步API兼容性终极指南:告别GM.xmlHttpRequest卡顿问题
  • 车载组合导航避坑指南:GNSS信号丢失时,你的松组合算法真的靠谱吗?
  • 【代码中的上帝视角:最小作用量原理如何重构编程思维范式】
  • AIO USB Drive进阶技巧:自定义工具集与自动化脚本配置
  • 从Prompt注入到训练数据投毒:生成式AI全链路隐私攻击图谱(2024最新ATTCK for AI v2.1)
  • 终极指南:如何在Windows桌面端畅享酷安社区完整体验
  • 终极简单:安卓LogcatReader日志查看器快速上手指南
  • MediaPipe TouchDesigner插件:释放实时视觉魔力的终极指南
  • 为什么说 go 语句是新时代的 goto?四大法则拯救失控 goroutine
  • UI-TARS-desktop精彩案例分享:基于Qwen3-4B的GUI Agent自动完成周报生成+网页查资料
  • 用STM32F103的SPI1点亮ST7798屏幕:从硬件接线到显示字符的保姆级教程
  • Sharingan核心技术揭秘:并行录制与并行回放的实现原理
  • 题解:AcWing 5948 装箱问题
  • SubtitleEdit:告别字幕制作烦恼,这款开源编辑器让字幕编辑变得如此简单
  • 在Windows桌面端畅游酷安社区:Coolapk-UWP带你体验大屏浏览新境界
  • TrollInstallerX终极指南:iOS 14-16.6.1 TrollStore安装完全解决方案
  • 终极Powerlevel9k背景颜色渐变效果指南:打造高端视觉体验的7个高级技巧