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);
相关推荐
Dovis(誓平步青云)7 分钟前
《C/C+++ Boost 轻量级搜索引擎实战:架构流程、技术栈与工程落地指南——HTML文件的清洗(上篇)》
开发语言·数据库·c++·搜索引擎·开源
布朗克16815 分钟前
Go 入门到精通-13-指针与内存
开发语言·c++·golang·指针与内存
码兄科技8 小时前
Java AI智能体开发实战:从零构建智能对话系统指南
java·开发语言·人工智能
Drone_xjw9 小时前
从 GDB 到 CDB:C/C++ 程序调试的两把“手术刀”
c语言·开发语言·c++
SL-staff9 小时前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
2zcode11 小时前
基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
必须得开心呀12 小时前
QT解决中文乱码问题
开发语言·qt
这不小天嘛13 小时前
JAVA八股——redis篇
java·开发语言·redis
逝水无殇14 小时前
C# 字符串(String)详解
开发语言·后端·c#