ENVI遥感图像裁剪全攻略:规则分幅、ROI与掩膜实操详解
简介这份PDF以实习报告形式梳理了ENVI遥感图像处理的核心操作面向遥感、GIS专业本科生以及刚接触ENVI软件的研究人员尤其适合需要完成课程实习或实验报告的学习者。内容聚焦图像预处理、裁剪和掩膜三类任务讲清了每一步的菜单入口、参数设置和输出文件含义能帮读者少走弯路。资源为单个PDF文件共1份体积仅3.12MB无需解压或额外安装工具手机、平板和电脑上都能直接打开翻阅。目前已有1633人浏览学习在同类型实习资料中关注度较高。具体内容包括规则分幅裁剪、不规则分幅裁剪下的手动绘制感兴趣区与矢量数据生成感兴趣区两种实现方式以及掩膜文件的创建与应用每个环节都配有菜单路径、参数设置和输出说明。读者既可跟随流程完成全套影像裁剪与掩膜实验也可在遇到菜单找不到、参数不会设时快速查阅对应步骤对实际学习和报告整理都有帮助。1. 从一份实习报告说起ENVI 遥感图像处理的裁剪操作其实只有三件事ENVI 遥感图像处理里的图像裁剪常被新手当成「切西瓜」——框一块、切一块、完事。实际上它分三条路线规则分幅裁剪、不规则分幅裁剪ROI、掩膜。三者处理的是同一个需求「把大面积影像变成研究区」但背后的数据逻辑完全不同一个改的是范围框一个改的是矢量边界与背景值一个改的是 0/1 波段参与运算的方式。这篇笔记以一份 2012 年的 ENVI 实习报告为线索把这三条路线的菜单路径、参数含义和最容易翻车的地方逐一拆开。适合正在做二类调查、林业区划、地块提取需要把大影像裁成小区域的从业者——照着操作能复现踩过的坑也提前替你排掉。2. 规则分幅裁剪Spatial Subset 的交互逻辑与三个关键参数2.1 为什么规则裁剪必须走 New File Builder规则分幅裁剪就是把影像按一个矩形范围切出来输出一个独立的、只包含该范围的新文件。实习报告里的操作路径是File→Open Image File 打开 bhtmsat.img然后 File→Save File as→ENVI Standard进入 New File Builder 对话框。很多新手在这里犯第一个错误直接对已显示的图像点右键另存或者用 File→Save As 输出整幅图结果磁盘里多了一个和原图一模一样的大文件。New File Builder 的设计意图是让你在「不加载全图、不写全图」的前提下从输入文件中挑选一个子集来生成新文件。也就是说它把「输出」和「选择」拆成了两步先在 Input File 里指定源文件再通过 Spatial Subset 和 Spectral Subset 决定空间与波段范围。这个机制在老版本 ENVI 里几乎是规则裁剪唯一稳妥的入口也正是因为这一点规则裁剪的流程天然适合批量处理——你只需要把参数记下来换一张影像再做一遍同样操作。从数据处理的角度看规则裁剪并不改变像元值只是重新定义了数据的存储范围。输出文件的行列数会变成你裁剪框的大小投影和像元分辨率保持原样。所以规则裁剪适合那些边界本身就规整的场景比如按标准分幅号切图、按固定网格切瓦片或者先行试探「把整景影像切成 4 块处理」。2.2 完整操作流程与参数表在 ENVI 界面里实际操作时我会按下面这个顺序走。菜单路径以实习报告为准如果你的版本菜单名不同优先在 File 菜单下找带「Save As / Export」字样的入口。第一步打开源影像 bhtmsat.img确认它正常显示在 Available Bands List 里。第二步进入 File→Save File as→ENVI Standard弹出 New File Builder。第三步单击 Import File 按钮在 Create New File Input File 对话框里选中刚才打开的影像然后点 Spatial Subset。第四步在 Select Spatial Subset 对话框中单击 Image 按钮进入 Subset by Image 界面。到了 Subset by Image 这一步交互方式就直观了对话框会显示影像的缩略图并叠加一个红色矩形框。你可以用鼠标左键拖动这个框来确定裁剪区域也可以在对话框里直接输入行列数来精确控制尺寸。修正好区域后点 OK 返回Select Spatial Subset 对话框会列出裁剪后的行列数、起始行列号等区域信息确认无误再点 OK。如果只想输出部分波段在 Create New File Input File 对话框里点 Spectral Subset挑出需要的波段最后选输出路径和文件名。这个流程里最关键的交互参数是下面这组控件/参数作用常规设置Image 按钮进入图形化裁剪框交互界面必须进入否则只能手动输行列号行列数输入框精确设定输出影像的尺寸列宽度行高度按目标区域计算例如 2000×1500红色矩形框可视化确定裁剪位置与大小左键拖拽移动拖角调整大小Spatial Subset 汇总信息显示起始行列与输出行列数用于二次确认核对无误再点 OKSpectral Subset选择保留哪些波段输出不需要全波段时使用如仅保留 RGB 或某单波段输出路径与文件名决定新文件写入位置建议连同批次信息命名例如 bhtmsat_subset_2000.img参数说明行列数的核心是「输出多少个像元」而不是「绘制多大面积」。同一景影像分辨率固定时行列数越大覆盖范围越大如果你想裁剪出 10km×10km 的范围需要先用影像分辨率换算成行列数再输入。红色矩形框在缩略图上的拖动精度有限适合快速定位精确到像元级别还是要靠行列数输入框校准。2.3 规则裁剪的结果检查一列一行都不能差输出完成后不要急着拿去用先做两步检查。第一步查看输出文件的 Dimensions 信息File→Edit Header 或右键打开 Header Info确认行列数与你在 Spatial Subset 里设定的值完全一致。第二步把裁剪结果和原图同时打开切换到相同的地理坐标位置看地物轮廓是否对齐。如果只是裁剪地物不应该有任何位移或变形。这里额外说一个查看影像经纬度的习惯动作。规则裁剪之后你常需要确认「裁出来的这块到底覆盖了哪片区域」。在显示裁剪结果的窗口里调出光标位置面板老版本常见路径是 Utilities→Cursor Location鼠标在影像上移动时面板会实时显示当前像元的经纬度或投影坐标。用这个功能核对裁剪框四角坐标比肉眼对着缩略图判断可靠得多。3. 不规则分幅裁剪手动 ROI 与矢量 ROI 两条路线的取舍3.1 ROI 的本质把「不规则的想要区域」变成数据对象不规则分幅裁剪解决的问题很具体研究区边界不是矩形可能是流域、行政区边界或者地块轮廓。你没法用一个矩形框去完美贴合所以 ENVI 引入了 ROIRegion of Interest感兴趣区。ROI 本质上是一个矢量对象——一个或多个多边形叠加在影像上用来标记「哪些像元我要保留哪些像元我不要」。实习报告里提供了两条生成 ROI 的路线手动绘制以及用已有 Shapefile 矢量数据生成。两条路线最终都指向同一个命令Basic Tools→Subset data via ROIs。这个命令执行时系统会读取你选中的 ROI 多边形把多边形内的像元保留多边形外的像元置为背景值。换句话说不规则裁剪的实质是「用 ROI 定义有效区域用背景值填充无效区域」。这里要特别留意 Mask pixels outside of ROI 这个参数。它问的是「ROI 外面的像元怎么处理」选项只有 yes 和 no。选 yesROI 外像元会被置成你指定的 Mask Background Value选 noROI 外的像元会被丢弃输出文件的范围会被压缩到 ROI 的外接矩形。理解这个差别很重要——选 yes 时输出影像的行列数通常和原图范围有关选 no 时行列数是 ROI 外接矩形的大小。3.2 手动绘制 ROI什么时候该用手动什么时候该放弃手动绘制 ROI 的流程不复杂打开 can_tmr.img 并显示在 Image 窗口里选择 Overlay→Region of Interest在 ROI Tool 对话框中将 ROI_Type 设为 Polygon然后在图像上用鼠标点击绘制多边形的顶点右键结束。绘制完成后通过 Basic Tools→Subset data via ROIs 进入裁剪在 Spatial Subset via ROI parameters 对话框里选中你绘制的 ROI把 Mask pixels outside of ROI 设为 yesMask Background Value 设为 0输出即可。手动绘制的适用边界其实很窄。我一般只在两种情况下手动一是边界本身就是凭影像解译出来的比如某个水体、某个地块的目视轮廓二是临时快速看一眼某个不规则范围的处理效果。它最大的问题是重复性差——同一个范围你这次画的十边形和下次画的十边形一定不完全重合而且对于几十公里长的不规则边界靠鼠标逐点勾绘既不现实也不准确。经验是边界画出超过 20 个顶点时就值得停下来找矢量数据了。参数设置上Mask Background Value 填 0 是最常见做法但要注意背景值本身不能被处理流程误解。如果后续步骤要做分类或者统计0 值像元往往会被计入直方图除非你后续用掩膜再排除一次。所以更稳妥的做法是裁剪后先检查输出图像的直方图确认背景值确实为 0再决定是否要做一次去背景处理。3.3 矢量数据生成 ROI从 Shapefile 到裁剪结果的完整链路矢量生成 ROI 是生产环境里更常用的一条路。实习报告里的步骤是File→Open Vector File 打开目标区域的 Shapefile投影参数保持原样导入方式选 Memory然后在 Available Vector List 对话框中通过 File→Export Layer To ROI把矢量图层转成 ROI在 Export EVF Layer to ROI 对话框中选择 Convert all records of an EVF layer to one ROI把图层内所有要素合并成一个 ROI最后通过 Basic Tools→Subset data via ROIs 完成裁剪参数同上Mask pixels outside of ROI 选 yesMask Background Value 填 0。这条链路的成败关键在第一步——投影参数。Shapefile 自带投影信息如果它和你打开的影像投影不一致ENVI 在导入时默认按原投影读入但导出 ROI 到影像坐标系时可能出现错位。以我的处理习惯打开矢量文件时弹出的投影对话框不要直接跳过确认矢量投影与影像投影是同一套或者至少是同一基准下的不同投影例如 CGCS2000 下的高斯投影与地理坐标。手动 ROI 与矢量 ROI 的对比可以浓缩成下面这张表对比项手动绘制 ROI矢量数据生成 ROI精度受鼠标点击位置影响像元级误差受矢量数据本身精度影响边界光滑重复性同范围重复绘制难以完全一致同一矢量文件可反复使用适用场景目视解译边界、快速试验行政区划、林班地块、确权边界前置条件无需要现成的 Shapefile 或可导入的矢量格式常见失败点多边形闭合失败、顶点遗漏投影不一致导致位置偏移补充说明一下 Convert all records of an EVF layer to one ROI 这个选项。当一个 Shapefile 里有多个地块要素时你既可以把每个要素转换成独立的 ROI也可以把所有要素合并成一个 ROI。选择合并的前提是这些地块在后续处理中的待遇一致。如果每个地块需要单独出结果那就不要合并逐条转出。4. 掩膜用 0/1 波段做裁剪为什么是更灵活的思路4.1 掩膜的两步法设计Build Mask 与 Apply Mask 为什么分开掩膜Mask的思路和 ROI 裁剪有一个本质区别ROI 裁剪是把 ROI 外的像元直接置成背景值是一次性操作掩膜则是先生成一个独立文件——一个与影像同尺寸、只含 0 和 1 两个值的栅格层——再通过 Apply Mask 把它应用到影像上。0 代表屏蔽1 代表保留。为什么要绕这一圈实习报告里其实已经暗示了这个设计的好处掩膜文件可以反复使用。同一份矢量边界生成的掩膜今天应用在原始影像上明天应用在另一景相邻影像上不需要重新画 ROI也不需要重新做裁剪。而且 Build Mask 生成的掩膜文件是独立的你可以先检查它的形状对不对、边界是否贴合确认无误再执行 Apply Mask——这在生产流程里意味着「错误不会一路穿透到最终产品」。掩膜这种思路在处理 GF-5 高光谱这类数据时尤其受用。高光谱影像波段多、数据量大直接对原图做 ROI 裁剪每次操作都伴随大量 I/O而掩膜只是记录「哪些位置有效」的二元栅格与波段数量无关。你先建好掩膜再一次性应用到需要的波段集上效率高得多。4.2 创建掩膜文件参与参数与操作步骤实习报告里的掩膜创建流程分四步。第一步File→Open Vector File 打开研究区的 Shapefile投影参数不变导入 Memory。第二步File→Open Image File 打开待裁剪影像并显示在 Display 中。第三步Basic Tools→Masking→Build Mask在 Select Input Display 中选择被裁剪影像所在的 Display 窗口——这一步很关键系统会根据这个窗口对应的影像尺寸自动把掩膜大小设定为与影像一致。第四步在 Mask Definition 对话框中通过 Options→Import EVFs 导入第一步的 Shapefile然后选择输出路径完成掩膜文件生成。这里最容易被忽略的是 Select Input Display 的选取。系统读取的是显示窗口对应影像的行列数所以你在 Open Image File 后必须把它显示出来并且确保窗口里显示的确实是你要占用的那景影像而不是别的辅助图层。如果你开了多个窗口选错窗口会直接导致掩膜行列数与影像不一致应用时系统会报维度不匹配。参数/操作作用注意点Select Input Display决定掩膜文件的尺寸基准必须选择目标影像所在窗口Options→Import EVFs导入矢量边界定义掩膜中 0/1 的分布导入前确认矢量投影与影像一致Mask Definition 中的选项可进一步定义掩膜内外值默认外 0 内 1按需调整输出路径掩膜文件写入位置建议独立命名如 studyarea_mask.img4.3 应用掩膜参数与 ROI 裁剪的差别掩膜生成后进入第二步Basic Tools→Masking→Apply Mask。在 Select Input File 里选择待裁剪影像在 Select Mask Band 里选择刚才生成的掩膜文件单击 OK 输出。为什么 Apply Mask 之后你得到的影像尺寸没有变这就是掩膜与 ROI 裁剪的另一个关键差别。ROI 裁剪会改变输出范围把范围压缩到 ROI 外接矩形Apply Mask 则保留完整的输入影像尺寸只把掩膜值为 0 的位置清成背景值。如果你对输出范围有严格要求比如必须保留原始坐标系下的完整范围用于后续配准掩膜是更合适的选择如果你希望输出文件越小越好后续直接按外接矩形处理那 ROI 裁剪更省事。当初次应用掩膜输出结果全黑或全白时先不要怀疑操作有问题用 Cursor Location 功能在影像上随机点几个位置检查像元值是否在正常区间再看背景区域是否已经被清成 0。掩膜的常见问题大部分不是出在 Apply Mask 本身而是出在 Build Mask 阶段——矢量导入后没有显示在掩膜预览区或者掩膜取反0 和 1 对调这类问题在 Check 阶段及时发现成本最低。5. 避坑ENVI 裁剪最容易翻车的五个地方5.1 裁剪出来的影像全黑或者背景值不是 0现象是裁剪输出的影像在 Display 里看是黑的用 Cursor Location 查像元值却发现背景区域不是 0而是一些杂乱的小值。原因通常是 Mask Background Value 与影像原有像元值的交集处理出了问题——当背景值没有被真正覆盖0 值像元和原有地物像元混在一起。另一个常见原因是输出后显示拉伸方式不合适黑背景被当作有效值做了线性拉伸看起来全是黑的。解决办法分两步。先查 Header Info 和直方图如果直方图在 0 处有尖峰背景值没问题只是显示拉伸的问题调整拉伸方式如 2% 线性拉伸即可如果背景区域像元值散布在 0 附近但非 0说明 Mask Background Value 没有生效回到裁剪参数对话框确认 Mask pixels outside of ROI 确实是 yes背景值确实填了 0重新输出。5.2 矢量导入后 ROI 位置明显偏移裁剪结果与原图对不上现象是矢量生成的 ROI 在影像上显示时边界和影像上的地物轮廓错开有时偏几百米甚至更远。原因几乎可以锁定为投影不一致Shapefile 的投影与影像投影不同ENVI 导入矢量时没有做动态投影转换或者导入时选错了投影参数。解决办法是回到 Open Vector File 那一步看导入对话框中显示的矢量投影与影像的投影做对比。两者不一致时优先用 ENVI 的投影转换工具将矢量投影转换成与影像一致再重新导入 Memory。从那以后我每次打开矢量文件前都先看一眼投影参数不再赌「默认应该没问题」。5.3 同一个 Shapefile 生成的掩膜用在不同影像上提示维度不匹配现象是掩膜文件建好了但 Apply Mask 时系统报错说掩膜行列数和输入影像不一致。原因很直接Build Mask 时选的 Select Input Display 不是这个影像对应的窗口或者两次打开的是同一个文件的裁剪后版本与原始版本行列数自然对不上。解决办法没有捷径重新 Build Mask在 Select Input Display 里仔细确认选的是目标影像的窗口。如果影像没有显示先显示再构建。需要注意Build Mask 一旦生成掩膜的行列数是固定的不会因为你后来改了影像显示方式而自动更新。5.4 菜单路径对不上老版本习惯在新版本界面里找不到入口现象是照着文档里的 File→Save File as→ENVI Standard 找发现菜单里根本没有这一项。原因很简单ENVI 不同版本的菜单结构差异很大老版本的 Save File as 流程在新版本里被挪到了 File→Save As 或 Export 里Spatial Subset 选项也随之移动。解决方法是先明确一个原则功能的入口可以变功能的逻辑不变。无论菜单怎么改名规则裁剪始终要经过「选定输入文件→Spatial Subset→Spectral Subset→输出」这条链路你只要在对应对话框中找到 Spatial Subset 按钮即可。如果真的找不到用菜单栏的 Search 功能搜 Subset大多数版本都会直接定位到相关工具。5.5 ROI 裁剪后输出文件范围不对多了一大块无用区域现象是用 ROI 裁剪后输出影像范围比 ROI 实际范围大一圈周边多出来的全是背景值。原因是在 Spatial Subset via ROI parameters 里 Mask pixels outside of ROI 选了 yes同时系统按 ROI 外接矩形输出外接矩形与多边形之间的空隙就成了背景值区域而这块区域本来是可以不写入文件的。解决方法是按需求区分如果你要的范围必须是一个矩形比如后续要和其他规则影像叠加那保留外接矩形没毛病如果你只想要 ROI 内部像元不想多占磁盘空间就把 Mask pixels outside of ROI 选 no输出范围会缩到 ROI 外接矩形内且外围直接裁掉虽然外接矩形外的像元不参与输出但已经不会有「大一圈的背景区」这种观感上的浪费。6. 进阶裁剪完成后的三个验证动作与一个效率习惯6.1 验证动作一查经纬度核对空间位置裁剪完成第一件事不是打开看颜色而是验证空间位置。在显示裁剪结果的窗口里调出光标位置面板把鼠标移动到影像四个角点上记录每个角的经纬度或投影坐标再和源影像对应位置的坐标对比偏差应当为零。如果是规则裁剪行列数换算出的范围应当与设定一致如果是 ROI 或掩膜裁剪至少要保证边界上的地物没有错位。遇到位置不一致的情况优先排查投影其次是矢量导入环节。6.2 验证动作二统计背景值占比用 ENVI 的 Statistics 工具查看裁剪结果的直方图统计像元值为 0 的占比。这个数字直接反映裁剪质量背景值占比过高说明裁剪范围留了太多空地后续分析效率会下降背景值在统计中参与计算也会污染均值、标准差等指标。如果 0 值占比超过 30%建议回到裁剪参数里收紧范围或者考虑用掩膜把无效区彻底剔除。6.3 一个效率习惯先小范围试裁剪再全量输出裁剪本身不慢但裁错的返工成本很高——尤其是大影像多次全量输出磁盘和时间都是开销。我现在会把「先试裁一块小区域」固化成流程在正式裁剪前先用一个小矩形范围验证参数——行列数换算是否正确、背景值是否生效、输出格式是否可读、坐标是否对齐全部确认后再改为完整范围输出。这个习惯是从一次翻车里长出来的当时直接用完整范围跑了十分钟输出后发现投影没对齐又重跑了一遍白白浪费了时间和磁盘。从那以后我每次拿到一份新影像都会强制先做一次最小范围的试裁剪确认坐标、行列数、背景值三样都对再跑全量。希望帮到你。本文还有配套的精品资源点击获取