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);
相关推荐
江屿风9 分钟前
C++图论基础单源最短路-常规版dijkstra算法/堆优化版dijkstra算法/bellman-ford 算法/spfa 算法流食般投喂
开发语言·c++·笔记·算法·图论
摇滚侠11 分钟前
MyBatis 入门到项目实战 MyBatis 逆向工程 62
java·开发语言·mybatis
ch.ju15 分钟前
Java Programming Chapter 4——Multi-level inheritance
java·开发语言
Molesidy18 分钟前
【Linux】【C++】Linux下的C++编程以及基于GDB的VSCode的C++调试
开发语言·c++
techdashen19 分钟前
用 Rust 真正发出 Ping:FFI 类型、newtype 与 MaybeUninit
开发语言·后端·rust
塵觴葉22 分钟前
基于Lua协程的简单任务管理
开发语言·lua
liulilittle23 分钟前
甲骨文云中国大陆定向 QoS 原理及绕过解决方案
服务器·开发语言·网络·计算机网络·oracle·通信·qos
iCxhust25 分钟前
C# 生成命令行程序 将hex格式烧录程序转换成bin烧录格式
开发语言·汇编·单片机·嵌入式硬件·c#·微机原理
Mortalbreeze26 分钟前
C++11类的新特性:移动语义、default、delete、override详解
开发语言·c++
xiaoshuaishuai827 分钟前
C# 封装与继承
开发语言·c#