MATLAB 数据掩膜函数

数据掩膜的好用函数:

除了 poly2mask,MATLAB 中还有其他用于数据掩膜的函数,适用于不同场景:

  1. roipoly:

    • 交互式选择多边形区域并生成掩膜。适合需要手动选择区域的情况。

    • 示例:

matlab 复制代码
 mask = roipoly(srtm);
  1. createMask (与 drawrectangle、drawpolygon 等配合使用):

    • 通过图形交互工具绘制形状(如矩形、多边形),然后生成掩膜。

    • 示例:

matlab 复制代码
   h = drawpolygon('Position', [cols, rows]);
     mask = createMask(h);
  1. inpolygon

    • 直接检查点是否在多边形内,返回逻辑数组。适合处理非图像数据或需要更灵活的场景。

    • 示例:

lon_grid, lat_grid = meshgrid(lon_range, lat_range);

mask = inpolygon(lon_grid, lat_grid, poly_lon, poly_lat);

  1. boundarymask (Image Processing Toolbox):

    • 从二值图像或分割结果中生成边界掩膜。

    • 示例:

mask = boundarymask(segmented_image);

  1. 地理数据掩膜(Mapping Toolbox):

    • 如果处理地理数据,可以使用 geocrop 或 geoclip 直接按地理坐标裁剪数据。

    • 示例:

matlab 复制代码
  [cropped_data, cropped_R] = geocrop(srtm, R, latlim, lonlim);

其他注意事项:

• 如果多边形区域较大或数据分辨率较高,掩膜生成可能会消耗较多内存。可以尝试分块处理或优化多边形顶点数量。

• 对于全球或大范围数据,建议使用地理坐标系统(如 inpolygon)而非图像坐标系统(如 poly2mask),以避免投影变形的影响。

希望这些信息对你有帮助!

程序介绍

这段 MATLAB 代码主要用于从 SRTM(航天飞机雷达地形任务)的 GeoTIFF 数据中提取指定多边形区域的高程范围(最大值和最小值)。以下是代码的详细介绍:

代码功能说明:

  1. 读取数据:

    • 使用 geotiffread 函数读取 GeoTIFF 格式的 SRTM 高程数据,返回高程矩阵 srtm 和空间参考对象 R。

    • 将无效数据(如 -32768)替换为 NaN,以便后续计算时忽略这些值。

  2. 定义多边形区域:

    • 通过经纬度坐标(poly_lon 和 poly_lat)定义一个四边形区域,用于提取该范围内的 SRTM 数据。

  3. 坐标转换:

    • 使用 latlon2pix 函数将经纬度坐标转换为图像的行列索引(像素坐标),以便在图像中定位多边形区域。

  4. 生成掩膜:

    • 使用 poly2mask 函数根据多边形坐标生成一个二值掩膜矩阵,标记出多边形区域内的像素(值为 1)和区域外的像素(值为 0)。

  5. 提取区域内高程值:

    • 通过掩膜矩阵提取多边形区域内的 SRTM 高程值,存储在 srtm_region 中。

  6. 计算高程范围:

    • 使用 max 和 min 函数计算区域内高程的最大值和最小值,忽略 NaN 值。

  7. 输出结果:

    • 打印区域内的高程范围(最大值和最小值)。

main_process

matlab 复制代码
% 1. 读取 SRTM GeoTIFF 数据
[srtm, R] = geotiffread('srtm_mosaic_asp-adj.tif');  % 替换为实际路径
% srtm = double(srtm);  % 确保为 double 类型以便数值运算

% 若有 nodata 值(比如 -32768),将其设置为 NaN
srtm(srtm <= -32768) = NaN;

% 2. 定义四边形经纬度坐标(顺时针或逆时针)
% 示例:经纬度 [lon, lat]
poly_lon = [  81.295004, 95.423861, 94.174992, 80.938984];  % 经度
poly_lat = [ 42.752665,  40.485906, 37.647841, 40.034679];      % 纬度



% 3. 将经纬度坐标转换为图像行列(像素索引)
[rows, cols] = latlon2pix(R, poly_lat, poly_lon);  % R 是 spatial referencing object

% 4. 生成掩膜
mask = poly2mask(cols, rows, size(srtm,1), size(srtm,2));

% 5. 提取区域内像素值
srtm_region = srtm(mask);

% 6. 计算最大值和最小值(忽略 NaN)
max_val = max(srtm_region, [], 'omitnan');
min_val = min(srtm_region, [], 'omitnan');

% 7. 输出结果
fprintf('SRTM Elevation Range in Selected Area:\n');
fprintf('  Max Elevation: %.2f meters\n', max_val);
fprintf('  Min Elevation: %.2f meters\n', min_val);
相关推荐
铲灰2 分钟前
做个总结而已
开发语言
IvanCodes10 分钟前
Python 文件操作(十二):文件与目录的读写
开发语言·python
神仙别闹8 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读9 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
2601_9669496512 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_7345717612 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
RAN114267600813 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .14 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^1382879887214 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
泡海椒15 小时前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言