在metashape中使用反射率标定板为多光谱数据校准 一、光谱数据导入首先删除多光谱数据中的rgb图像并把拍摄的多光谱标定板图像也放入文件夹中打开metashape导入文件夹添加照片面板中选择多光谱选项图像导入完成二、反射率标定板配置1.找到反射率面板打开工具菜单并选择Calibrate Reflectance选项Tools Calibrate Reflectance...。按Locate Panels按钮如果未检测出任何标定板信息则需要手动添加标定板。2.手动添加遮罩校准图像工作区中右击images文件夹点击“添加摄像头组”创建文件夹并将其命名为Calibration images注意这里必须使用Calibration images作为文件夹名否则软件无法识别。将定标板图像移入新建的校准图像文件夹这里按照多相机模式导入四个波段只显示一张图像。使用智能剪刀工具为每张图像创建遮罩注意创建的遮罩要覆盖除标定板以外的全部区域因此可以使用智能剪刀框选出标定板所在区域点击工具栏的“反向选择”2再点击“添加选择”3即可创建遮罩。所有标定板图像遮罩添加完毕后打开工具选择Calibrate Reflectance选项Tools Calibrate Reflectance...,点击locate panels,即可看到添加的标定板。3.输入标定板的反射率输入标定板各个波段的反射率值由生产厂家提供并勾选光传感校准然后点击ok4.设置图像亮度图像亮度设置后打开工具选择set brightness选项,点击“预计”然后点击ok即可至此反射率标定板配置全部完成。三、数据处理1.对齐照片从“工作流程” 菜单打开“对齐照片”对话框工作流程对齐照片...并使用以下参数对齐结果如下2.优化摄像机要提高对齐精度请使用Tools 工具菜单中的Optimize Cameras并选择以下参数进行优化 。3.构建点云生成点云可以重建更精确的表面从而提高最终正射镶嵌的质量。从工作流程菜单工作流构建点云...中打开构建点云对话框并使用以下参数使用的质量越高表面就越精确点数越多但需要更长的时间来处理。在大多数情况下中等质量足以进行航空数据处理尤其是在地形变化较小的情况下。点击ok处理结果如下4.构建 DEM从工作流程菜单工作流程构建 DEM...中打开Build DEM对话框并使用以下参数DEM构建结果如下5.构建正射镶嵌Build Orthomosaic从工作流程菜单工作流程构建正射镶嵌...中打开构建正射镶嵌Build Orthomosaic对话框并使用以下参数总尺寸点击“预计”按钮即可显示。构建结果如下四、计算植被指数使用Tools菜单中的Set Raster Transform选项打开Raster Calculator对话框Tools Set Raster Transform...要从源数据计算反射率值100% 反射率对应 32768。因此需要对处理好的图像除以32768才能得到百分比的反射率。例如像元值 6554 约为反射率 0.2016384 对应 0.5032768 对应 1.00。在Palette面板中点击自动计算结果如下五、处理结果导出要导出正射镶嵌生成的结果请使用文件导出导出正射镶嵌。请注意导出正射镶嵌对话框中的栅格变换部分红框处以下选项可用无 - 表示导出的正射镶嵌将包含与源数据对应的相同数量的波段任何变换公式都将被忽略;索引值Index value - 此选项允许保存 栅格计算器 对话框中的变换公式定义的输出波段;索引颜色(Index color) - 根据 Raster Calculator 对话框中的调色板设置将正射镶嵌保存为 RGB 颜色。导出的栅格图像看起来与正射视图模式下的正射镶嵌显示相同前提是在栅格计算器对话框的变换部分中选中启用选项。六、使用python查看输出信息输出时栅格变换(Raster transform)选择了Index value因此输出为自己设置的指数即NDVI。使用代码进一步处理tif图像输出以下信息1.图像的波段数、长宽、地理坐标系。2.每个波段的均值、平均值、中位值、标准差。3.每个波段在某个值范围内出现最多的值即计算每个波段值的频率分布。 本代码可输出以下信息 1.图像的波段数、长宽、地理坐标系。 2.每个波段的均值、平均值、中位值、标准差。 3.每个波段在某个值范围内出现最多的值即计算每个波段值的频率分布。 4.去除图像内的NAN值 import matplotlib.pyplot as plt from matplotlib import rcParams # 设置字体为 SimHei (黑体) rcParams[font.sans-serif] [SimHei] # 设置中文字体为黑体 rcParams[axes.unicode_minus] False # 解决负号问题 import rasterio import numpy as np import matplotlib.pyplot as plt # 读取多光谱遥感图像 image_path C:/Users/Desktop/测试校准/NDVI.tif # 替换为图像路径 with rasterio.open(image_path) as src: # 获取波段信息 bands src.read() # 读取所有波段数据返回一个NumPy数组 band_count bands.shape[0] # 波段数目 width src.width # 图像宽度 height src.height # 图像高度 crs src.crs # 获取坐标参考系 # 获取图像的元数据 metadata src.meta print(图像元数据:, metadata) print(f波段数: {band_count}) print(f图像长宽: {width}x{height}) print(f地理坐标系: {crs}) # 设置绘图的行列数 rows int(np.ceil(band_count / 3)) # 每行显示3个波段可根据需要调整 cols min(band_count, 3) # 每列最多显示3个波段 # 创建子图 plt.figure(figsize(15, 5 * rows)) # 设置图形大小 # 计算每个波段的统计信息并绘制图像 for i in range(band_count): band bands[i] # 获取第i个波段数据 # 删除值为65535, -32767和NaN的像素 band band[(band ! 65535) (band ! -32767) ~np.isnan(band)] # 计算统计值 mean np.mean(band) # 均值 median np.median(band) # 中位值 std np.std(band) # 标准差 # 计算频率分布 unique, counts np.unique(band, return_countsTrue) most_common_value unique[np.argmax(counts)] # 获取出现最多的值 # 输出每个波段的统计信息 print(f\n第{i 1}波段统计信息:) print(f均值: {mean}) print(f中位值: {median}) print(f标准差: {std}) print(f出现最多的值: {most_common_value}出现次数: {np.max(counts)}) # 自动划分区间基于分位数 percentiles np.percentile(band, [0, 25, 50, 75, 100]) # 计算分位数 print(f自动划分的区间基于分位数: {percentiles}) # 计算各范围内点个数的比例 # 使用分位数进行区间划分 bins percentiles # 使用分位数作为区间 counts_in_ranges np.histogram(band, binsbins)[0] # 计算每个区间内的像素个数 total_count np.sum(counts_in_ranges) # 总有效像素个数 proportions counts_in_ranges / total_count # 计算比例 # 输出各个区间的比例 print(f各个范围内点的比例) for j in range(len(bins) - 1): print(f{bins[j]:.2f} - {bins[j 1]:.2f}: {proportions[j] * 100:.2f}%) # 绘制图像 plt.subplot(rows, cols, i 1) # 创建子图 plt.imshow(bands[i], cmapgray, vminnp.min(band), vmaxnp.max(band)) # 根据波段的最小值和最大值进行缩放 plt.colorbar() plt.title(f第{i 1}波段) plt.tight_layout() # 调整子图间距 plt.show()输出如下