【精品论文】遥感图像修复与拼接的研究.docx
班以工专大举本科毕业设计说明书(论文)(2020届)论文题目遥感图像修复与拼接的研究作者姓名XK指导教师以学科(专业)物联网工程-所在学院计算机科学与技术学院提交日期2020年6月摘要无人机、卫星以及其它高空拍摄手段拍摄图像时,经常受到飞行高度、相机焦距等因素的影响,单个图像覆盖范围有限,反映的信息量少,不能满足需要。往往需要将若干有重叠区域的遥感图像拼接成一张大图,以便更好的观测地物信息。该课题旨在研究多行遥感图像的拼接与修复,选择了anaconda上的Spyder,以Python语言结合OPenCV、SeiPy等库实现拼接与修复功能,以及tkinter开发用户图形界面来方便操作。在本课题中使用Sift算法来查找图像间的匹配点,构建稀疏矩阵结合最短路径算法查找无序图像间的顺序,用各图片透视变换后的四角坐标确定最终全景图的大小和基准坐标,最终可完成图像的上下左右拼接。由于遥感图像难免出现薄云遮挡,用同态滤波和暗通道的思想去除薄云。在最后实现的功能中,可以确定无序图像间重叠的关系再拼接,并且设置了曝光补偿功能使图像亮度趋于一致,也能裁剪出最大矩形全景图,最后也可以对含薄云的图像选择不同的方法进行除云处理。当然,最终的研究成果也存在不足之处,运行速度慢,图像数量增多后配准出现错误,无法消除拼接后产生的接缝。除云只限于处理低频分量的薄云,对于厚云只能降低亮度,而且对图像的细节和信息量也有损害,尤其是同态滤波。在这些方面还有待进一步的探索和改进。关键词:稀疏矩阵,曝光补偿,图形拼接,同态滤波AbstractBecauseoftheinfluenceofflightheight,camerafocallengthandotherfactors,thecoverageofimagestakenbyUAV,satelliteandotheraerialphotographymeansislimited,andinformationofimagesreflectedissmall,whichcan,tmeettheneeds.Itis浙江工业大学本科毕业设计说明书(论文)oftennecessarytostitchanumberofremotesensingimageswithoverlappingareasintoalargeimage,soastobetterobservethegroundfeatureinformation.Thepurposeofthisprojectistostudythestitchingandrestorationofanumberofremotesensingimages.WechoseSpyderonAnacondatowritePythonlanguagetorealizethegoal,combinedwithOpenCV,SciPyandotherlibraries,andchoseTkintertodevelopusergraphicalinterfacetosimplifyoperation.Inthistopic,thesiftalgorithmisusedtofindmatchingpointsbetweenimages.Thesparsematrixandtheshortestpathalgorithmareusedtofindtheorderbetweenthedisorderedimages.Thesizeanddatumcoordinatesofthefinalpanoramaareeterminedbythecoordinatesofthefourverticesofeachimageprocessedwithperspectivetransformation.Intheend,Wesuccessfullyrealize2Dormulti-rowstitchingofimages.Becausethereareoftenthincloudsinremotesensingimage,theideaofhomomorphicfilteringanddarkchannelisusedtoremovethethinclouds.Finally,wecanautomaticallydiscoverthematchingrelationshipsbetweentheimages,andthenstitchthem,theexposurecompensationfunctionissettomakethebrightnessoftheimagenodifference,andwecancutoutthelargestrectangularpanorama.Finally,differentmethodscanbeselectedforcloudremovalofimageswiththincloudsOfcourse,therearesomefaultforthefinalresearchresults,suchasslowoperatingspeed,Themisalignmentofimageregistrationasthenumberofimagesincreases,Unremovableseams.Ourmethodcanremovethethincloudinlowfrequencycomponent.Butforthickclouds,Wecanonlyreducetheirbrightness,andInaddition,thesestrategiesareharmfultothedetailsandinformationofimages,especiallyhomomorphicfiltering.Intheseaspects,furtherexplorationandimprovementareneeded.Keywords:,sparsematrix,GainCompensation,ImageStitching,Homomorphicfiltering目录摘要iiAbstractii第一章绪论61.1 课题研究的背景与意义61.2 国内外研究发展现状61.3 课题研究目标和内容81.4 本文组织结构81.5 本章小结9第二章相关技术分析及比对92.1 稀疏矩阵92.2 常用特征点的对比102.3 薄云图像观测模型102.4 OPenCV简介112.5 快速最近邻搜索匹配和暴力匹配122.6 两种颜色模型的对比122.6.1RGB颜色模型122.6.2HSl颜色模型132.7 本章小结14第三章遥感图像拼接与修复功能的实现143.1 开发环境说明143.2 阈值选取143.3 曝光补偿153.4 确定无序图像的顺序163.5 图像拼接173.6 矩形全景图的裁剪183.7 色彩模型的转换203.8 同态滤波除云223.9 暗通道除云243.10 本章小结25第四章用户界面设计254.1 用户界面总体设计254.2 除云模块设计264.3 拼接模块设计274.4 本章小结28第五章结果检测和分析评价285.1 检测目标285.2 模块检测运行285.2.1补光测试285.2.2拼接测试295.2.3除云效果检测295.3本章小结31第六章总结316.1 完成的工作316.2 存在的问题及下一步工作31参考文献32致谢33附录34'J附件;毕5或计文献综述二二二二二二二二二二二二二二二二二二二二34附件2毕业设计开题报告34附件3毕业设计外文翻译(中文译文与外文原文)34图目录图2-1稀疏矩阵的表示方式9图2-2CSR稀疏矩阵的表示方式10图2-3OPENCV架构图11图2-4RGB颜色模型13图2-5HSI颜色模型13图3-1键的转换17图3-2稀疏矩阵17图3-3根据稀疏矩阵构建的无向图17图3-417图3-5原始拼接图像18图3-6原始拼接图像转成的灰度图19图3-7能容纳全景图的最小矩形区域19图3-8能确定全景图内最大矩形区域的掩膜20图3-9裁剪的最终全景图20图3-10H、S、I各分量21图3-11当0<H<120时的RGB分量计算公式21图3-12当120<H<240时的RGB分量计算公式21图3-13当240<H<360时的RGB分量计算公式22图3-14HSI同态滤波处理流程图23图3-15RGB同态滤波处理流程图23图3-16原图及其暗通道图像和灰度值矩阵24图377导向滤波算法流程25图4-1初始界面26图4-2除云模块初始界面26图4-3点击按钮打开的文件夹27图4-4拼接模块界面27图4-5点击按钮打开的文件夹28图4-6弹出消息框28图5-1未经曝光补偿与经过曝光补偿的拼接图像29图5-2左右重叠的图像集与最终拼接图29图5-3左右上下重叠的图像集与最终拼接图29图5-4原薄云图像与各处理方式的结果图30表目录表格3-1各阈值下的图像特征点匹配情况15表格5-1不同除云方式的结果评价值3()第一章绪论1.1 课题研究的背景与意义遥感图像的处理目前普遍应用于地质勘探、森林、渔业资源调查、军事侦察、环境监控等多个领域。然而,无论是无人机、卫星还是其它拍摄手段,由于受到飞行高度及携带相机焦距和其它因素限制,拍摄的图像范围都有限制,单个图像只能反映有限区域内的地物情况,为了获取拍摄区域全景图像,需拼接多个遥感图像。因此,在遥感图像信息处理领域,遥感图像的拼接有着重要的地位。遥感图像拼接就是把若干张有重叠区域的遥感图片,提取特征点并进行匹配,再依据特征点配准图像,再通过投影变换、融合等步骤,拼接出一幅含有所有待图像地物信息的全景图。云是一种常见的天气现象,拍摄遥感图像时常出现被云遮挡的情况,云一多起来大气能见度下降,导致我们拍摄的图像轻则模糊不清,难以辨认,重则完全遮挡住我们想要的地物信息,完全无法获取,这将在我们进行环境监测、目标跟踪、自动导航等一系列活动时带来巨大困难。所以,为了提高图像数据利用率,研究如何有效去除云彩对遥感图像的遮挡影响是有必要的。本人对于图像拼接与图像去云有关的基础理论和重要技术进行了阅读研究,根据遥感数据的特征和实际运用的需求,查阅比较有关算法,设计并开发了适合遥感图像的图像拼接与除云系统.可以对多张有重叠区域的图像进行拼接,并对图片进行除云处理。1.2 国内外研究发展现状遥感图像拼接的主要难点在特征点匹配和图像融合,核心部分就是配准,与图像拼接的质量紧密相关。为此产生了两个分支,基于区域的图像配准是其中一个分支,它又可另外分为两种:直接操作图像像素,即基于空间域;对图像进行某种变换,再来配准,即基于变换域。而全局搜索法和模板匹配法又是基于空间域的图像配准策略的两种类别,两者直接利用图像的像素值,采用某种搜寻策略,如全局搜索法使待配准图像在参考图像上平移,确定当两图像重叠部分之间的近似度最高时的模型。早期图像配准时主要采用全局搜索法,但计算复杂,容易出错。模板匹配法相对于全局搜索法流程简化,匹配度高,但两者都要求图像不能含有较大噪声,计算量仍然较大,只解决平移问题。基于变换域的图像配准有相位相关法和扩展相位相关法。前者的算法性能不错、计算过程不复杂,和基于空间域的配准方法对比来看,其对光强的改变敏感度低、抗噪性能好,然而当图像经过了旋转或者缩放变换,相位相关法就不怎么管用了。在1996年Reddy结合相位相关法和对数极坐标变换,提出了扩展相位相关法,不像相位相关法,该方法在图片经过旋转和尺度缩放后依然适用,但计算较为复杂。另外一种是基于特征点匹配,该方法利用图像中提取到的局部特征进行匹配,如边缘、斑点、角点等。ChrisHarris和MikeStephens在20世纪80年代末以Moravec算法为基础,经过改进而提出了在特征检测方面更优秀的Harris检测算法,提高了算法稳定性及图像拼接的速度,在图像旋转情况下仍然适用,但是图像发生尺度变换时容易对像素邻域的窗函数运行产生较大影响,因此尺度缩放时就不怎么管用。而且该算法需要人亲自给予阈值,对多种情况适应力不够,结合自适应阈值算法是个改善算法性能的好途径。2001年D.H.Kim和YLYoon等人提出了一种基于强度的拟特征点投影配准算法降低了对应关系和归纳变换参数的计算量。20世纪最后一年对于图像处理领域是十分重要的一年,这一年LOWe大神提出了SIFT算法,并在2004年对这尺度不变特征变换算法做了改进。SIFT算法目前存在不少缺点,算法步骤又多又烦,构建图像金字塔、定位特征点等操作都会使计算误差越积越大,特征点稳定性不尽人意。尤其整个图像纹理不够多时,128维特征向量很可能出现雷同的情况,匹配特征点容易发生错误。但是SlFT算法的优点也十分突出,适应性稳定性都优秀,无论图像经过平移、旋转还是放大缩小,又或者其他的一些变换,照用不误;即使拍摄图像时周围环境光照发生变化,使用效果仍令人满意;特征点的特征向量信息丰富,匹配精度高;该算法还有很多延伸方向,可以与其他特征向量相结合,产生了更多优秀的算法。因而该算法成为了图像配准领域中的热门研究方向。2008年程远航根据无人机航空遥感成像的具体应用需求,实现了遥感图像的在线动态拼接。两年后即2010年毛家好针对无人机图像拼接工作时间长、拼接质量低的问题,改善了传统的基于特征图像拼接算法,使处理过程更加高效,进一步提升了算法的速度和精度。2016年贾银江"在诸多前人的基础上,主要对遥感图像的预处理、配准、融合过程进行了研究并做出了改进。总的来说,国内外的学者教授们在这一领域已经研究了许多内容,也创造了许多优秀的成绩,让遥感图像的拼接效果越发喜人。但不能单一地运用已有拼接算法,不同的应用领域对拼接效果有着不同的要求。1.3 课题研究目标和内容本课题的最终成果是开发出一个遥感图像拼接与除云软件,以python结合OpenCV>scipy等库实现核心功能,以Tkinter开发用户图形界面。在拼接方面,无需对图像集做出太大限制,软件可以从输入的无序图像集中自动确定不同图像间的顺序。针对图像亮度不一的情况,设置了曝光补偿功能。在除云方面,实现不同的方式来达到除云效果。既可以用同态滤波搭配巴特沃兹滤波器实现低频分量的薄云噪声的去除,输入影响除云效果的参数以调试效果,也可以用暗通道的方式结合输入的不同参数去除薄云。1.4本文组织结构第一章,论述本课题研究的背景,相关技术的国内外发展历史及现状,本课题研究的主要内容,本文的主要结构。第二章,介绍了本文涉及的一些知识理论和技术及与其他技术理论的比对等等,如稀疏矩阵、三种主要的特征检测算法、OPenCV库、薄云图像模型等等。第三章,介绍图像拼接与修复的关键算法和步骤的实现,如曝光补偿、最短路径法确定图像顺序、同态滤波除云、暗通道除云。第四章,论述用户图形界面的模块组成、用法和注意事项。第五章,先对各模块进行测试,对实验结果进行分析评价,保证程序功能正常运行。第六章,对本设计进行总结,论述一下已完成的工作,以及存在的问题和可能的改进方法。1.5本章小结本章介绍了课题的研究背景和意义,以及拼接方面的国内外学者的研究历史,还有这个课题期望实现的功能和内容。最后是本文的组织结构。第二章相关技术分析及比对2.1 稀疏矩阵矩阵是有m行n列共m*n个数值的二维数据对象。而当这些数值中大部分为0,而且这些零数值的分布没什么规律时,该矩阵可以称为稀疏矩阵。常用的存储格式有CSC、CCS、CSR等等。由于本文采用CSR,所以介绍一下CSR。用内存存储整个矩阵纯属浪费,我们可以不管那些零数值,用三个一维数组来存储稀疏矩阵的非零数值,一个存储元素数值,一个存储元素列下标,一个存储元素行下标。看如下图1002“0034-4560-6030p行下标数组也0,1,122,2,3,3,列下标数组032,3,0,2,0,2卜值数组1,2,3,4,4,5,6,6,3图2T稀疏矩阵的表示方式可以看到行下标数组不少元素对应着相同的行号,也是对空间的浪费。CSR对此作出改进,只记录每行的第一个非零元素在值数组中的位置,以及最后一个元素的位置加1。如下图所示,0、2、4、7分别为1、3、第二个4、第二个6在值数组的位置,9为3的位置加Io1002P0034”4560“6030”行下标数组0,2,4,7,9卜列下标数组0,3,230,l,2,0,2值数组1,234,4,5,6,6,图2-2CSR稀疏矩阵的表示方式2.2 常用特征点的对比对于同一场景或同一物体,如果从不同的角度观察,其中的某些点或块用一些标准识别的结果总是相同的,那么这些点或块能称为特征点。这些特征点常常有着某些非常突出的属性,比如一阶导数最大、图像梯度值变化非常快等等。也因为这种不同角度都能识别出来的尺度不变性,特征点在识别、定位、追踪方面用途广泛。特征点种类众多,对于图像拼接,sift、orb、SUrf使用的比较多。从诞生时间上来说,Sift最早,于1999年提出,并于2004年改善,而SUrf和Orb分别在2006年和2011年提出。后提出的往往有一些改进,surf和Orb比起Sift这个前辈,比较突出的就是计算速度上的提升。在时间上,SUrf算法相同情况下只需sift的三分之一;而Orb运行速度更是飞快。但是sift算法比较稳定,从一些论文来看,对于不同强度和颜色图片、对于旋转和缩放的情况下,sift的匹配率都是最好的,性能十分优越。也因此本次设计选择它来提取特征点。2.3 薄云图像观测模型一副图像的灰度可以简化为以下两个变量的乘积:f(x,y)=r(xty)*i(x.y)r(x,y)为照射变量,因为光照在空间上变化缓慢,所以在傅里叶变换下处于低频区域;i(x,y)是反射变量,由于不同物体不同场景对光的反射率变化差异极大,传感器接收到反射光所产生的图像灰度值也差异明显,因此反射变量为高频变量。以此同时,云区在空间上往往缓慢变化,也被认为是低频分量;而地物细节信息可以看做是高频分量。从这些信息中就可以假设一种去除薄云的方法,分离照射变量和反射变量,然后抑制低频分量,就能消除薄云信息,这也正是同态滤波3除云的理论基础。2.4OpenCV简介OpenCVtnl(OpensourceComputerVisionLibrary)是个建立于CC+语言基础上、在图像处理领域举足轻重的跨平台计算机视觉库,最初是由Intel建立,里面含括了的几百个函数可以用来解决计算机视觉的无数问题。它可以在多个操作系统下流畅运行,比如电脑上比较多的WindoWs、LinUX,还有苹果的MacOS,以及移动设备的Android等等,可承载的环境可以说十分多样。另外,Python、MATLAB等多种语言也能与OPenCV结合使用,OPenCV这个计算机视觉库可以说是非常兼容的。OPenCV基本上是开源免费的(除了极少部分被申请了专利,如Sift特征点),用户们都可以直接下载和使用源代码,也能修改源代码,参与到OPenCV的维护中,也因此用途广泛,无数人看好它在图像处理领域的前景。该库还对图像的数据获取、数据预处理、特征提取、特征选择、分类器设计与训练、分类判断这六个部分都提供了对应的应用程序接口。Modules上面是一张OPenCV的主要架构图t。Imgproc模块是OPenCV的图像处理模块,主要是对图像的转换、特征检测、几何变换等一些常用的图像处理算法。HighGUl就是个图形工具包,里面包含了摄像机、操作系统、文件系统等进行交互的一些函数,ML(MachineLeaming),也就是熟知的机器学习,中有很多回归分析、统计分类和聚类的类、函数等工具。Core模块是核心模块,里面有着OPenCV的基本数据结构、基础算法和相关函数。2.5快速最近邻搜索匹配和暴力匹配BFMatcher(暴力匹配)和FlannBasedMatcher(快速最近邻搜索匹配)是OPenCV提供的两种用于像sift、Orb等二维特征点匹配的常见方法。暴力匹配类似穷举法,对于一幅图像中的一个特征点,与另一幅图像中的所有特征点进行匹配(检测欧式距离),返回距离最近的几个特征点。这样的做法容易找到最佳匹配,但耗时之长可想而知。而最近邻匹配搜寻的是相对好的匹配点而不是最佳匹配,产生的误差相对前者比较大,但速度快很多,当对精度的要求不高时可以选择最近邻匹配,而要求高精度时可以通过增加快速最近邻搜索次数来提高,但算法速度会大幅下降。2.6两种颜色模型的对比颜色模型,又可称为彩色空间、颜色系统等等,是用来规范和生成各种颜色的一套标准和定义。最常用的一套模型便是RGB,此外还有LAB、HSV.HSl等各种颜色系统,另外还有OPenCV的BGR,本质上和RGB差不多,只是R和B调换了一下而已。从大量有关图像去除薄云的论文来看,关于彩色遥感图像的处理,主要分为RGB三通道分别处理和HSl中的I通道处理两方面。因此下面只介绍这两种颜色模型。2.6.1RGB颜色模型RGBw颜色模型广泛应用于电视、电脑等显示器,通过对R(红)、G(绿)、B(蓝)三个通道亮度的调节和相互之间的叠加,几乎能够得到人类所能感知到的所有颜色。三通道的亮度均可分为0到255共256阶,当三通道的亮度都为0时,即是最暗的黑色,当三通道的亮度都达到最高值255时,就是最亮的白色。如下就是RGB的颜色模型。图2-4RGB颜色模型2. 6.2HSI颜色模型HISg颜色空间以H(色调)、S(饱和度)、1(亮度)三个分量表示颜色。色调描述一种纯粹的颜色类型,如红色、蓝色等等。饱和度表示颜色被白光稀释的程度,饱和度越大,颜色就越稀释。亮度表示色彩的明亮程度。图2-5HSI颜色模型2.7本章小结本章主要对课题涉及的一些算法、理论、库等进行了介绍和比对,如CSr稀疏矩阵,三种常用特征点、薄云图像模型、OPenCV库以及RGB和HIS两种颜色模型。第三章遥感图像拼接与修复功能的实现3.1开发环境说明由于整个设计都用python语言编写实现,本次实验选择了anaconda3这个开源的python的库和包管理器,比起pycharm来安装方便,虽然是少了一些库,但已经包含了许多常用的数据科学包,具体在SPyder编写程序,如果发现anaconda缺乏要用的库和包的话,也可以打开anacondaprompt用conda命令下载相应的包。不过OPenCV3是需要另外下载的,而且需要下载相应配套的OPenCV-Contrib,项目需要用的Sift相关函数就在这个包里,另外由于后来Sift申请了专利,太靠后的版本无法免费使用,最终选择版本为OPenCV342。3. 2阈值选取为了精度着想,在特征点匹配方式上最终选取了BFMatCher(暴力匹配)。但无论选择哪一种,都离不开最近邻的欧式距离和次近邻的欧式距离的比较,只有最近邻的欧式距离小于次近邻的欧式距离足够多时,它作为最佳匹配的可信度才足够高,但如果最近邻的欧式距离和次近邻的欧式距离的比值太小时,达到要求的匹配点会大幅减少,对之后计算单应性矩阵很不利。对于这个阈值的选取,sift之父LoWe大佬建议是0.8左右,但后来又看到有人提出质疑,认为合适的阈值时0.4到0.6之间。起先试用过0.8的阈值,也许是情景的不同,大量无重叠区域的图片是能找到匹配点对的,这对确定图片顺序十分不利。为了选择合适的阈值,测试了60组大概两百来张图片,记录它们在0.2到0.9阈值间的匹配点数量和错误匹配出现次数。表格3-1各阈值下的图像特征点匹配情况阈值0.90.80.70.60.50.40.30.2合格匹配率36.8%26.7%24.7%23.8%23.1%22.0%20.4%17.2%错误匹配率100%100%98.8%47.6%28.7%20.0%19.4%9.5%合格匹配率指的是达到阈值标准的匹配点对和全部匹配点对的比值,错误匹配率指的是出现无重叠区域的图片间找到合格匹配点的情况的个数与所有可能出现无重叠区域的图片间找到合格匹配点的情况的个数,比如3张图片,只有图1和图2、图2和图3有重叠区域,那么可能出现图1和图3找到合格匹配点的情况,如果该情况真的出现,那么错误匹配率为100%。从表中可以看出,合格匹配率从0.8开始下降的不是很快。但从错误匹配率来看,0.7到0.9出现的情况几乎是百分之百,直到0.6出现断崖式下跌,0.5又下降许多,另外在0.2时出现过有重叠区域的图片没有合格匹配点的极端情况。错误匹配率尽量低而合格匹配率又稍高一点,0.4和0.5都挺合适,最终选择了0.4的阈值。3. 3曝光补偿在现实中由于飞行器飞行高度不同、拍摄时间不同等因素的影响,所拍摄的图片往往亮度不一致,如果未经处理就拼接在一起,往往会出现全景图一块区域偏暗一块区域偏亮的情况,为此,需要对进行拼接的一组图片进行曝光补偿,使它们的亮度趋于一致。在一组图片中,我们选择一张图片作为基准,对其他图片做亮度调整。因为无论是BGR还是RGB,三个颜色通道的变化都会对图片亮度产生影响,所以先把图片都改为LAB颜色空间模式,只有L通道的值会对亮度产生影响,我们就只需处理一个通道,然后再将颜色空间转换成BGR。计算公式I如下:IZ=,2+O2a2)*(1M2)÷ala2(3-1)其中和4为分别为基准图像L通道像素的均值和方差,&为补偿图像L通道调整后的像素值,为调整前的像素,和4为补偿图像调整前L通道像素的均值和方差。3.4确定无序图像的顺序经过了曝光补偿,还得确定图像间匹配的顺序,因为允许输入的图像是打乱顺序的,无法确定哪张和哪张有重叠区域。另外即使在特征点匹配中尽可能选择了好的阈值,仍会有漏网之鱼,明明没有重叠区域的两张图片,也会检测出几个几十个甚至几百个匹配点对。可以在这也设置个阈值,当匹配点对少于阈值时,认为这两张图片没有重叠区域,淘汰掉出现错误匹配的图片,也淘汰掉重叠区域小而找到的特征点少的图片。但阈值法效果有限,阈值无法设置的太大,万一过滤到有重叠区域的图片就得不偿失了。接下来才是关键的一步。在特征点匹配这一步骤是以字典的形式保存两两图片间的匹配点对,我们把其中的键提取出来,组成列表,然后列表转矩阵,再转置,如下图3-1,其中像(1,0)这种代表它曾是第二张图片和第一张图片(之后称为图(1)和图(0)的匹配点对的键,这样就得到了两个一维数组,同时,统计每个键所对应的值的长度(即匹配点对的个数),选择其中最大的长度再加1,然后拿这个值分别减去每个键所对应的值的长度,又得到一个数组,就是图中最底下的数组。然后拿1,3,3,2做行下标数组,0,1,2,1做列下标数组,再拿最后的数组做值数组,构建一个稀疏矩阵,如下图3-2。为了形象表示图片间的关系,可以用无向图的形式表示这个矩阵,如下图3-3,图2和图3之间的权值为1,意味着它们之间的匹配点对最多,而图(3)和图(D之间匹配点对数最少。我们选择其中一个点为基点(此次选图(D),用dijkstra算法寻找该点到其他点的最短路径,记录下目的地的前驱节点的序号,如下图3-4,第一个1代表从图(1)到图(0)的最短路径前驱节点为图(1),第二个-9999代表图(1)到图(1)没有路径,第二个1代表图(1)到图(2)的前驱节点也是图(1),最后的2代表从图(3)到图(2)前驱节点为图(2)0图(1)和图(3)其实是没有重叠区域的。然后就能发现图像序列已经确定了:0<>1<>2<>3O图3-1键的转换self.CUrrenJedgejnatrix(1,0)180(2,1)227(3,1)318(3,2)1Newedgematrix:0000180000022700031810图3-3根据稀疏矩阵构建的无向图Parentmatrix:1-999912图3-43. 5图像拼接接下来的步骤相对简单,所以一起描述。1 .根据上面步骤得到的图像顺序,计算两张图像间的单应性矩阵,通过这个矩阵可以了解2张遥感图像间的相对位置,其中基点图像的单应性矩阵是个单位矩阵。2 .获取每张图像四角的坐标0.,0.,0.,img.shape0,img.shape:2,img.shapel,0结合该图像对应的单应性矩阵做透视变换,得到变换后的坐标,其中基准图像的坐标未变。3 .得到变换后的若干坐标孙,通过循环比较得到%min,max¾nxXmS减去Xmin的值向上取整得到的值作为最终全景图的长,%n减去Vmizi的值向上取整作为全景图的宽,'min,%n向下取整再转整型变量后作为基准坐标4 .用上面得到的长宽我们可以做一张画布,并且像素值全设为0,也就是变成黑色,将每张图透视变换后的坐标也做第3步的操作,得到一个尺寸和个坐标,同时也对每张图像做一个透视变换。5 .将每张图像的左上角坐标减去第三步的基准坐标,便能得到坐标在全景图的相对位置,然后我们便能将图像一张一张添加上去,得到最终的全景图。6 .6矩形全景图的裁剪经过上述步骤就可以得到一张全景图,但是参与拼接的图像经常是无法填满整张全景图的,而且参与拼接的图像大小也往往不一致,无法完全对齐。于是会出现下面的情况。图3-5原始拼接图像为了达到这个目标,首先把全景图背景部分变成黑色,再在全景图四周加10像素宽的黑色边框,确保能找到全景图的完整轮廓。然后把整张图像转化为灰度图,然后把所有非零像素转化为255。而之前全景图背景是设为黑色的。于是图像变成如下黑白图图3-6,把这个图像称为thresh,可以看到一个不规则的白色区域。图3-6原始拼接图像转成的灰度图然后对白色区域进行轮廓检测,找到刚好能容纳白色区域的边界框,把这个边界框内部像素全部置255,得到如下图3-7。白色方框是容纳整个除去黑色背景的全景图的最小矩形区域。/®。今N图3-7能容纳全景图的最小矩形区域接下来准备上面图像的两个副本为maskl和mask2。对这两个副本做如下处理:1. maskl:对这个图像做腐蚀操作,使得白色区域不断减小,直到它刚好放入除黑色背景外的全景图中。2. mask2:用来存放maskl图像矩阵减去thresh的结果。灰度图中像素值为O时表现为黑色,像素值为255时表现为白色。如果像素值相减为负数时置0,超过255时置255。所以黑色像素减白色像素为黑色像素,白色像素减白色像素也为黑色像素。当mask2刚好不含非0像素时,maskl停止腐蚀。最终得到的图像如下图3-8,白色矩形区域即为我们要裁剪的全景图部分,获取其轮廓和坐标,可以获取矩形全景图如下图3-9。图3-8能确定全景图内最大矩形区域的掩膜图3-9裁剪的最终全景图为此对图片可以做进一步处理,裁剪出最终拼接图像的内部最大矩形区域。3.7色彩模型的转换由于没有库提供RGB与HSI相互转换的函数,我们必须自己实现两者间的转换。RGB到HSl的转换方式不止一种,我们采用经典的几何推导法,假设R、G、B分量都已被归一化到0,1区间,转换公式如下: fG Bg -12-fG<B (0 = cosiR-G+RB2y (R-G)2+(R-BXG-B)=)(3-2)(3-3)c13mn(R,G,)S=IR+G+BIR+G+BI=3(3-4)如下图所示从左到右分别为图像的H、S、I分量。在原图中云区主要集中在图像右下角,可以看到在I分量的右下角,也有一片区域相对于图像的其他区域亮度更高,这正是原图中的云区。许多文章认为,HSl格式下的图片,云噪声主要集中在I分量上,可以对该分量进行滤波等操作,去除薄云信息。图3-10 H、S、I各分量在对I分量进行滤波后,还要重新把图像从HSI色彩空间转换到RGB色彩空间,也要将三个分量归一化到0,1区间。将H乘以360使色调值回到0到360间。当(KHG20时,RGB分量由下图式子得出:B=IQ-S),R=l +ScosHcos(60-)卜G=3ITR+B)图3-11当0<H<120时的RGB分量计算公式当120<H<240时,首先H=H-120,RGB分量由下图式子得出:ScosHcos(60-H)G = I1 +A-,因中“。,再£?BQ盼B=3I-(R+G)图3-12当120<H<240时的RGB分量计算公式当240<H<360时,首先H=H-240,RGB分量由下图式子得出:G=IQ-S)B = I1 +ScosHcos(60-7)=3-(G+)图3-13当240<H<360时的RGB分量计算公式3. 8同态滤波除云前面第二章提到了该方法除云的理论基础,由于两函数相乘后的傅里叶变换无法分离,因此我们需要对两边取对数(对于bgr图像来说,f(x,y)的值在0到255之间,为了避免InO情况的出现,我们可以对f(x,y)加一个小值,我选择加0.001:ln(x,y)=ln(r(x,y)*i(xfy)=nr(x,y)+lni(x,y)(3-5)接下来对两边做快速傅里叶变换。得到F(Inf(%y)=F(Inr(%,y)+F(lni(x,y)(3-6)再做频谱中心化,使低频集中于图像中心,便于滤波。然后用滤波器进行滤波,滤波器形式为H(,y)=(Rh-RDH即(y)+Rl(3-7)R”和均用来控制滤波器幅度范围。由于我们是要抑制处于低频分量的云区,因此H即选用高通滤波器。巴特沃兹滤波器I是最合适的,函数公式如下:7M")=l+(2-l)(D0D(x,y)-(38)n为滤波器阶数,本文固定为2,DO为截止频率,。/)为点(/到图像中心点距离。接下来经过反中心化、傅里叶反变换、取指数得到滤波后的图像,再拉伸到0,255范围内。本文尝试了两种同态滤波处理方式,第一种是将图像变成HSl格式,仅对I分量进行处理,过程如下图。图3-14HSI同态滤波处理流程图第二种是就对RGB图像三通道都进行同态滤波,得到去云后的图像,如下:图3T5RGB同态滤波处理流程图3. 9暗通道除云暗通道是前几年比较流行的一种去雾方式,该方法也可以拿来去云。因为雾图的形成模型和云图的形成模型是一样的,如下:B(x)=A(x)t(x)+C(lt(x)(3-9)B(X)