ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

基于OTSU的遥感图像云区识别提取附matlab代码

2026/9/12 10:18:41 拓冰建站 浏览量
基于OTSU的遥感图像云区识别提取附matlab代码 文章目录概要整体架构流程1国内外在云区识别的现状和发展2云区识别的相关理论和技术详看概要3本节主要采用的技术和解释1. 算法流程图2. 构建类间差距图像B原理3. OTSU算法主要原理如下4. 迭代更新主要原理 代码实现结果未给全1、生成初始云区分割图2、生成中间识别结果云区图3、形态学转化后标记云区面积以及周长4、利用BQA波段进行云区显示概要本节参考资料杜家昊. 遥感图像云检测技术的研究[D].中国科学院大学(中国科学院国家空间科学中心),2021.DOI:10.27562/d.cnki.gkyyz.2021.000037.秦永,付仲良,周凡等.一种利用TM影像自动检测云层的方法[J].武汉大学学报(信息科学版),2014,39(02):234-238.DOI:10.13203/j.whugis20120620.参考博客主页https://blog.csdn.net/qq_38376586/article/details/90216424数据来源地理空间数据云备注如有侵权还请作者联系我会第一时间删除整体架构流程1国内外在云区识别的现状和发展根据查阅相关资料显示国内外学者在云区域识别上面已经发现了很多也很实用的技术方法和理论。主要用到的方法有1阈值分割 2机器学习算法 3深度学习算法国内外在此上三个技术上的差别如下国外国内阈值分割Famsk算法1、KmeansD-S联合置信度 2、云与非云地物的反射辐射特征统计表选取合适特征构建三维分布统计图确定云与非云的集群分布阈值机器学习算法人工神经网络、支持向量机、随机森林预处理滤波、形态学变换、直方图均衡化提取纹理之后才采用人工神经网络、Kmeans聚类、随机森林、支持向量机深度学习算法卷积神经网络CNNCNN、FCN、SegNet、U-Net2云区识别的相关理论和技术详看概要光谱特征纹理特征简单阈值、多阈值、OTSU 、Statistics支持向量机(SVM)、PSVM、三维灰度共生矩阵3本节主要采用的技术和解释1. 算法流程图2. 构建类间差距图像B原理根据遥感图像各波段的光谱特征来讲如下表所示其中band6的云层和雪区呈现出灰暗或者黑暗的特征这与其他波段差别还是很大的。由于band6属于热红外波段所以会导致云层以及雪的反射率偏低学过遥感的人都知道雪与云的反射光谱和太阳的很像在 0.4 ~ 0.6微米时其放射率快100%所以也就导致在人眼可见光波段上下都会呈现出白色。但是随着波段的不断增强进入中红外波段后其吸收逐渐增强变成了一个吸收体特别是在band6其呈现了特别的黑色和灰暗色。我们知道对于单波段遥感图像来说其值主要在0~255之间所以对于band6来说其云区的值主要倾向于255的较大值但是对于band1 ~ band3来说这些云区主要倾向于0的较小值。根据这一特性我们就可以利用Bband1band2、band3/ band6来得到加大类间差距得图像B为下一步的OTSU算法做好准备。3. OTSU算法主要原理如下该章主要采用的OTSU算法也称做最大类间方差法最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适合于双峰情况的自动求取阈值的方法,又叫大津法,简称Otsu。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。我们假设初始阈值为T0其将图像分割为前景和后景两部分其中W0表示前景的灰度值累计占比W1表示后景的灰度值累计占比U0表示前景的灰度值平均值U1表示后景的灰度值平均值g表示类间方差。所谓OTSU算法就是在灰值图上面的值域区间0~255内依次更新阈值T的值当其类间方差g取最大值时迭代结束此时所对应的阈值T即为最优阈值。4. 迭代更新主要原理 明明上面已经能够识别识别云层为什么还要进行迭代更新呢我们知道云与雪虽然有时候高度不同且性质也不同但是其光学色彩却很相似都呈现出白色。这也导致了在band1 ~ band4波段上面无法直接区分而且上面进行阈值分割之后云层和雪还是没有分开但是在band5波段时其就开始出现差异。**云层在band5波段上面呈现出高反射雪在band5波段上呈现出低反射**因此我们参考band5波段对分割后的图进行更新其中Mij表示OTSU分割后的图的第ij个像元值ii∈1 ~ row表示行jj∈1 ~ col表示列Aij表示band5的第ij个像元值J表示band5波段图像像元的均值。代码实现结果未给全1、生成初始云区分割图主要用到的函数时是graythresh函数此函数在matlab里面是利用OTSU算法确定阈值的核心函数movemean函数为均值平滑函数目的是去噪声。clc;clear all;formatlongg;band1double(geotiffread(B1.tif));band6double(geotiffread(B6.tif));Bdouble(band1./band6);Tgraythresh(B);OTSU_IMGimbinarize(B,T);figure;imshow(OTSU_IMG);title(初始识别云区--band1/band6--阈值分割(OTSU),Color,r,FontSize,15);smooth_OTSU_imgmovmean(OTSU_IMG,6);2、生成中间识别结果云区图band5geotiffread(B5.tif);%对5波段求均值 judge_datamean(mean(band5));[row,col]size(band5);judge_imgzeros([row,col]);fori1:rowforj1:colifsmooth_OTSU_img(i,j)0judge_img(i,j)0;elseifband5(i,j)judge_databand5(i,j)judge_datajudge_img(i,j)1;elsejudge_img(i,j)0;end end end end judge_imgmovmean(judge_img,6);figure;imshow(judge_img);title(中间识别结果云区--band5--迭代更新判断,Color,r,FontSize,15);3、形态学转化后标记云区面积以及周长这一部分对matlab的要求比较高其具体过程以及函数意义还请读者自己查看参考博客通过将上一步骤的云区图进行开闭运算之后进行形态学操作后标记其面积并统计云区总面积和总周长。%参考博客 https://blog.csdn.net/qq_38376586/article/details/90216424sestrel(disk,5);BW_img1imclose(judge_img,se);BW_img2imopen(BW_img1,se);[mark_image,num]bwlabel(BW_img2,4);statusregionprops(mark_image,BoundingBox);centroidregionprops(mark_image,Centroid);figure;imshow(mark_image);title(形态学操作--标记云区--面积编号,Color,r,FontSize,15);copy_mark_imagemark_image;forii1:numrectangle(position,status(ii).BoundingBox,edgecolor,r);image_part{ii}(copy_mark_imageii);round_area(ii)regionprops(image_part{ii},Area);text(centroid(ii,1).Centroid(2,1)-15,centroid(ii,1).Centroid(1,2)-15,...strcat(S(,num2str(ii),),num2str(cell2mat(round_area(ii))),m^2),...Color,g)length(ii)regionprops(image_part{ii},Perimeter);end total_areasum(cell2mat(struct2cell(round_area)));total_lengthsum(cell2mat(struct2cell(length)));strcat(云区总面积为,num2str(total_area),平方米)strcat(云区总周长为,num2str(total_length),米)4、利用BQA波段进行云区显示至于BQA波段很多学者都会拿它作为遥感云区的提取通过读取完BQA波段我们发现其和我们识别提取的云区图很相似然后通过三个云区图再与三波段融合的彩色图进行叠加我们可以进一步证实云区的正确性这里就不进行代码演示需要的评论区留言。QTA_band_imggeotiffread(BQA.tif);figure;QTA_imgmat2gray(QTA_band_img).*5;imshow(QTA_img);title(Landsat--BQA波段--云量显示,Color,r,FontSize,15);