当我们在ArcGIS中打开一景遥感影像时,是不是总是在我们的研究区周围出现我们并不希望看见的黑边,这种黑边在我们做图像分析或排版出图时总是个累赘,今天就教给大家在ArcGIS中轻松去除黑边。 影像产生黑边的原因无外乎在设置无效值时,将无效值设成了0,而影像在导入软件进行渲染时,并没有进行黑边的预处理,导致展示时有黑边出现。 在ArcMap中打开地图,我们会发现,黑边区域像元的DN值为0。我们的第一反应就是将影像中像元DN值为0的部分抹掉。不错,软件就是应用这个原理来工作的。以下提供至少7种方法用于去黑边,因为有的方法里面还有好几种。 一、单个或多个图像导入软件时属性中设置去除黑边1、 单个图像属性设置去除 在ArcMap中,每个图层都可以在其属性中进行符号化设置,黑边是图像中的背景,因此,去除黑边也是在对图层进行符号化时设置。具体步骤如下: (1)右键单击图层,在下拉菜单中选择Properties; (2)在打开的图层属性(Layer Properties)对话框中,选择Symbology选项卡; (3)在此选项卡中找到DisplayBackground Value:(R,G,B)可选框,这里勾选上,然后,设置RGB的值均为0,设置颜色显示为Nocolor。 2、多个图像属性设置 或者在影像导入之前,设置ArcMap地图属性。操作过程为,arcmap 菜单 自定义-arcmap选项-栅格-栅格图层-去除背景值,勾选0-0-0.
但是,用这种方式去除黑边只是会改变背景的显示状态,并没有对数据本身做任何改变,重新将图层加载进来时,仍会显示黑边。 二、应用setnull工具去除黑边 该工具的原理是将某一数值设置为Nodata(这里我们把值为0的像元设置为Nodata,其它像元数值保持不变)。该工具只能是对单波段数据进行操作,如果我们得到的数据是单波段的,那这种方法再合适不过了。 工具位置:ArcToolbox—Spatial Analyst Tools—Conditional—Set Null 参数设置如下:
Inputconditional raster:这里选择的样例数据为Landsat5数据的第5波段; Expression(optional):写入SQL查询语句,这里将值为零的像元设为Nodata。 Input falseraster or constant value:值不为零的像元数值保持不变,仍为原始像元值。 Output raster:设置输出影像位置。 三、应用copyraster工具去除黑边 Copy Raster工具可以对多波段和单波段数据进行操作,当然,该工具不仅仅是用来去影像黑边的,它的功能很强大,这里不做过多赘述。我们来看他是如何去除影像黑边的。 工具位置:ArcToolbox—Data Management Tools—Raster—Raster Dataset—CopyRaster。 参数设置如下:
Input Raster:输入需要去黑边的影像; Output RasterDataset:设置去黑边后影像的位置; IgnoreBackground Value:设置要忽略的像元值,这里将像元值为0的抹掉。 其他参数选择默认。
如果你的研究数据中也有0,也就是说部分0值像元为有效像元,不用担心,Copy Raster工具只会处理周边0值。 四,软件不兼容产生的黑边去除 如果是两种不同软件产生的影像金字塔也有可能出现黑边,比如,使用erdas生成了边缘为0值影像的金字塔,那么该影像在导入arcgis 中展示时也一定会有黑边现象。这种情况是由于两款软件不兼容产生的,解决办法是将原有金字塔全部删掉,使用arcgis金字塔工具全部重新创建金字塔,就不会出现黑边了。 五、 栅格计算器/Raster Calculator 去除黑边 单波段数据处理起来常常相对容易些,最常用的工具就是 栅格计算器/Raster Calculator 了。Raster Calculator 可以通过输入的Python语法的表达式,对当前数据框内的栅格图层进运算。它是个非常实用的栅格数据处理工具,如果你想 Dive In ,点 这里了解 Raster Calculator 的工作原理。 例如这个需求中仅需要一个简单表达式,使用到SetNull函数,如下所示: 其中,表达式是 SetNull("RasterLayer" == 0 , "RasterLayer" )
这样执行工具之后,所有的 0 值变成了 Nodata,彻底去了黑边。 六、影像分析去除黑边 多波段数据同样会受到黑边的困扰,而且现实情况往往没有单波段数据那么理想,仅通过一个表达式就可以搞定。例如,我们常用的影像底图数据,通常有三个波段,通过包含RGB三个波段的一组值来表示像元值,例如 (0,255,129)。我一般会根据需要处理的数据量的多少给出不同的处理方法建议: 同样第一步需要确认黑边值是什么?本例中是 (0,0,0) ArcMap的 Windows 菜单中有 Image Analysis 。在 Image Analysis 窗口中的 Processing 部分可以对当前数据框中的图层赋予函数或函数链,从而对栅格数据实时处理。 在弹出的窗口中,在 fx行右键插入函数,例如这个需求中会使用到 Mask Function。 设置 Mask Function,(0,0,0) 组合是无效值。为什么选择 All 而不是 Any? 这个答案很显见,同时都为0的像元值才是无效值,否则不是,例如(1,255,0)是有效的。或者说各个波段的0值是and关系,而不是or。 这样带有函数的新栅格图层会自动加入 ArcMap 的 TOC,看起来万事大吉,然而这里需要说明下,这个图层需要Export到硬盘上的某个位置,它目前还是个临时数据,当layer被移除掉,这个结果就不复存在。 所以,最后重要的一步,导出数据。 这种方法,还适用于具有多种无效值的情况。例如,除了(0,0,0) 还包含 (255,255,255) : 我们需要做的仅是继续增加栅格函数。在 Function Template Editor 中函数们顺序相接,像个环环相接的链条,所以称为 ”函数链/ Function Chain“,咦,好像跑题了。请继续看如何设置无效值: 这样就实现了去掉两组无效值。 七、镶嵌数据集去除黑边 那么摆在你面前的数据不是一个,而是“很多”呢?凡事保证质量之后,重复工作多了之后就同时需要保证效率,那么这种方法适用于“很多”、“大量”…… ArcGIS 的镶嵌数据集是个理想与实用兼备的影像数据管理模型,我们用它来“处理”大量栅格数据也是个不错的选择。 在地理数据库中创建镶嵌数据集,并将数据添加到镶嵌数据集中,之后: 在镶嵌数据集中可以使用工具 Define Mosaic Dataset Nodata 工具,对数据的无效值进行定义。 从而批量去除了无效值。 镶嵌数据集本身也支持栅格函数,类似影像数据窗口中函数模板的设置,同样可以设置函数链来实现一些复杂的要求。 当然,我们在使用镶嵌数据集的时候,也可以在重建footprint的时候去除无效值。但它只适用于影像边缘值一样的情况下。 使用 Build Footprint 工具执行系统计算得到新的轮廓线。
重新定义轮廓线的方法有:
RADIOMETRY:根据像素值范围来重新定义轮廓线的形状,从而排除无效数据(*辐射法重新计算轮廓线这个小专题可以展开,以后有时间可以详细整理。)
GEOMETRY:将轮廓线的形状重新定义为其原始几何形状
COPY_FROM_SIBLING:在使用全色锐化的栅格类型时,轮廓线将被替换为多光谱项的轮廓线。 设置有效值区域,比如,影像位深是8位,那么设置为将像素值设置为1-255,0黑边自动去除。
本文转载来自CSDN作者:冰清-小魔鱼 版权归作者所有 原文链接:https://blog.csdn.net/lijie45655/article/details/49132627
|