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); 4. **boundarymask** (Image Processing Toolbox): • 从二值图像或分割结果中生成边界掩膜。 • 示例: mask = boundarymask(segmented_image); 5. 地理数据掩膜(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); ```

相关推荐
Fly-ping1 小时前
【前端】JavaScript 的事件循环 (Event Loop)
开发语言·前端·javascript
范纹杉想快点毕业1 小时前
基于C语言的Zynq SOC FPGA嵌入式裸机设计和开发教程
c语言·开发语言·数据库·嵌入式硬件·qt·fpga开发·嵌入式实时数据库
rockmelodies2 小时前
【PHP安全】免费解密支持:zend52、zend53、zend54好工具
开发语言·安全·php
Reggie_L2 小时前
Stream流-Java
java·开发语言·windows
巴伦是只猫2 小时前
Java 高频算法
java·开发语言·算法
程序员编程指南2 小时前
Qt容器类:QList、QMap等的高效使用
c语言·开发语言·c++·qt
雄狮少年2 小时前
智能体服务封装
开发语言·windows·python
点云SLAM2 小时前
C++中std::string和std::string_view使用详解和示例
开发语言·c++·算法·字符串·string·c++标准库算法·string_view
超浪的晨2 小时前
Java 实现 B/S 架构详解:从基础到实战,彻底掌握浏览器/服务器编程
java·开发语言·后端·学习·个人开发
Littlewith2 小时前
Java进阶3:Java集合框架、ArrayList、LinkedList、HashSet、HashMap和他们的迭代器
java·开发语言·spring boot·spring·java-ee·eclipse·tomcat